使用DataWorks导入 Maxcompute 数据

文章目录


一、简介

DataWorks基于Hologres、MaxCompute等大数据计算引擎,为您提供专业高效、安全可靠的一站式大数据开发与治理平台。

Hologres与DataWorks深度兼容,通过可视化方式支持您在DataWorks中使用DataStudio模块进行数据的SQL开发,为您提供标准化、无门槛的开发服务和一站式构建实时数据仓库服务,以及高效、便捷的管理服务。同时结合DataWorks的调度等能力,简便、快捷地完成数据的处理和应用。

功能

DataStudio为您提供了界面化、智能高效的大数据开发与测试服务,您可以在绑定Hologres实例后,通过使用Hologres节点进行Hologres数据开发,包括SQL管理、MaxCompute数据同步等功能。

DataStudio支持的Hologres节点功能如下:

  • Hologres SQL:您可以使用标准的PostgreSQL进行Hologres开发,并将SQL提交调度,进行周期性作业。

  • 一键表结构导入:您可以使用DataStudio一键表结构同步功能批量创建Hologres外部表。

  • 一键表数据同步:您可以使用DataStudio导入MaxCompute数据至Hologres,并可以提交调度周期性作业。

二、Hologres SQL

Hologres SQL是基于SQL命令语句的编辑器,支持您在DataStudio中通过SQL命令语句进行Hologres开发。

操作步骤

  1. 新建Hologres SQL节点

    1. 数据开发 页面,鼠标悬停至顶部菜单栏的新建 ,选择新建节点 > Hologres > Hologres SQL

    2. 新建节点 对话框中,选择引擎实例 、输入名称 和选择路径

    3. 单击确认,完成新建Hologres SQL节点。

  2. Hologres开发

    打开新建的Hologres SQL节点,输入如下标准的PostgreSQL语句示例进行Hologres开发,单击图标。

    如下命令语句新建一个名称为supplier\_holo的表,并给表中插入数据,最后查询表中数据。

    sql 复制代码
    BEGIN;
    CREATE TABLE supplier_holo (
     s_suppkey bigint NOT NULL,
     s_name text NOT NULL,
     s_address text NOT NULL,
     s_nationkey bigint NOT NULL,
     s_phone text NOT NULL,
     s_acctbal bigint NOT NULL,
     s_comment text NOT NULL,
    PRIMARY KEY (s_suppkey)
    );
    CALL SET_TABLE_PROPERTY('supplier_holo', 'bitmap_columns', 's_suppkey,s_nationkey,s_acctbal,s_name');
    CALL SET_TABLE_PROPERTY('supplier_holo', 'dictionary_encoding_columns', 's_name,s_address');
    CALL SET_TABLE_PROPERTY('supplier_holo', 'time_to_live_in_seconds', '31536000');
    COMMIT;
    INSERT INTO supplier_holo VALUES 
    (1, 'Supplier01', 'New York', 17, '27-918-335-1736',  575594, 'careful'),  
    (6, 'Supplier06', 'London', 14, '24-696-997-4969',  136579, 'final accounts '),
    (10, 'Supplier03',  'Beijing', 24, '34-852-489-8585', 389191, 'ing waters'),  
    (18, 'Supplier04', 'Paris', 16, '26-729-551-1115', 704082, 'accounts snooze'),  
    (39, 'Supplier05', 'Shanghai',  8, '18-851-856-5633 611565', 88990, 'special packages'),  
    (48, 'Supplier06',  'Canada', 14, '24-722-551-9498',563062, 'xpress instructions affix');  
    SELECT * FROM supplier_holo;

三、一键表结构导入

DataStudio支持一键MaxCompute表结构同步功能,可以使用可视化方式批量创建外部表。

