本文介绍如何通过INSERT外表方式将AnalyticDB for MySQL数据导出到MaxCompute(原名ODPS)分区表。

前提条件

  • 根据MaxCompute准备工作快速入门准备目标数据表。

    例如通过创建表语句,在MaxCompute中创建以下表。如果您已经有目标数据表,请跳过该步骤。

    • 一级分区表
      CREATE TABLE IF NOT EXISTS odps_table
      (
      uid STRING,
      other STRING,
      ds STRING
       )
      PARTITIONED BY (ds STRING)
      LIFECYCLE 3;     
    • 二级分区表
      CREATE TABLE IF NOT EXISTS odps_table
      (
      uid STRING,
      other STRING,
      ds STRING
       )
      PARTITIONED BY (ds STRING,other STRING)
      LIFECYCLE 3;     
  • 根据AnalyticDB for MySQL快速入门,完成创建实例、设置白名单、创建账号和数据库等准备工作。
说明 导出数据到MaxCompute分区表时,需要明确指定待写入的分区,不支持同时导出到多个分区,您可以通过执行多个SQL的方式实现将数据导出到多个MaxCompute分区。MaxCompute最高支持6级分区,其他多级分区的操作步骤类似。

导出到MaxCompute一级分区表

本示例将AnalyticDB for MySQL的adb_table表中的数据导出到MaxCompute的odps_table一级分区表中。

  1. 连接集群,登录数据源AnalyticDB for MySQL数据库。
  2. 新建一张外表映射到MaxCompute的目标数据表。
    CREATE TABLE odps_external_table
    (
    uid string,
    other string,
    ds string
    )
    ENGINE='ODPS'
    TABLE_PROPERTIES='{
    "endpoint":"http://service.odps.aliyun-inc.com/api",
    "accessid":"xxx",
    "accesskey":"xxx",
    "project_name":"xxx",
    "table_name":"odps_table",
    "partition_column":"ds"
    }'
    参数 说明
    ENGINE=’ODPS’ 表示该表是外部表,使用的存储引擎是MaxCompute。
    TABLE_PROPERTIES 用于告知AnalyticDB for MySQL如何访问MaxCompute,并向其写入数据。
    endpoint MaxCompute的EndPoint(域名节点)
    说明 目前仅支持AnalyticDB for MySQL通过MaxCompute的VPC网络Endpoint访问MaxCompute。

    如何查看MaxCompute的EndPoint,请参见配置Endpoint

    accessid 您在访问MaxCompute目标数据表时所持有的AccessKey ID。
    accesskey 您在访问MaxCompute目标数据表时所持有的Access Key Secret。
    project_name MaxCompute中目标数据表所在的工作空间名
    table_name MaxCompute中目标数据表的表名
    partition_column 分区字段
  3. 将数据从AnalyticDB for MySQL外表导出到MaxCompute的数据表一级分区表。
    说明 adb_table_column不包含partition里面的字段。
    insert [overwrite] into odps_external_table partition(ds='20200401')
    select [adb_table_column, ...] from adb_table [where ...]

导出到MaxCompute二级分区表

本示例将AnalyticDB for MySQL的adb_table表中的数据导出到MaxCompute的odps_table二级分区表中。

  1. 连接集群,进入数据源AnalyticDB for MySQL数据库。
  2. 新建一张外表映射到MaxCompute的数据表。
    CREATE TABLE odps_external_table
    (
    uid string,
    other string,
    ds string
    )
    ENGINE='ODPS'
    TABLE_PROPERTIES='{
    "endpoint":"http://service.odps.aliyun-inc.com/api",
    "accessid":"xxx",
    "accesskey":"xxx",
    "project_name":"xxx",
    "table_name":"odps_table",
    "partition_column":"ds,other"
    }'
  3. 将数据从AnalyticDB for MySQL外表导出到MaxCompute数据表二级分区表。
    说明 adb_table_column不包含partition里面的字段。
    insert [overwrite] into odps_external_table partition(ds='20200401',other='hangzhou')
    select [adb_table_column, ...] from adb_table [where ...]