全部产品
Search
文档中心

大数据开发治理平台 DataWorks:Hologres数据源

更新时间:Jul 08, 2026

Hologres数据源为您提供读取和写入Hologres双向通道的功能,本文为您介绍DataWorks的Hologres数据同步的能力支持情况。

使用限制

Hologres数据源仅支持使用Serverless资源组运行同步任务。

离线读写

  • Hologres Writer不支持将数据写入Hologres的外部表。

  • Hologres数据源连通性获取Hologres端点的逻辑:

    • 当前地域的Hologres实例,Hologres端点获取顺序:any Tunnel > Single Tunnel > Public(公网)

    • 跨地域的Hologres实例,Hologres端点获取顺序:Public(公网)> Single Tunnel

单表实时读

  • Hologres版本必须在2.1以上。

  • 不支持Hologres分区表的增量同步。

  • 不支持Hologres表DDL变更消息同步。

  • Hologres增量同步支持的数据类型包括以下类型:

    INTEGER、BIGINT、TEXT、CHAR(n)、VARCHAR(n)、REAL、JSON、SERIAL、OID、INT4[]、INT8[]、FLOAT8[]、BOOLEAN[]、TEXT[]。

  • Hologres单表实时同步时,需开启源端的Hologres数据库的表Hologres Binlog,详情可参见订阅Hologres Binlog

整库实时写

  • 实时数据同步任务暂不支持同步没有主键的表。

  • MySQL整库实时同步数据至Hologres时,目前仅支持将数据写入分区表子表,暂不支持写入数据至分区表父表。

支持的字段类型

字段类型

离线读(Hologres Reader)

离线写(Hologres Writer)

实时写

UUID

不支持

不支持

不支持

CHAR

支持

支持

支持

NCHAR

支持

支持

支持

VARCHAR

支持

支持

支持

LONGVARCHAR

支持

支持

支持

NVARCHAR

支持

支持

支持

LONGNVARCHAR

支持

支持

支持

CLOB

支持

支持

支持

NCLOB

支持

支持

支持

SMALLINT

支持

支持

支持

TINYINT

支持

支持

支持

INTEGER

支持

支持

支持

BIGINT

支持

支持

支持

NUMERIC

支持

支持

支持

DECIMAL

支持

支持

支持

FLOAT

支持

支持

支持

REAL

支持

支持

支持

DOUBLE

支持

支持

支持

TIME

支持

支持

支持

DATE

支持

支持

支持

TIMESTAMP

支持

支持

支持

BINARY

支持

支持

支持

VARBINARY

支持

支持

支持

BLOB

支持

支持

支持

LONGVARBINARY

支持

支持

支持

BOOLEAN

支持

支持

支持

BIT

支持

支持

支持

JSON

支持

支持

支持

JSONB

支持

支持

支持

实现原理

离线读

Hologres Reader支持两种读取模式:

JDBC模式(默认)

通过PSQL读取Hologres表中的数据,根据表的Shard Count发起多个并发,每个Shard对应一个Select并发任务:

  • Hologres在创建表时,在同一个CREATE TABLE事务中,通过CALL set_table_property('table_name', 'shard_count', 'xx')配置表的Shard Count。

    默认情况下,使用数据库默认的Shard Count,具体数值取决于Hologres实例的配置。

  • Select语句通过表的内置列hg_shard_id的Shard筛选数据。

Arrow模式(useArrow=true)

通过Hologres的COPY OUT Arrow协议读取数据,支持LZ4压缩传输,性能更高:

  • 需要Hologres版本 >= 4.0.18。

  • 同样按照Shard Count拆分并发任务。

  • 不支持函数列和常量列(只支持表中的物理列)。

  • 自动启用压缩传输(版本满足时)。

离线写

Hologres Writer通过数据同步框架获取Reader生成的协议数据,根据writeMode(写入模式)和conflictMode(冲突策略)的配置决定写入数据时的通道和冲突解决策略。

写入模式(writeMode)

写入模式

实现方式

适用场景

版本要求

INSERT