操作步骤

  1. 新建一键MaxCompute表结构同步节点。

    1. 进入数据开发页面。

      登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据开发与运维 > 数据开发,在下拉框中选择对应工作空间后单击进入数据开发。

    2. DataStudio 界面的左侧导航栏,单击,进入数据开发页面。

    3. 单击顶部菜单栏的新建 ,选择新建节点 >Hologres >一键MaxCompute表结构同步

    4. 新建节点 对话框中,选择引擎实例路径 ,并输入名称 ,单击确认

  2. 在编辑节点页面,配置各项参数。

    参数 说明
    目标连接 Hologres的实例名称。
    目标库 Hologres实例下的数据库名称。
    模式 Hologres数据库下的Schema名称。默认为public,若您有新建Schema,可以选择您新建的Schema。
    类型 目前仅支持对接MaxCompute。
    服务器列表 服务器名称。Hologres实例创建成功后会自动创建名称为odps_server的服务器, 可以直接调用,相关原理请参见postgres_fdw
    来源项目 MaxCompute的项目名称。
    选择要直接加速的表 您可以根据实际业务情况选择整库加速或者部分加速。
    表名冲突 创建表时表名称冲突策略,包含如下策略: - 忽略,继续创建其他表。 - 更新,修改同名表。 - 报错,不再重复创建。
    数据类型不支持 创建表时数据类型不支持策略,包含如下策略: - 报错,导入失败。 - 忽略,跳过不支持字段。
  3. Hologres一键表结构导入 节点的编辑页面,单击图标,保存配置信息。

  4. Hologres一键表结构导入 节点的编辑页面,单击图标,批量创建外部表结构。

  5. 查看批量创建的外部表。

    1. 在左侧导航栏,单击图标,进入表管理页面。

    2. 双击需要查看的外部表,显示表编辑页面。

四、一键表数据同步

DataStudio支持一键MaxCompute数据同步功能,您可以使用可视化方式导入MaxCompute表数据并进行查询。该方式比创建外部表直接查询数据的性能更好。

操作步骤

  1. 新建一键MaxCompute数据同步节点。

    1. 进入数据开发页面。

      登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据开发与运维 > 数据开发 ,在下拉框中选择对应工作空间后单击进入数据开发

    2. DataStudio 界面的左侧导航栏,单击,进入数据开发页面。

    3. 单击顶部菜单栏的新建 ,选择新建节点 >Hologres >一键MaxCompute数据同步

    4. 新建节点 对话框中,选择引擎实例路径 ,并输入名称 ,单击确认

  2. 在编辑节点页面,配置各项参数。

    参数 配置项 说明
    MaxCompute源表选择 目标连接 已绑定的Hologres数据源名称。
    目标库 Hologres实例下的数据库名称。
    外部表来源 - 已有外部表 已经提前在Hologres中创建映射MaxCompute数据的外部表。 - 新建外部表 表示无相应的外部表,需要同步时新建。
    外部Schema Hologres中已创建的MaxCompute外部表所在的Schema。 当外部表来源 选择已有外部表时,需要配置此参数。
    外部表表名字 Hologres中已创建的MaxCompute外部表名称。 当外部表来源 选择已有外部表时,需要配置此参数。
    外部服务器 Hologres实例创建成功后会自动创建名称为odps_server的服务器, 可以直接调用,相关原理请参见postgres_fdw。 当外部表来源 选择新建外部表时,需要配置此参数。
    MaxCompute项目 MaxCompute的项目名称。 当外部表来源 选择新建外部表时,需要配置此参数。
    MaxCompute表名 同步数据的MaxCompute表名称。 当外部表来源 选择新建外部表时,需要配置此参数。
    目标表设置 目标Schema 当前Hologres数据库下的Schema名称。
    目标表名 需要导入数据的Hologres内部表名称。若表名称已存在,执行后原表和数据将被删除重建。
    目标表描述 自定义添加需要导入数据的Hologres内部表的描述。
    导入GUC参数设置 GUC参数 导入MaxCompute数据前需要设置的GUC参数,支持的GUC参数请见GUC参数。其余SQL均不支持。
    同步设置 同步字段 选择需要同步的MaxCompute表字段,可以选择全部字段,也可以选择部分字段。
    分区配置 选择需要同步的分区字段。当前Hologres仅支持一级分区。 MaxCompute的多级分区,在Hologres中设定为一级分区,其余分区自动映射为Hologres的普通字段。
    索引配置 为目标表构建索引。索引的创建请参见建表概述
    SQL Script SQL Script 自动解析出当前运行的SQL,方便参照。
  3. 在编辑节点页面单击图标,保存配置信息。

  4. 在编辑节点页面单击图标,运行同步任务,导入MaxCompute表数据。

  5. 查看同步的MaxCompute表数据。

    1. 在左侧导航栏,单击图标,进入表管理页面。

    2. 双击需要查看的Hologres内部表,显示表编辑页面。

      说明

      若表管理页面未显示目标表,您需要在DataWorks数据地图中进行Hologres元数据采集,详情请参见数据地图

  6. (可选)周期性调度。

    1. 在节点的编辑页面,单击节点编辑区域右侧的调度配置 ,配置节点的调度属性,详情请参见配置基础属性

    2. 在节点的编辑页面,单击工具栏中的图标,保存节点。

    3. 单击工具栏中的图标,提交节点。

    4. 提交新版本 对话框中,输入变更描述 ,单击确认

