Dataworks离线同步MaxCompute数据至Hologres案例

一、背景

创作者激励计划需要计算用户收益。目前,由开发人员在测试环境中使用假数据进行测试,数仓中完成计算并通过消息或接口反馈结果。然而,我们遇到了以下问题:

  1. 测试环境无法连接到数仓;
  2. 将 DataWorks 同步至线上环境存在安全隐患。

为了解决这些问题,我们组内沟通后决定尝试将数据同步至 Hologres 中。这样开发人员可以直接读表, Hologres 作为 HSAP 数据库,不仅支持分析和线上服务,其性能也优于 MySQL。

二、案例

2.1 step1

因为数仓很多都是分区表,所以此处选择使用分区表来进行测试,我将app_cockpit_polaris_day_inc同步至 Hologres ,首先,我要在文档中查看如何创建 Hologres分区表,具体可见 官方文档,具体代码如下:

BEGIN;

-- 创建表并指定分区方法
CREATE TABLE IF NOT EXISTS odps2holo_app_cockpitxxxx_day_inc (
   stat_date                    TIMESTAMP WITH TIME ZONE,
   school_type                  TEXT,
   work_year                    TEXT,
   edu_level                    TEXT,
   from_type                    TEXT,
   ...
   pt                           text
)
PARTITION BY LIST (pt)
WITH (
   auto_partitioning_enable = 'true',
   auto_partitioning_time_unit = 'DAY',
   auto_partitioning_time_zone = 'Asia/Shanghai',
   auto_partitioning_num_precreate = '3', -- 预创分区
   auto_partitioning_num_retention = '1' -- 分区保留时长
);
-- 设置表属性
CALL SET_TABLE_PROPERTY('public.odps2holo_app_cockpitxxxx_day_inc', 'time_to_live_in_seconds', '3153600');
CALL SET_TABLE_PROPERTY('public.odps2holo_app_cockpitxxxx_day_inc', 'orientation', 'column');
CALL SET_TABLE_PROPERTY('public.odps2holo_app_cockpitxxxx_day_inc', 'binlog.level', 'none');

-- 添加注释
COMMENT ON TABLE public.odps2holo_app_cockpitxxxx_day_inc IS '驾驶舱北极星指标拆分日统计';

COMMIT;

我要说明一点,Hologres 分区表包含:父子表概念,首先要创建一个父分区表,然后再创建一个或多个子分区表,接着才能够往表中 insert 数据,否则会报错。

我在 DDL 中设置了auto_partitioning_num_precreate 参数,它能够预先创建分区,比如我是 0820 提交的代码,最终结果显示基于当前时间向后创建了3个子分区表,可以从 webUI 中观察结果:

在这里插入图片描述

2.2 step2

在 DataWorks 中创建一个离线任务:
在这里插入图片描述
step1 中DDL 可以根据 一键生成目标表结构 中代码复制修改即可。
在这里插入图片描述
Hologres中的分区键必须是已有的字段,所以额外add 一个 partition column :pt,这跟Hive的分桶表何其相似,分桶表的分桶键值也得设置在已有字段上,在字段映射时可以输入你要同步的分区列,如分区列有pt等;

2.3 step3

最后设置带参运行,将 pt in (‘20240818’,‘20240819’) 的进行数据同步
在这里插入图片描述
同步成功之后,我们取holo webUI 中查看,
在这里插入图片描述
可以看到,同步完成后目标分区表多了2个 以 _20240819_20240818 结尾的子分区表,说明在同步时是会自动创建子分区表的。接着我们进行查询:

在这里插入图片描述
再查看下执行计划:

在这里插入图片描述

从执行计划中看到,并非全表扫描,只是扫描5个子分区中的一个子分区表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值