使用Holo Client批量写入(INSERT ON CONFLICT)。

实时场景(包含数据回撤)、通用写入场景。

所有版本

FIXED_COPY

使用Holo Client Fixed Copy流式写入。

实时场景(不包含数据回撤)、也可以用作离线导入场景。

Hologres >= 1.1

STAGE

先写入Hologres Internal Stage(Arrow格式),再从Stage导入目标表。

离线同步推荐模式,大批量导入,性能最优。

Hologres >= 4.1.0

COPY

使用JDBC COPY FROM STDIN写入文本CSV数据。

兼容旧版本的批量导入场景。

所有版本

场景推荐

冲突处理模式(conflictMode)

您可以通过配置conflictMode,决定新导入的数据和已有数据的主键发生冲突时,如何处理新导入的数据:

重要

conflictMode仅适用于有主键的表。具体写入原理和性能,详情请参考技术原理

  • conflictModeReplace(整行更新)模式时,新数据覆盖旧数据,整行所有列全部覆盖,没有配置列映射的字段会强制写入NULL。

  • conflictModeUpdate(更新)模式时,新数据覆盖旧数据,只覆盖配置有列映射的字段。

  • conflictModeIgnore(忽略)模式时,忽略新数据。

创建数据源

在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见数据源管理详细的配置参数解释可在配置界面查看对应参数的文案提示

数据同步任务开发

单表离线

单表实时

整库离线

  • 支持数据来源:AnalyticDB for MySQL 3.0、ClickHouse、Doris、Hologres、Oracle、PolarDB、SQL Server

  • 配置指导:整库离线同步任务配置

整库实时

  • 支持数据来源:AnalyticDB for OceanBase、MongoDB、MySQL、Oracle、PolarDB、PolarDB-X 2.0、PostgreSQL

  • 配置指导:整库实时同步任务配置

Serverless整库实时

实时任务同步常见问题:实时同步至Hologres常见问题

附录:脚本Demo与参数说明

离线任务脚本配置方式

如果您配置离线任务时使用脚本模式的方式进行配置,您需要按照统一的脚本格式要求,在任务脚本中编写相应的参数,详情请参见脚本模式配置,以下为您介绍脚本模式下数据源的参数配置详情。

