MaxCompute单表离线同步至ClickHouse

本文以MaxCompute单表离线同步写入ClickHouse场景为例,为您介绍ClickHouse离线同步在数据源配置、网络联通、同步任务配置方面的最佳实践。

背景信息

云数据库ClickHouse是面向联机分析处理的列式数据库。数据集成支持从ClickHouse同步数据到其他目标端,也支持从其他目标端同步数据到ClickHouse。本文以MaxCompute单表离线同步写入ClickHouse为例,为您介绍ClickHouse离线同步的完整流程。

使用限制

ClickHouse单表离线同步仅支持阿里云ClickHouse

前提条件

操作步骤

说明

本文以数据开发(Data Studio)(新版)界面操作为例,演示离线同步任务配置。

一、创建离线同步节点

  1. 进入DataWorks工作空间列表页,在顶部切换至目标地域,找到已创建的工作空间,单击操作列的快速进入 > Data Studio,进入Data Studio。

  2. 在左侧导航栏单击image,然后单击项目目录右侧的image,选择新建节点 > 数据集成 > 离线同步,自定义离线同步任务节点名称后,单击确认

二、网络与资源配置

  1. 网络与资源配置步骤,选择同步任务所使用的数据来源资源组数据去向。您可以为该任务分配任务资源占用CU数。

    • 数据来源选择已添加的MaxCompute数据源。

    • 数据去向选择已添加的ClickHouse数据源。

    • 资源组选择已与MaxComputeClickHouse数据源连通的资源组。您可以为该任务分配任务资源占用CU数。

  2. 数据来源数据去向卡片中单击测试连通性

    image

  3. 确保数据来源与数据去向均连通成功后,单击下一步

三、配置数据来源与去向

配置数据来源(MaxCompute)参数

数据来源MaxCompute表的配置要点如下。

image

配置项

配置要点

数据源

默认显示上一步选择的MaxCompute数据源。如果您使用的是标准模式的DataWorks工作空间,会分别显示开发和生产项目的名称。

Tunnel资源组

本教程默认为公共传输资源,若您拥有独享Tunnel Quota,可下拉选择。

选择待同步的MaxCompute表。如果您使用的是标准类型的DataWorks工作空间,请确保在MaxCompute的开发环境和生产环境中存在同名且表结构一致的MaxCompute表。

说明

如果:

  • 开发环境不存在待同步的MaxCompute表,则选择此处配置离线同步节点的来源表的下拉框中无法搜到待同步表。

  • 生产环境不存在待同步的MaxCompute表,同步任务提交发布后,数据同步任务调度运行时将会由于无法找到待同步表而导致同步任务运行失败。

  • 开发环境和生产环境的表结构不一致,同步任务提交发布后,同步任务实际调度运行时的列对应关系,可能与此处离线同步节点配置的列对应关系不一致,最终导致数据写入不正确。

过滤方式

支持通过分区过滤数据过滤

  • 分区过滤:通过分区表达式过滤指定来源数据的同步范围,选择此方式是还需配置分区信息分区不存在时参数。

  • 数据过滤:通过SQLWHERE过滤语句指定来源数据的同步范围(不需要填写WHERE关键字)。

分区信息

过滤方式选择为分区过滤时需要配置,您可以填入分区列的取值。

  • 取值可以是固定值,如ds=20220101

  • 取值可以是调度系统参数,如ds=${bizdate},当任务运行时,会自动替换调度系统参数。

分区不存在时

当分区不存在时,同步任务的处理策略,支持:

  • 出错

  • 忽略不存在分区,任务正常执行

配置数据去向(ClickHouse)参数

数据去向ClickHouse表的配置要点如下。

image

配置项

配置要点

数据源

默认显示上一步选择的ClickHouse数据源。

选择待同步的Clickhouse表。建议对于要进行数据同步的表,ClickHouse数据源开发和生产环境保证具有相同的表结构。

说明

此处会展示ClickHouse数据源开发环境地的表列表,如果您的ClickHouse数据源开发和生产环境的表定义不同,则可能出现任务在开发环境配置正常但提交生产运行后报错表不存在、列不存在的问题。

主键或唯一键冲突处理

选择insert into时,集成任务在运行时会校验主键的唯一性,以及约束冲突。

导入前准备语句

您可以在执行数据同步任务的前后按需执行SQL语句。比如在按天进行数据同步前清理对应天分区的数据,保证本次数据写入前对应分区是无数据的。

导入后完成语句

批量插入字节大小

数据同步写入ClickHouse时采用攒批写入方式,此处是攒批的字节数上限、条数上限。如果读取到的数据达到攒批的字节数上限或条数上限,则认为攒够一批,每攒够一批则写入一批数据到ClickHouse。

批量插入字节大小建议值为16777216(16MB),批量插入条数建议按照您单条记录的大小调整为一个较大值,从而依靠批量插入字节大小触发批次写入。

例如单条记录大小为1KB,批量插入字节大小设置为16777216(16MB),批量插入条数设置为20000(大于16MB/1KB=16384),则会通过批量插入字节大小触发写入,每达到16MB写入一次。

批量插入条数

批量写入ClickHouse异常时

批量写入ClickHouse异常时,可以选择异常处理策略:

  • 尝试单条写入,单条写入仍异常则计入脏数据:单条写入可用于识别少量脏数据但单条写入对ClickHouse负载影响较大,需要您谨慎选择。

  • 同步任务失败退出:出于ClickHouse稳定性考虑,可以选择写入异常时任务失败退出,通过配置告警及时知晓并人工介入处理相关异常。

  • 批量数据计入脏数据:如果想要保证任务运行完成并可接受批量数据丢弃,可选择将批量数据计入脏数据,通过脏数据允许条数控制任务是否退出。

四、配置字段映射

选择数据来源和数据去向后,需要指定读取端和写入端列的映射关系。您可以选择同名映射同行映射取消映射自动排版

五、配置通道控制

离线同步任务支持设置任务并发数脏数据策略等。本教程脏数据策略配置为不容忍脏数据,其他配置保持默认。更多信息,请参见通过向导模式配置离线同步任务

六、调试配置并运行

  1. 单击离线同步节点编辑页面右侧的调试配置,设置调试运行使用的资源组脚本参数,然后单击顶部工具栏的运行,测试同步链路是否成功运行。

  2. 您可以在左侧导航栏单击image,然后单击个人目录右侧的image,创建一个后缀为.sql的文件,执行如下SQL查询数据去向表中的数据是否符合预期。

    说明
    SELECT * FROM <ClickHouse侧目标表名> LIMIT 20;

七、调度配置与发布

单击离线同步任务右侧的调度配置,设置周期运行所需的调度配置参数后,单击顶部工具栏的发布,进入发布面板,根据页面提示完成发布

附录:调整内存参数

如果您在并发调大后同步速率增长不明显,可以尝试手工调整同步任务内存参数。调整方式如下:

  1. 在离线同步任务页面顶部工具栏单击脚本模式,将任务从向导模式切换为脚本模式。

    image

  2. 在脚本JSON段的setting中增加jvmOption参数,参数形如-Xms${heapMem} -Xmx${heapMem} -Xmn${newMem}

    image

向导模式下系统计算的${heapMem}的取值为768MB+(并发数-1)*256 MB。建议您在脚本模式中将${heapMem}设置为更大值,并将${newMem}设置为${heapMem}的三分之一。如并发数为8时,向导模式默认计算的${heapMem}2560MB,脚本模式中可设置更大值,如设置jvmOption-Xms3072m -Xmx3072m -Xmn1024m