BigQuery DDL迁移

更新时间:

本文介绍如何将BigQuery中的dataset以及dataset内的所有表(仅表结构)迁移至AnalyticDB for MySQL内表中。

方案介绍

BigQuery的元数据结构为project.dataset.table三层,您可以在SQL语句中以project.dataset.table的形式查询目标表。AnalyticDB for MySQL的元数据结构为 database.table 两层。您可以在SQL语句中以database.table的形式查询目标表。

BigQueryAnalyticDB for MySQL元数据结构如下图所示:

image

通过本教程的脚本文件,您仅需配置BigQuery的认证信息、待迁移的目标dataset以及AnalyticDB for MySQL的连接信息,即可自动化将BigQuery中的dataset以及dataset内的所有表(仅表结构)迁移至AnalyticDB for MySQL的数据库(Database)中。若需迁移BigQuery中的多个dataset,则需要多次执行迁移脚本。

前提条件

操作步骤

  1. AnalyticDB for MySQL中创建数据库,用于存储DDL转换的日志数据。

    1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,然后单击目标集群ID。

    2. 在左侧导航栏单击作业开发 > SQL开发

    3. 选择XIHE引擎和Interactive型资源组,执行如下SQL语句:

      CREATE DATABASE IF NOT EXISTS BQ2ADB_LOG_DB;
  2. 执行如下代码,安装Python依赖:

    pip3 install google-cloud-bigquery 
    pip3 install sqlalchemy
    pip3 install db-dtypes pandas
    pip3 install pymysql
  3. 下载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

  4. 执行如下命令,运行脚本文件。

    python GetBigQueryDDL.py
  5. 脚本执行完成后,在AnalyticDB for MySQL集群中检查是否迁移成功。

    1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,然后单击目标集群ID。

    2. 在左侧导航栏,单击数据管理 > 数据目录

    3. 单击目标数据库和表,查看表的详细信息,例如:表类型、表存储数据量、列名等。

      image

    4. 在左侧导航栏,单击作业开发 > SQL开发

    5. 选择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';

附录:BigQueryAnalyticDB for MySQL的功能对比及数据类型映射关系

功能对比

功能

BigQuery

AnalyticDB for MySQL

分区

支持。详情请参见Creating partitioned tables

支持。详情请参见partition_options(分区键与生命周期)

聚集索引

支持。详情请参见Create clustered tables

支持。详情请参见聚集索引(CLUSTERED KEY)

冷热分离

支持,且自动进行冷热分离,无需手动操作。

支持,需手动定义存储策略(storage_policy)及热分区数(hot_partition_count)

数据类型映射关系

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