本文档主要介绍了DLA读写MaxCompute数据的操作步骤。

背景信息

MaxCompute(原ODPS)是一种快速、完全托管的TB/PB级数据仓库解决方案。您可以在DLA中创建MaxCompute Schema(映射数据库)和MaxCompute映射表,然后通过MySQL客户端或者MySQL命令行工具连接DLA中的MaxCompute Schema,使用标准SQL语句读取MaxCompute数据。

准备工作

操作步骤

  1. 创建MaxCompute Schema。
    1. 登录DLA控制台
    2. 在左侧导航栏单击Serverless Presto > SQL访问点
    3. SQL访问点页面,单击登录到DMS,在DMS中执行以下SQL创建Schema。
      您也可以通过MySQL客户端或者程序代码等方式链接DLA,然后执行以下SQL创建Schema。
      CREATE SCHEMA maxcpmpute_test WITH DBPROPERTIES (
      catalog = 'odps',
      project = 'dla_project',
      user = '<access-key>',
      password = '<access-secret>'
      )
      参数名称 参数说明
      catalog Schema类型。
      project MaxCompute项目名称。
      user 访问MaxCompute所使用云账号对应的AccessKey。
      password 上述AccessKey对应的Access Key Secret。
  2. 同步MaxCompute表信息。您可以通过以下两种方式进行表信息同步:
    说明
    • MaxCompute中的外表无法同步到DLA中。
    • 如果MaxCompute中的表是分区表,则在DLA建表语句中,分区列会作为普通列进行定义,且分区列的定义排序在所有列之后。
    • 通过MSCK REPAIR同步MaxCompute Project中的所有表。
      msck repair database <schema_name>
    • 通过CREATE TABLE同步指定单表信息。
      • 同步单表信息(非分区表)
        通过以下SQL同步bank_data表信息。
        CREATE external TABLE bank_data
        (
         age             BIGINT COMMENT '年龄',
         job             STRING COMMENT '工作类型',
         marital         STRING COMMENT '婚否',
         education       STRING COMMENT '教育程度',
         default         STRING COMMENT '是否有信用卡',
         housing         STRING COMMENT '房贷',
         loan            STRING COMMENT '贷款',
         contact         STRING COMMENT '联系途径',
         month           STRING COMMENT '月份',
         day_of_week     STRING COMMENT '星期几',
         duration        STRING COMMENT '持续时间',
         campaign        BIGINT COMMENT '本次活动联系的次数',
         pdays           DOUBLE COMMENT '与上一次联系的时间间隔',
         previous        DOUBLE COMMENT '之前与客户联系的次数',
         poutcome        STRING COMMENT '之前市场活动的结果',
         emp_var_rate    DOUBLE COMMENT '就业变化速率',
         cons_price_idx  DOUBLE COMMENT '消费者物价指数',
         cons_conf_idx   DOUBLE COMMENT '消费者信心指数',
         euribor3m       DOUBLE COMMENT '欧元存款利率',
         nr_employed     DOUBLE COMMENT '职工人数',
         y               BIGINT COMMENT '是否有定期存款'
        );
      • 同步单表信息(非分区表)
        例如MaxCompute中有以下分区表:
        CREATE TABLE IF NOT EXISTS part_datatype_test_complex (
          int_test int,
          bigint_test bigint,
          double_test double,
          string_test string,
          datetime_test datetime,
          boolean_test boolean,
          array_test array<INT>,
          map_test map<string, string>,
          struct_test_1 struct<x:INT, y:INT>,
          struct_test_2 struct<x:string, y:string>
        )
        partitioned by (pt bigint, region string);
        DLA中对应的建表语句为:
        CREATE EXTERNAL TABLE IF NOT EXISTS part_datatype_test_complex (
          int_test int,
          bigint_test bigint,
          double_test double,
          string_test string,
          datetime_test datetime,
          boolean_test boolean,
          array_test string,
          map_test string,
          struct_test_1 string,
          struct_test_2 string
        )
        partitioned by (pt bigint, region string);
  3. 读取MaxCompute表数据。
    表创建成功后,您可以通过MySQL客户端或者MySQL命令行工具连接DLA中的MaxCompute Schema,从而通过SELECT读取MaxCompute表数据。