Reader脚本Demo

  • 配置非分区表

    • 配置从Hologres非分区表读取数据至内存,如下所示。

      {
          "transform": false,
          "type": "job",
          "version": "2.0",
          "steps": [
              {
                  "stepType": "holo",
                  "parameter": {
                      "datasource": "holo_db",
                      "envType": 1,
                      "column": [ 
                          "tag",
                          "id",
                          "title",
                          "body"
                      ],
                      "where": "",
                      "table": "holo_reader_basic_src"
                  },
                  "name": "Reader",
                  "category": "reader"
              },
              {
                  "stepType": "stream",
                  "parameter": {
                      "print": false,
                      "fieldDelimiter": ","
                  },
                  "name": "Writer",
                  "category": "writer"
              }
          ],
          "setting": {
              "executeMode": null,
              "failoverEnable": null,
              "errorLimit": {
                  "record": "0"
              },
              "speed": {
                  "concurrent": 2,
                  "throttle": false
              }
          },
          "order": {
              "hops": [
                  {
                      "from": "Reader",
                      "to": "Writer"
                  }
              ]
          }
      }
    • Hologres表的DDL语句,如下所示。

      begin;
      drop table if exists holo_reader_basic_src;
      create table holo_reader_basic_src(
        tag text not null, 
        id int not null, 
        title text not null, 
        body text, 
        primary key (tag, id));
        call set_table_property('holo_reader_basic_src', 'orientation', 'column');
        call set_table_property('holo_reader_basic_src', 'shard_count', '3');
      commit;
  • 配置分区表

    • 配置从Hologres分区表的子表读取数据至内存。

      说明

      请注意partition的配置。

      {
          "transform": false,
          "type": "job",
          "version": "2.0",
          "steps": [
              {
                  "stepType": "holo",
                  "parameter": {
                      "selectedDatabase": "public",
                      "partition": "tag=foo",
                      "datasource": "holo_db",
                      "envType": 1,
                      "column": [
                          "tag",
                          "id",
                          "title",
                          "body"
                      ],
                      "tableComment": "",
                      "where": "",
                      "table": "public.holo_reader_basic_part_src"
                  },
                  "name": "Reader",
                  "category": "reader"
              },
              {
            "stepType":"stream",
            "parameter":{},
            "name":"Writer",
            "category":"writer"
          }
        ],
        "setting":{
          "errorLimit":{
            "record":"0"
          },
          "speed":{
            "throttle":true,
            "concurrent":1,
            "mbps":"12"
              }
           },
        "order":{
          "hops":[
            {
              "from":"Reader",
              "to":"Writer"
            }
          ]
        }
      }
    • Hologres表的DDL语句,如下所示。

      begin;
      drop table if exists holo_reader_basic_part_src;
      create table holo_reader_basic_part_src(
        tag text not null, 
        id int not null, 
        title text not null, 
        body text, 
        primary key (tag, id))
        partition by list( tag );
        call set_table_property('holo_reader_basic_part_src', 'orientation', 'column');
        call set_table_property('holo_reader_basic_part_src', 'shard_count', '3');
      commit;
      
      create table holo_reader_basic_part_src_1583161774228 partition of holo_reader_basic_part_src for values in ('foo');
      
      # 确保分区表子表已经创建且导入数据。
      postgres=# \d+ holo_reader_basic_part_src
                               Table "public.holo_reader_basic_part_src"
       Column |  Type   | Collation | Nullable | Default | Storage  | Stats target | Description 
      --------+---------+-----------+----------+---------+----------+--------------+-------------
       tag    | text    |           | not null |         | extended |              | 
       id     | integer |           | not null |         | plain    |              | 
       title  | text    |           | not null |         | extended |              | 
       body   | text    |           |          |         | extended |              | 
      Partition key: LIST (tag)
      Indexes:
          "holo_reader_basic_part_src_pkey" PRIMARY KEY, btree (tag, id)
      Partitions: holo_reader_basic_part_src_1583161774228 FOR VALUES IN ('foo')

Reader脚本参数

参数

描述

是否必选

默认值

database

Hologres实例内部数据库的名称。

table

Hologres的表名称,支持schema_name.table_name格式。如果是分区表,请指定父表的名称。与querySql互斥,至少配置一个。

条件必选

querySql

自定义查询SQL,配置后table和column参数将被忽略。与table互斥,至少配置一个。

条件必选

column

定义需要读取的数据列。["*"]表示全部列。也支持配置函数表达式列(仅JDBC模式)。

partition

针对分区表,表示分区Column以及对应的Value,格式为column=value

重要
  • 目前Hologres仅支持LIST分区,分区Column仅支持单个Column分区,且仅支持INT4或TEXT类型。

  • 请确认该参数和表DDL的分区配置匹配。

  • 请确认对应的子表已经创建,且已经导入数据。

,表示非分区表。

where

过滤条件,会拼接到SELECT语句的WHERE子句中。仅在table模式下生效。

useArrow

是否使用Arrow列存格式进行高性能数据同步。启用后Reader使用COPY OUT Arrow协议读取数据,以列式格式直通下游Writer,性能更高。需要Hologres >= 4.0.18,版本不满足时自动降级为JDBC模式。Arrow模式不支持函数列和常量列。目前支持源端与目标端为MaxCompute、Hologres、Hive/OSS/HDFS(Parquet/ORC)这几种类型的整库离线同步和单表离线同步。详情请参见Arrow列存格式高性能同步

false

compress

Arrow模式下是否启用LZ4压缩传输。仅在useArrow=true时生效。

true(版本满足时自动设置)

fetchSize

JDBC模式下每次从数据库获取的行数。

1000

jdbcReadTimeout

JDBC读取超时时间,单位为秒。

60

enableServerlessComputing