五、通过DataWorks周期性导入MaxCompute

DataWorks调度任务,可以按照需求设置数据传输的时间和频率,并确保数据在传输和导入过程中的完整性和准确性。将MaxCompute分区表数据通过DataWorks导入Hologres分区表,实现两个平台的优势相互结合,从而提高数据处理效率和可靠性。

1、数据准备

本文以MaxCompute公共数据集public_data中的分区表dwd_product_movie_basic_info为例。dwd_product_movie_basic_info表结构示例如下。

sql 复制代码
--MaxCompute分区表DDL
CREATE TABLE IF NOT EXISTS public_data.dwd_product_movie_basic_info(
  movie_name STRING COMMENT '电影名称',
  director STRING COMMENT '导演',
  scriptwriter STRING COMMENT '编剧',
  area STRING COMMENT '制片地区/国家',
  actors STRING COMMENT '主演',
  `type` STRING COMMENT '类型',
  movie_length STRING COMMENT '电影长度',
  movie_date STRING COMMENT '上映日期',
  movie_language STRING COMMENT '语言',
  imdb_url STRING COMMENT 'imdb号'
) 
PARTITIONED BY (ds STRING) STORED AS ALIORC;

2、操作步骤

  1. MaxCompute数据准备。

    1. 登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据分析与服务 > 数据分析 ,单击进入数据分析 页面,单击左侧导航栏的图标,进入SQL查询页面。

    2. SQL查询 页面,输入如下SQL语句用于查看分区表20170112分区的数据,单击运行,SQL语句如下:

      sql 复制代码
      SELECT * FROM public_data.dwd_product_movie_basic_info WHERE ds = '20170112';
  2. Hologres中新建外部表。

    新建一张Hologres外部表,用于映射MaxCompute源头表数据。外表的字段顺序和字段类型需要和MaxCompute表的一一对应。

    1. 登录HoloWeb控制台SQL编辑器页面。

    2. 单击SQL编辑器 页签下方的图标,进入临时Query查询 窗口,在查询窗口工具栏选择已创建并登录的Hologres实例名数据库

    3. 请您在临时Query查询 的编辑框输入如下语句,单击运行

      如下语句使用IMPORT FOREIGN SCHEMA命令,创建名称为dwd_product_movie_basic_info的Hologres外部表。

      sql 复制代码
      IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update');
  3. Hologres中新建真实存储表(内部表)。

    在Hologres中新建一张内部表,用于接收并存储数据。

    1. HoloWeb 开发页面,单击新增SQL窗口

    2. 在新增的临时Query查询 页面,选择已创建的实例名数据库 后,请您在SQL查询的编辑框输入如下语句,单击运行

      本次示例是将MaxCompute分区表导入Hologres,因此需要在Hologres中创建的内部表为分区表。

      sql 复制代码
      BEGIN;
      CREATE TABLE "public"."holo_dwd_product_movie_basic_info" (
       "movie_name" TEXT,
       "director" TEXT,
       "scriptwriter" TEXT,
       "area" TEXT,
       "actors" TEXT,
       "type" TEXT,
       "movie_length" TEXT,
       "movie_date" TEXT,
       "movie_language" TEXT,
       "imdb_url" TEXT,
       "ds" TEXT
      )
      PARTITION BY LIST (ds);
      CALL SET_TABLE_PROPERTY('"public"."holo_dwd_product_movie_basic_info"', 'orientation', 'column');
      COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_name" IS '电影名称';
      COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."director" IS '导演';
      COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."scriptwriter" IS '编剧';
      COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."area" IS '制片地区/国家';
      COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."actors" IS '主演';
      COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."type" IS '类型';
      COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_length" IS '电影长度';
      COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_date" IS '上映日期';
      COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_language" IS '语言';
      COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."imdb_url" IS 'imdb号';
      COMMIT;
  4. 新建分区子表数据开发。

    此步骤是一个Hologres SQL模块,用于分区表跑调度。

    1. 登录DataWorks控制台,进入数据开发页面,创建Hologres SQL节点,详情请参见Hologres SQL节点

    2. 在节点的编辑页面,输入如下语句。

      在Hologres中不支持直接将分区数据直接写入分区父表,因此需要在Hologres中创建对应MaxCompute分区表中分区键值的分区子表,然后将分区数据导入对应的分区子表。分区键值由参数${bizdate}控制,在调度系统中自动赋值完成周期性调度,调度参数的更多内容,请参见调度参数支持的格式

      说明

      导入的分区数据必须和分区键值(本文示例使用的是ds)保持一致,否则会出现报错。

      导入分区数据的逻辑场景比较多,下面有两个场景供参考,请您根据实际业务逻辑两者选其中一个。

      • 场景一:导入新的分区数据。

        sql 复制代码
        --创建临时分区子表
        BEGIN;
        CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate}  (
         "movie_name" TEXT,
         "director" TEXT,
         "scriptwriter" TEXT,
         "area" TEXT,
         "actors" TEXT,
         "type" TEXT,
         "movie_length" TEXT,
         "movie_date" TEXT,
         "movie_language" TEXT,
         "imdb_url" TEXT,
         "ds" TEXT
        );
        COMMIT;
        --更新外表数据
        IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update');
        --等待30s再导入Hologres,以防Hologres meta信息更新缓存慢导致的数据不一致而同步不成功
        SELECT pg_sleep(30); 
        --将MaxCompute数据导入临时分区子表
        INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} 
        SELECT 
            "movie_name",
            "director",
            "scriptwriter",
            "area",
            "actors",
            "type",
            "movie_length",
            "movie_date",
            "movie_language",
            "imdb_url",
            "ds"
        FROM "public".dwd_product_movie_basic_info
        WHERE ds='${bizdate}';
        --导入新的分区数据
        BEGIN;
        ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate};
        --将临时分区子表绑定在分区父表上
        ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES IN ('${bizdate}');
        COMMIT;
                                            
      • 场景二:重新对历史分区数据刷新。

        sql 复制代码
        --创建临时分区子表
        BEGIN;
        CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate}  (
         "movie_name" TEXT,
         "director" TEXT,
         "scriptwriter" TEXT,
         "area" TEXT,
         "actors" TEXT,
         "type" TEXT,
         "movie_length" TEXT,
         "movie_date" TEXT,
         "movie_language" TEXT,
         "imdb_url" TEXT,
         "ds" TEXT
        );
        COMMIT;
        --更新外表数据
        IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update');
        --等待30s再导入Hologres,以防Hologres meta信息更新缓存慢导致的数据不一致而同步不成功
        SELECT pg_sleep(30); 
        --将MaxCompute数据导入临时分区子表
        INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} 
        SELECT 
            "movie_name",
            "director",
            "scriptwriter",
            "area",
            "actors",
            "type",
            "movie_length",
            "movie_date",
            "movie_language",
            "imdb_url",
            "ds"
        FROM "public".dwd_product_movie_basic_info
        WHERE ds='${bizdate}';
        --重新对历史分区数据刷新
        BEGIN;
        ALTER TABLE IF EXISTS holo_dwd_product_movie_basic_info DETACH PARTITION holo_dwd_product_movie_basic_info_${bizdate};
        DROP TABLE IF EXISTS holo_dwd_product_movie_basic_info_${bizdate};
        ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate};
        --将分区子表绑定在分区父表上
        ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES IN ('${bizdate}');
        COMMIT;
  5. 调度配置。

    Hologres SQL 编辑页面,单击节点编辑区域右侧的调度配置,配置节点的调度属性。

    说明

    需要更改的参数如下,未提及参数请保持默认值。

    • 基础属性

      参数
      参数 bizdate=${yyyymmdd}
    • 时间属性:在时间属性 区域,设置调度类型正常调度生效日期 保持默认(1970-01-01至9999-01-01),调度周期 选择超时时间 选择系统默认依赖上一周期不勾选。

      参数
      生成实例方式 发布后即时生成
      重跑属性 运行成功后不可重跑,运行失败后可以重跑
      定时调度时间 00:05
    • 调度依赖

      调度依赖为root节点即可(也可以根据业务逻辑选择已有的父节点)。请先将代码解析 选择为是,然后单击代码解析 ,会自动解析出root节点,最后再将代码解析选择为否。

  6. 发布调度。

    1. Hologres SQL 编辑页面,单击工具栏中的图标,保存节点。

    2. 单击工具栏中的图标,提交节点。

    3. 提交新版本 对话框中,输入变更描述

    4. 单击确认

  7. 运维中心发布。

    1. Hologres SQL 编辑页面,单击工具栏中最右侧的运维

    2. 进入运维中心 页面,单击左侧菜单栏周期任务运维 >周期任务

    3. 周期任务 页面,右键单击节点,选择补数据 >当前节点

    4. 选择左侧菜单栏运维助手 > 补数据,查看正在运行的任务以及任务状态。

  8. 查看数据。

    任务执行成功之后,将会在Hologres中自动创建对应分区数据的分区子表。

    1. 进入数据开发页面,创建Hologres SQL节点。详情请参见Hologres SQL节点

    2. 在节点的编辑页面,输入如下语句,进行数据查询。

      • 查看分区子表数据。

        sql 复制代码
        SELECT * FROM holo_dwd_product_movie_basic_info_20170112;
      • 查看分区父表总数据。

        sql 复制代码
        SELECT COUNT (*) FROM holo_dwd_product_movie_basic_info;
