本文为您介绍如何使用DataWorks数据集成离线同步导入MaxCompute的数据至Hologres。

前提条件

  1. 开通DataWorks,详情请见入门概述
  2. 开通Hologres并绑定DataWorks,详情请见HoloStudio快速入门
  3. 开通MaxCompute,详情请见开通MaxCompute
说明 本文使用非分区表和分区表两个场景来做演示。Hologres与MaxCompute在底层无缝连通,如果您需要将大量MaxCompute数据导入Hologres,建议您在Hologres中通过SQL方式导入数据,详情请参见使用SQL将MaxCompute导入Hologres

MaxCompute非分区表导入Hologres

该场景下将会介绍如何将MaxCompute非分区表导入至Hologres非分区表,主要操作步骤如下:

  1. 准备MaxCompute非分区数据

    准备一张MaxCompute非分区表并导入数据,可以参见创建和查看表来准备,也可以直接选用已有的MaxCompute。本次示例选用已有MaxCompute表,其DDL如下:

    CREATE TABLE IF NOT EXISTS bank_data
    (
        age            BIGINT COMMENT '年龄',
        job            STRING COMMENT '工作类型',
        marital        STRING COMMENT '婚否',
        education      STRING COMMENT '教育程度',
        creditcard     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 '是否有定期存款'
    ) ;
    部分数据展示如下:736
  2. 配置Hologres数据源
    在使用数据集成之前,需要先配置Hologres数据源。在DataWorks中单击右上角小扳手,进入工作空间管理,选择左侧菜单栏数据源管理 > 新增数据源 > Hologres。并填写对应的参数信息。详细操作步骤可以参见配置Hologres数据源737
  3. 数据集成导入数据
    1. 配置数据源之后,返回数据集成页面,新建同步任务来进行数据导入。738
    2. 在数据导入页面配置数据来源为需要导入的MaxCompute表,数据去向为hologres,点一键生成目标表会在Hologres中自动创建一张表,用于接收导入的MaxCompute数据(您也可以先在Hologres中创建一张表,保持字段类型一致即可)。739
      参数 描述 必选 说明
      一键生成目标表 将会在Hologres中创建一张字段相同的表用于接收数据 也可以在Hologres中提前建好接收数据的内表
      分区信息 空,表示非分区表 关于分区表的导入可以参见场景2
    3. 选择写入模式冲突策略更多详情见Hologres Writer
      参数 描述 必选 说明
      分区信息 给对应的分区字段赋值 可以赋参数也可以指定固定的值
      写入模式 writeMode包括SDK(极速写入)和SQL(INSERT INTO)两种模式:
      • SDK(极速写入)模式通过Hologres的实时数据API写入数据,为您提供最优的性能。
      • writeMode为SQL(INSERT INTO)模式通过PSQL的INSERT INTO命令写入数据。
      使用SDK模式需要使用实时数据API来完成,详见实时数据API概述
      写入冲突策略
      • 更新(Replace)模式:新数据覆盖旧数据。
      • 忽略(Ignore)模式时:忽略新数据。
      写入冲突策略仅适用于有主键的表。
    4. 选择字段映射策略,您可以选择全部字段数据导入,也可以选择部分字段数据导入。740
      参数 描述
      同名映射 单击同名映射,可以根据名称建立相应的映射关系,请注意匹配数据类型。
      同行映射 单击同行映射,可以在同行建立相应的映射关系,请注意匹配数据类型。
      取消映射 单击取消映射,可以取消建立的映射关系。
      自动排版 可以根据相应的规律自动排版。
      手动编辑源表字段 请手动编辑字段,一行表示一个字段,首尾空行会被采用,其他空行会被忽略。
      添加一行
      • 可以输入常量,输入的值需要使用英文单引号,如'abc’、'123’等。
      • 可以配合调度参数使用,例如${bizdate}等。
      • 可以输入关系数据库支持的函数,例如now()、count(1)等。
      • 如果您输入的值无法解析,则类型显示为未识别。
    5. 配置通道控制若是写入模式为SDK模式,必须使用独享资源组741
      参数 描述 必选 说明
      任务期望最大并发数 数据同步任务内,可以从源并行读取或并行写入数据存储端的最大线程数。
      同步速率 设置同步速率可以保护读取端数据库,以避免抽取速度过大,给源库造成太大的压力。 同步速率建议限流,结合源库的配置,请合理配置抽取速率。
      错误记录数 错误记录数,表示脏数据的最大容忍条数。
      任务资源组 任务运行的机器,SDK模式必须使用独享资源组 详情请参见独享数据集成资源组新增自定义数据集成资源组
    6. 任务配置完成之后,单击页面上方的保存 > 运行,系统将会把MaxCompute数据导入Hologres。
  4. Hologres查询数据

    任务执行完成之后,可以在Hologres中查询导入的数据,示例在HoloStudio中查询如下:

    SELECT * from bank_data;
    742

场景2:MaxCompute分区表导入至Hologres