是否启用Hologres Serverless Computing加速查询。注意:此参数控制的是Hologres实例的Serverless Computing能力,与DataWorks的Serverless资源组是不同的概念。

false

serverlessComputingQueryPriority

Hologres Serverless Computing查询优先级,范围1-10,数字越大优先级越高。仅在enableServerlessComputing=true时生效。

3

serverlessComputingRequiredCores

Hologres Serverless Computing请求的核数。仅在enableServerlessComputing=true时生效。

5

Writer脚本Demo

  • 配置非分区表

    • 配置从MySQL产生的数据导入至Hologres普通表,示例为通过INSERT模式导入的配置。

      {
          "type": "job",
          "version": "2.0",
          "steps": [
              {
                  "stepType": "mysql",
                  "parameter": {
                      "envType": 0,
                      "useSpecialSecret": false,
                      "column": [
                          "<column1>",
                          "<column2>",
                          ......,
                          "<columnN>"
                      ],
                      "tableComment": "",
                      "connection": [
                          {
                              "datasource": "<mysql_source_name>",//mysql数据源名
                              "table": [
                                  "<mysql_table_name>"
                              ]
                          }
                      ],
                      "where": "",
                      "splitPk": "",
                      "encoding": "UTF-8"
                  },
                  "name": "Reader",
                  "category": "reader"
              },
              {
                  "stepType": "holo",
                  "parameter": {
                      "selectedDatabase":"public",
                      "schema": "public",
                      "writeMode": "FIXED_COPY",
                      "maxConnectionCount": 9,
                      "truncate":true,//清理规则
                      "datasource": "<holo_sink_name>",//Hologres数据源名称
                      "conflictMode": "ignore",
                      "envType": 0,
                      "column": [
                          "<column1>",
                          "<column2>",
                          ......,
                          "<columnN>"
                      ],
                      "tableComment": "",
                      "table": "<holo_table_name>",
                      "reShuffleByDistributionKey":false
                  },
                  "name": "Writer",
                  "category": "writer"
              }
          ],
          "setting": {
              "executeMode": null,
              "errorLimit": {
                  "record": "0"
              },
              "locale": "zh_CN",
              "speed": {
                  "concurrent": 2,//作业并发数
                  "throttle": false//限流
              }
          },
          "order": {
              "hops": [
                  {
                      "from": "Reader",
                      "to": "Writer"
                  }
              ]
          }
      }
    • Hologres表的DDL语句,如下所示。

      begin;
      drop table if exists mysql_to_holo_test;
      create table mysql_to_holo_test(
        tag text not null,
        id int not null,
        body text not null,
        brrth date,
        primary key (tag, id));
        call set_table_property('mysql_to_holo_test', 'orientation', 'column');
        call set_table_property('mysql_to_holo_test', 'distribution_key', 'id');
        call set_table_property('mysql_to_holo_test', 'clustering_key', 'birth');
      commit;
  • 配置分区表

    说明
    • 目前Hologres仅支持LIST分区,分区Column仅支持单个Column分区,且仅支持INT4或TEXT类型。

    • 请确认该参数和表DDL的分区配置匹配。

    • 配置从MySQL产生的数据同步至Hologres分区表的子表。

      {
        "type": "job",
        "version": "2.0",
        "steps": [
          {
            "stepType": "mysql",
            "parameter": {
              "envType": 0,
              "useSpecialSecret": false,
              "column": [
                "<column1>",
                "<column2>",
                  ......,
                "<columnN>"
              ],
              "tableComment": "",
              "connection": [
                {
                  "datasource": "<mysql_source_name>",
                  "table": [
                    "<mysql_table_name>"
                  ]
                }
              ],
              "where": "",
              "splitPk": "<mysql_pk>",//mysql的pk字段
              "encoding": "UTF-8"
            },
            "name": "Reader",
            "category": "reader"
          },
          {
            "stepType": "holo",
            "parameter": {
              "selectedDatabase": "public",
              "writeMode": "insert",
              "maxConnectionCount": 9,
              "partition": "ds=20201215",//Hologres分区键
              "truncate": "false",
              "datasource": "<holo_sink_name>",//Hologres数据源名
              "conflictMode": "ignore",
              "envType": 0,
              "column": [
                "<column1>",
                "<column2>",
                  ......,
                "<columnN>"
              ],
              "tableComment": "",
              "table": "<holo_table_name>",
              "reShuffleByDistributionKey":false
            },
            "name": "Writer",
            "category": "writer"
          }
        ],
        "setting": {
          "executeMode": null,
          "failoverEnable": null,
          "errorLimit": {
            "record": "0"
          },
          "speed": {
            "concurrent": 2,//作业并发数
            "throttle": false//限流
          }
        },
        "order": {
          "hops": [
            {
              "from": "Reader",
              "to": "Writer"
            }
          ]
        }
      }
    • Hologres表的DDL语句,如下所示。

      BEGIN;
      CREATE TABLE public.hologres_parent_table(
        a text ,
        b int,
        c timestamp,
        d text,
        ds text,
        primary key(ds,b)
        )
        PARTITION BY LIST(ds);
      CALL set_table_property('public.hologres_parent_table', 'orientation', 'column');
      CREATE TABLE public.holo_child_1 PARTITION OF public.hologres_parent_table FOR VALUES IN('20201215');
      CREATE TABLE public.holo_child_2 PARTITION OF public.hologres_parent_table FOR VALUES IN('20201216');
      CREATE TABLE public.holo_child_3 PARTITION OF public.hologres_parent_table FOR VALUES IN('20201217');
      COMMIT;