相关推荐
渣渣盟3 小时前
当反压问题解决后,如何进一步优化 Flink 作业的 Checkpoint 性能,让大状态作业也能稳定运行?
大数据·flink
迪康Defender3 小时前
终端邮件安全全覆盖:规则、关键词、附件白名单配置大全
大数据·人工智能·安全
中电金信3 小时前
中电金信“金融信息技术应用中试平台”入选《智能研发生产力工具选型手册》首批推荐工具
大数据·人工智能
碧口科技3 小时前
2026人力资源管理系统选型观察
大数据
redsea_HR3 小时前
红海云HR系统评测:三级国际医院HR数字化落地全程参考
大数据·人工智能
广州浮点FLOATLIC4 小时前
Mentor Graphics浮动许可证管理为什么一到流片节点就失控
java·大数据·数据库·许可证管理·cad 许可证优化
ha_lydms5 小时前
使用SQL导入MaxCompute的数据至Hologres
大数据·sql·dataworks·maxcompute·hologres·odps·datastudio
2601_949499945 小时前
硬件工程师实操:芯瑞科技两款 400G 高速互联方案参数、场景、选型全解析
大数据·运维·人工智能·科技·光模块
优氙费控5 小时前
报销审核效率低?AI费用审核正在改变财务工作方式
大数据·人工智能
云边云科技_云网融合5 小时前
金融医疗混合云组网如何满足数据安全与合规要求?
大数据·人工智能·物联网