BigQuery DDL迁移
本文介绍如何将BigQuery中的dataset
以及dataset
内的所有表(仅表结构)迁移至AnalyticDB for MySQL内表中。
方案介绍
BigQuery的元数据结构为project.dataset.table
三层,您可以在SQL语句中以project.dataset.table
的形式查询目标表。AnalyticDB for MySQL的元数据结构为 database.table
两层。您可以在SQL语句中以database.table
的形式查询目标表。
BigQuery和AnalyticDB for MySQL元数据结构如下图所示:
通过本教程的脚本文件,您仅需配置BigQuery的认证信息、待迁移的目标dataset
以及AnalyticDB for MySQL的连接信息,即可自动化将BigQuery中的dataset
以及dataset
内的所有表(仅表结构)迁移至AnalyticDB for MySQL的数据库(Database)中。若需迁移BigQuery中的多个dataset
,则需要多次执行迁移脚本。
前提条件
AnalyticDB for MySQL集群的产品系列为企业版、基础版或湖仓版。
若您没有符合上述条件的集群,可以登录云原生数据仓库AnalyticDB MySQL控制台创建企业版或基础版集群。
已创建数据库账号。
如果是通过阿里云账号访问,只需创建高权限账号。
如果是通过RAM用户访问,需要创建高权限账号和普通账号并且将RAM用户绑定到普通账号上。
已安装Python环境,且Python版本为3.8及以上版本。
已将运行Python应用程序的服务器IP地址添加至AnalyticDB for MySQL集群的白名单中。
操作步骤
在AnalyticDB for MySQL中创建数据库,用于存储DDL转换的日志数据。
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,然后单击目标集群ID。
在左侧导航栏单击
。选择XIHE引擎和Interactive型资源组,执行如下SQL语句:
CREATE DATABASE IF NOT EXISTS BQ2ADB_LOG_DB;
执行如下代码,安装Python依赖:
pip3 install google-cloud-bigquery pip3 install sqlalchemy pip3 install db-dtypes pandas pip3 install pymysql
下载GetBigQueryDDL.py示例文件,并替换相关配置参数:
参数
说明
示例值
json_key
Google Cloud服务账号的密钥。获取方法,请参见列出和获取服务账号密钥。
json_key = r"""{
"type": "serv****",
"project_id": "project****",
"private_key_id": "12ef****",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIE****\n-----END PRIVATE KEY-----\n",
"client_email": "adb****@project****com",
"client_id": "1049****",
"auth_uri": "https://accounts.google.com/****",
"token_uri": "https://oauth2.googleapis.com/****",
"auth_provider_x509_cert_url": "https://www.googleapis.com/****",
"client_x509_cert_url": "https://www.googleapis.com/****.com",
"universe_domain":"googleapis.com"
}"""
project_id
Google Cloud中的项目名称。
447****
dataset_id
BigQuery的数据集名称。
迁移过程中,会在AnalyticDB for MySQL中创建一个同名的数据库。若AnalyticDB for MySQL中已存在同名的数据库,迁移流程不会报错,后续步骤将会在已存在的数据库中执行。
mar****
adb_username
AnalyticDB for MySQL集群的数据库账号名称。
user
adb_password
AnalyticDB for MySQL集群的数据库账号的密码。
password****
adb_host
AnalyticDB for MySQL集群的连接地址。
amv-t4ny****.ads.aliyuncs.com
adb_port
AnalyticDB for MySQL集群的端口号,固定为3306。
3306
adb_database
步骤1创建的数据库的名称,用于存储DDL转换的日志数据。
BQ2ADB_LOG_DB
执行如下命令,运行脚本文件。
python GetBigQueryDDL.py
脚本执行完成后,在AnalyticDB for MySQL集群中检查是否迁移成功。
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,然后单击目标集群ID。
在左侧导航栏,单击。
单击目标数据库和表,查看表的详细信息,例如:表类型、表存储数据量、列名等。
在左侧导航栏,单击。
选择XIHE引擎和Interactive型资源组,执行如下命令查看日志表中的结果,判断是否存在迁移失败的表。
SELECT * FROM `BQ2ADB_LOG_DB`.`BigQuery2ADB_DDL_TRANSFORMATION_LOG_TABLE`; SELECT * FROM `BQ2ADB_LOG_DB`.`BigQuery2ADB_DDL_TRANSFORMATION_LOG_TABLE` WHERE STATUS = 'FAILED';
附录:BigQuery与AnalyticDB for MySQL的功能对比及数据类型映射关系
功能对比
功能 | BigQuery | AnalyticDB for MySQL |
分区 | 支持。详情请参见Creating partitioned tables。 | 支持。详情请参见partition_options(分区键与生命周期)。 |
聚集索引 | 支持。详情请参见Create clustered tables。 | 支持。详情请参见聚集索引(CLUSTERED KEY)。 |
冷热分离 | 支持,且自动进行冷热分离,无需手动操作。 |
数据类型映射关系
BigQuery | AnalyticDB for MySQL |
STRING | VARCHAR(255) |
BYTES | VARCHAR(255) |
INT64 | BIGINT |
FLOAT64 | DOUBLE |
NUMERIC | DECIMAL(38, 9) |
BIGNUMERIC | DECIMAL(38, 9) |
BOOL | BOOLEAN |
DATE | DATE |
DATETIME | DATETIME |
TIMESTAMP | TIMESTAMP |
TIME | TIME |
JSON | JSON |
ARRAY | JSON or ARRAY |
STRUCT | JSON |
OTHERS DATATYPE | VARCHAR |