Writer脚本参数

基础参数

参数

描述

是否必选

默认值

database

Hologres实例内部数据库的名称。

table

Hologres的表名称,目前支持表名称中包含Schema,例如schema_name.table_name

writeMode

写入模式,支持INSERTCOPYFIXED_COPY(需Hologres >= 1.1)、STAGE(需Hologres >= 4.1.0)四种模式,详情请参见实现原理中的写入模式说明。离线同步建议使用STAGE或FIXED_COPY;实时场景(含数据回撤)建议使用INSERT。

conflictMode

冲突处理模式,包括Replace(整行更新)、Update(部分列更新)和Ignore(忽略新数据),详情请参见实现原理。仅对有主键表生效。

column

定义导入目标表的数据列,必须包含目标表的主键集合(serial自增主键和generated column可除外)。["*"]表示全部列。

partition

针对分区表,表示分区Column以及对应的Value,格式为column=value。配置后Writer会自动创建子表(如不存在),并写入对应子表。

说明
  • 目前Hologres仅支持LIST分区,分区Column仅支持单个Column分区,且仅支持INT4、BIGINT、DATE或TEXT类型。

  • 请确认该参数和表DDL的分区配置匹配。

  • STAGE模式和FIXED_COPY模式不支持直接写入分区父表,需指定partition参数。

,表示非分区表

reShuffleByDistributionKey

在 Hologres 中,主键表的批量导入默认会触发表锁,这限制了多个连接的并发写入能力。开启 reShuffle 功能可以在离线同步场景下,允许不同的任务根据数据分片键将数据写入指定的 Holo shard,这样可以实现并发批量写入,从而显著提升写入性能。与传统 JDBC 模式的实时写入相比,启用该功能不仅能降低 Holo 服务端的负载,还能进一步提升写入效率。

重要

该功能仅在Serverless资源组开启。

false

truncate

写入Holo表之前是否需要清空目标表。

  • true:清空目标表。

    说明
    • 目前仅支持清空非分区表和静态分区表,不支持清空动态分区表,如果您使用的是动态分区表,并且设置了参数值为true,同步任务将会异常退出。

    • 如果您使用的是静态分区表,并设置了参数值为true,则会清空该分区子表数据,不会清空父表数据。

  • false:不清空目标表。

false

partitionFormat

动态分区值格式化规则。对于Date类型源数据,指定格式如yyyyMMdd;对于字符串类型源数据,指定截取规则如2:5表示substring(2, 2+5)