Hologres与MaxCompute无缝打通,支持将MaxCompute分区表数据导入Hologres中,但Hologres的分区与MaxCompute的分区并无强映射关系,您可以将MaxCompute的分区数据导入一张Hologres非分区表中,也可以将MaxCompute分区数据导入至Hologres分区表中,下面分两种case来做演示:

  1. 准备MaxCompute分区表

    准备一张MaxCompute分区表,可以选择已有的分区表,也可以直接新建一张分区表并导入数据,示例选择已有的分区表,其建表DDL如下:

    create table odps_table
    (
        shop_name     string,
        customer_id   string,
        total_price   INT 
    )
    partitioned by (sale_date string ,sale_time string);

    其部分数据展示如下:

    743
  2. 配置Hologres数据源

    在使用数据集成之前,需要先配置Hologres数据源。在DataWorks中单击右上角小扳手,进入工作空间管理,选择左侧菜单栏数据源管理 > 新增数据源 > Hologres并填写对应的参数信息,详细操作步骤可以参见配置Hologres数据源

    737
  3. 数据集成导入分区数据
    • case1:MaxCompute分区表导入Hologres非分区表
      1. 选择数据来源为MaxCompute,并为分区配置参数,详情可以参见调度参数744
      2. 数据去向选择一键生成目标表,将会自动在Hologres中创建一张非分区表。若是需要将分区信息同步,还需要在建表SQL中手动添加MaxCompute中的分区表字段,示例如下:745
      3. 选择写入模式冲突策略,更多详情见Hologres Writer746
        参数 描述 必选 说明
        分区信息 给对应的分区字段赋值 可以赋参数也可以指定固定的值
        写入模式 writeMode包括SDK(极速写入)和SQL(INSERT INTO)两种模式:
        • SDK(极速写入)模式通过Hologres的实时数据API写入数据,为您提供最优的性能。
        • writeMode为SQL(INSERT INTO)模式通过PSQL的INSERT INTO命令写入数据。
        使用SDK模式需要使用实时数据API来完成,详见实时数据API概述
        写入冲突策略
        • 更新(Replace)模式:新数据覆盖旧数据。
        • 忽略(Ignore)模式时:忽略新数据。
        写入冲突策略仅适用于有主键的表。
      4. 单击右侧调度配置,在参数一栏根据业务情况给分区参数赋值,示例如下:753
      5. 在数据集成里面MaxCompute表的分区字段将不会显示在字段映射,需要手动添加对应的分区字段并与Hologres的字段一一映射,示例如下:749
      6. 配置通道控制若是写入模式为SDK模式,必须使用独享资源组741
        参数 描述 必选 说明
        任务期望最大并发数 数据同步任务内,可以从源并行读取或并行写入数据存储端的最大线程数。
        同步速率 设置同步速率可以保护读取端数据库,以避免抽取速度过大,给源库造成太大的压力。 同步速率建议限流,结合源库的配置,请合理配置抽取速率。
        错误记录数 错误记录数,表示脏数据的最大容忍条数。
        任务资源组 任务运行的机器,SDK模式必须使用独享资源组 详情请参见独享数据集成资源组新增自定义数据集成资源组
      7. 保存任务并运行,即可将指定分区数据导入至Hologres非分区表。还可以根据业务情况,将作业提交到调度,周期性导数据,详见依赖关系
    • case2:MaxCompute分区表导入Hologres分区表

      数据集成SDK模式支持直接将MaxCompute分区表数据直接导入Hologres的分区父表,再自动路由到对应的分区子表,具体操作步骤如下:

      1. 选择数据来源为MaxCompute,并为分区配置参数,详情可以参见调度参数750
      2. 在数据去向选择Hologres,并单击一键生成目标表,将建表SQL修改为建分区表的SQL,示例如下:
        begin;
        create table holo_test (
         "shop_name" text,
         "customer_id" text,
         "total_price" int8,
         "sale_date" text,
         "sale_time" text
        )
        partition by  list (sale_date);
        commit;
        751
        说明 MaxCompute的分区和Hologres的分区并没有强映射关系,且Hologres当前仅支持一级分区,可以根据业务情况建立分区。
      3. 配置数据去向的分区信息和写入策略,示例如下:752
        参数 描述 必选 说明
        分区信息 给对应的分区字段赋值 可以赋参数也可以指定固定的值
        写入模式 writeMode包括SDK(极速写入)和SQL(INSERT INTO)两种模式:
        • SDK(极速写入)模式通过Hologres的实时数据API写入数据,为您提供最优的性能。
        • writeMode为SQL(INSERT INTO)模式通过PSQL的INSERT INTO命令写入数据。
        使用SDK模式需要使用实时数据API来完成,详见实时数据API概述
        写入冲突策略
        • 更新(Replace)模式:新数据覆盖旧数据。
        • 忽略(Ignore)模式时:忽略新数据。
        写入冲突策略仅适用于有主键的表。
      4. 单击右侧调度配置,在参数一栏根据业务情况给分区参数赋值,示例如下:753
      5. 在数据集成里面MaxCompute表的分区字段将不会显示在字段映射,需要手动添加对应的分区字段并与Hologres的字段一一映射,示例如下:749
      6. 配置通道控制若是写入模式为SDK模式,必须使用独享资源组741
      7. 保存任务并运行,即可将指定分区数据导入至Hologres非分区表。还可以根据业务情况,将作业提交到调度,周期性导数据,详见依赖关系
  4. Hologres查询数据
    • 若是Case1将MaxCompute分区表数据导入至Hologres非分区表,可以直接在Hologres中查对应的表即可,示例查询如下:
      SELECT * FROM holo;
      756
    • 若是Case2将MaxCompute分区表数据导入至Hologres分区表,在任务完成之后将会生成一个对应的分区子表,可以查对应的分区父表或者分区子表,示例查询如下:
      SELECT * FROM holo_test_1585817112344
      755