preSql

写入前执行的SQL列表。不支持在分区父表上执行。

postSql

写入后执行的SQL列表。

连接与性能参数

参数

描述

是否必选

默认值

maxConnectionCount

写入并发连接数。该值会根据实际任务并发数自动调整(maxConnectionCount / actualConcurrent),建议设置为任务并发数的1~3倍。

3

maxRetryCount

失败重试次数。

10

jdbcReadTimeout

JDBC连接超时时间,单位为秒。

120

maxCommitSize

单次提交的最大字节数(字节)。

2097152(2MB)

maxCommitCount

单次提交的最大记录数。

256

reShuffleByDistributionKey

在Hologres中,主键表的批量导入默认会触发表锁,这限制了多个连接的并发写入能力。开启reShuffle功能可以在离线同步场景下,允许不同的任务根据数据分片键将数据写入指定的Holo shard,这样可以实现并发批量写入,从而显著提升写入性能。与传统JDBC模式的实时写入相比,启用该功能不仅能降低Holo服务端的负载,还能进一步提升写入效率。

重要

该功能仅在Serverless资源组开启。

false

removeU0000InTextColumnValue

是否移除文本列值中的字符(PostgreSQL不支持在TEXT类型中存储该字符)。

true

Hologres Serverless Computing参数

以下参数用于控制Hologres实例的Serverless Computing能力,可加速Reader的查询读取以及STAGE模式Writer的INSERT FROM Stage操作。

注意:Hologres Serverless Computing与DataWorks Serverless资源组是不同的概念。前者是Hologres实例内部的弹性计算能力,后者是DataWorks运行同步任务的调度资源。
适用范围:读取端(Reader)所有模式均支持;写入端(Writer)仅STAGE模式支持。

参数

描述

是否必选

默认值

enableServerlessComputing

是否启用Hologres Serverless Computing加速。

false

serverlessComputingQueryPriority

Serverless Computing查询优先级,范围1-10,数字越大优先级越高。

3

serverlessComputingRequiredCores

Serverless Computing请求的核数。设为0表示由引擎自动决定。

无(不设置)

FIXED_COPY模式特有参数

参数

描述

是否必选

默认值

isBinaryFormat

是否使用二进制格式进行数据传输。设置为true时使用二进制格式,具有更高的传输效率;设置为false时使用文本(CSV)格式。

true

checkRecordBeforePut

写入前是否对Record进行校验(包括类型检查、长度检查等)。开启后可以在客户端提前发现脏数据。

true

maxCellBufferSize

单行数据的最大缓冲区大小,单位为字节。需要保证能放下一行数据,否则会写入失败。

10485760(10MB)

STAGE模式特有参数

参数

描述

是否必选

默认值

stageTTL

Internal Stage的生命周期,单位为秒。Stage超过该时间后会被自动清理。

86400(1天)

stageFileSizeLimit

单个Stage文件大小上限,单位为字节。超过该限制后会自动创建新文件。

67108864(64MB)

stageMaxBatchSize

Record写入Arrow批次的最大行数。每凑够该行数后写入一个Arrow RecordBatch。

8192

stageCompress

是否启用Arrow LZ4压缩。启用后可显著减少Stage存储空间和网络传输量。需要Hologres >= 4.2.8,版本不满足时自动关闭。

true

高级参数

参数

描述

是否必选

默认值

useArrow

是否使用Arrow列存写入链路。设置为true时,如果Hologres版本 >= 4.1.0,会自动启用STAGE写入模式。Hologres Writer支持接收任意上游Reader产出的Arrow格式数据(ArrowTabularRecord),也支持接收普通行式Record(自动转换为Arrow格式写入Stage)。详情请参见Arrow列存格式高性能同步

false

default.enable

是否为NOT NULL但未设置值的列自动填充默认值。

true

enableWriteBitTypeWithString

是否允许以字符串形式写入BIT类型数据。

false

holoClient

Holo Client高级配置项(Map格式),可设置底层HoloConfig的任意参数。例如{"writeBatchSize": 512}