You need to enable JavaScript to run this app.
文档中心
大数据研发治理套件(私有化)

大数据研发治理套件(私有化)

复制全文
离线数据集成
Hive任务配置
复制全文
Hive任务配置

Hive数据源为您提供读取和写入Hive数据的双向通道能力,实现Hive与不同数据源之间进行数据传输。
下文为您介绍Hive数据同步的能力支持情况。

数据源注册

您可在数据开发 > 数据源管理中进行配置注册,相关操作可参见“注册数据源”。

任务配置

任务新建完成后,进入任务配置页面,您可根据实际场景,配置Hive读写通道任务。

Hive离线读

数据来源选择Hive,并完成以下相关参数配置:
其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。

参数

说明

*数据源类型

下拉选择Hive数据源类型。

*数据源名称

下拉选择已在数据源注册界面创建成功的数据源名称信息。
若还未建立相应数据源,可单击数据源管理按钮,前往创建Hive数据源。

*数据表

对应数据库下,选择需要采集的 Hive 表名称,下拉可选。

表存储类型

选定表后,会展出选择 Hive 表的存储类型信息,如 Parquet、Text、Orc、Hudi COW、Hudi MOR 存储格式类型,便于您直接了解选中表的存储属性。

*读取方式

Hive读取方式支持“基于HDFS”和“基于JDBC”:

  • 基于HDFS:需要指定分区字段的分区内容,仅支持单分区内容的读取。
  • 基于JDBC:通过SQL读取数据,可实现字段的where过滤。

*分区设置

基于HDFS方式读取数据时,会根据所选数据库表,获取 Hive 表中分区信息,指定读取的分区。分区内容可通过时间变量参数方式进行设置。详见“调度参数说明”。
其中:

  • 天级分区,若日期格式为:yyyyMMdd 如20181017,则填写${date}。
  • 天级分区,若日期格式为:yyyy-MM-dd 如2018-11-17,则填写${DATE}。

说明

暂不支持通过集成任务读取非分区表。

数据过滤

基于JDBC方式读取数据时,支持您将需要同步的数据进行筛选条件设置,只同步符合过滤条件的数据,可直接填写关键词 where 后的过滤SQL语句且无需填写结束符号(;),例如:create_time > '${date}',不需要填写 where 关键字。
语句填写完成后,您可单击右侧的校验按钮,进行过滤语句校验。

说明

  • 该过滤语句通常用作增量同步,暂时不支持 limit 关键字过滤,其 SQL 语法需要和选择的数据源类型对应。
  • 过滤语句中支持时间参数 ${data}、项目变量参数 {{var}} 等参数配置。更多时间参数说明详见调度参数说明、项目变量参数配置详见参数管理

Hive离线写

数据目标类型选择Hive,并完成以下相关参数配置:
其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。

参数

说明

*数据源类型

下拉选择Hive数据源类型。

*数据源名称

下拉选择已在数据源注册界面创建成功的数据源名称信息。
若还未建立相应数据源,可单击数据源管理按钮,前往创建Hive数据源。

*数据表

选择需要写入数据的 Hive 表名称信息,下拉可选。

  • 一键建表:当源端为 MySQL、Oracle、SQLServer、PostgreSQL、GaussDB、StarRocks 时,若目标 Hive 表还未创建,且源端已选定需要采集的表和字段时,可通过单击“一键建表”按钮,依据对源端采集的字段信息,快速进行目标表的创建。

    说明

    • 一键建表默认会将源端中大写的字段信息,在目标表中自动转换成为小写字段名称;
    • 在离线场景中一键建表默认会以分区表形式,且指定为 Parquet 格式进行创建,您可根据实际情况,在一键建表窗口中进行建表语句修改,如修改表名、字段名/类型、是否为分区表等;
    • 当源端为 Oracle 数据源,且字段类型为 Number 类型时,不同精度需注意以下转换规则,比如:
      1. NUMBER(1):在这个示例类型下,precision = 1,scale = 0
      2. NUMBER(10, 2):在这个示例类型下,precision = 10, scale = 2
        转换规则说明如下:
      • 当 scale == 0时:
        • precision - scale <= 18 && precision - scale == 1,一键建表中目标字段为 boolean 类型;
        • precision - scale <= 9,目标字段为 int;
        • precision - scale > 9 && precision - scale <= 18 目标字段为 bigint;
      • 当 scale > 0 时:
        目标表字段类型为 Decimal 类型,且:
        • 当 precision >= 38 时,precision = 38,即 Decimal(38,N),N 最高为 10;
        • 当 scale > = 10 时,scale = 10,即 Decimal(N,10),N 最高为 38。
  • 修改数据表:若源端采集的字段存在更新情况时,您可单击修改数据表按钮,及时对目标表字段进行快速修改。

表存储类型

选定表后,会展出选择 Hive 表的存储类型信息,如 Parquet、Text、Orc、Hudi COW、Hudi MOR 存储格式类型,便于您直接了解选中表的存储属性。

*分区设置

分区字段从 Hive 表中自动获取。
分区类型支持选择动态分区类型或具体分区字段类型:

  • 动态分区:即根据源端字段值内容,进行动态写入,动态分区值必须存在于源端 Columns 中,选择动态分区类型后,便可自动将表分区字段,加入到下方字段映射中。
  • 具体分区字段类型:其分区内容可设置具体时间分区粒度,可以用表达式:${date}、${hour} 等参数变量表示。参数变量详见“调度参数说明”。

说明

  • 一级分区仅支持天级分区
  • 小时级分区,若日期格式为:hh 如:02,则填写:${hour}
  • 小时分区,若日期格式为:H,如:2,则填写:${HOUR}
  • 天级分区,若日期格式为:yyyyMMdd 如:20181017,则填写:${date}
  • 天级分区,若日期格式为:yyyy-MM-dd 如:2018-11-17,则填写:${DATE}
  • 月级分区,若日期格式为:MM,如:09,则填写:${month}
  • 静态分区如App,只能输入一个分区内容的值
  • 动态分区,分区内容不需要填写值,置空即可

数据写入方式

下拉选择目标数据写入方式,支持以下两种写入方式:

  • insert overwrite: 先删除原有数据再写入新数据;
  • insert into: 直接写入新数据。

Hive 流式写

数据目标类型选择Hive,并完成以下相关参数配置:
其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。

参数

说明

*目标类型

下拉选择 Hive 数据源类型。

*数据源名称

已在数据源管理中注册成功的 Hive 数据源,下拉可选。
若还未建立相应数据源,可单击数据源管理按钮,前往创建 Hive 数据源。

*数据表

选择需要流式写入数据的 Hive 表名称信息,下拉可选分区表或非分区表。

  • 快速建表:若目标 Hive 表还未创建,您可单击快速建表按钮,前往数据地图界面,依据源端采集的字段信息,进行 EMR Hive 表的创建。
  • 修改数据表:若源端采集的字段存在更新情况时,您可单击修改数据表按钮,及时对目标表字段进行快速修改。

表存储类型

选定表后,会展出选择 Hive 表的存储类型信息,如 Parquet、Text、Orc、Hudi COW、Hudi MOR 存储格式类型,便于您直接了解选中表的存储属性。

分区频率

支持选择天级或小时级的分区频率:

  • 天级:每天产出一次分区;
  • 小时级:每小时产出一次分区;

说明

数据跟随 Hive 分区生成的时间产出,并非实时写入。

分区设置

流式写入 Hive 分区表时,分区字段的分区类型默认为动态分区(DYNAMIC)或时间分区类型,不支持修改。

  • 动态分区可根据源端字段值内容,进行动态写入,动态分区值必须存在于源端 Columns 中,字段映射时会自动将表分区字段,加入到下方字段映射中。
  • 时间分区将根据设置的分区粒度,自动生成对应的分区值,如:${date} 表示日期分区,${hour} 表示小时分区。

说明

  • 分区类型中动态分区数目不能过多,会导致消费速率降低,推荐<10。
  • 目前仅 Hudi 分区表支持动态分区配置,其余类型暂不支持。

设置字段映射信息

字段为一一映射关系,即将源表字段信息,同步到同一行的目标字段信息中。数据源在选择好来源和目标数据源信息后,您可通过转换模式和基础模式方式来配置字段映射关系。操作详见“字段映射配置”。

高级参数

您可选择是否开启高级参数设置,参数说明详见“高级参数设置”。
在通道任务里,若源端为 MySQL、PostgreSQL、SQL Server 或者 Oracle,并且源端数据表中的字段类型是 Varchar,当 Varchar 字段的精度发生改变时,写入 Hive 目标端的 Varchar 字段数据可能会出现被截断的场景,在此场景下,添加以下高级参数后:

  • 当源端字段长度 > 目标端字段长度时,目标端的 Varchar 字段长度自动更新为源端字段长度,数据正常写入,从而避免源端数据因长度过长而被截断的情况;
  • 当源端字段长度 < 目标端字段长度时,目标端的 Varchar 字段长度不变,数据正常写入。

当以下指定范围内的数据库及字段类型发生长度加长时,且目标端的 Hive 表使用 varchar 字段类型,可自动为 Hive 表的 varchar 类型的长度自动增加:

  • MySQL:char、varchar
  • Oracle:char、nchar、nvarchar2、varchar、varchar2
  • PostgreSQL:character、char、varchar、character varying、bit varying
  • SQLServer:char、varchar、nchar、nvarchar

说明

  • 以下高级参数仅能处理上述场景。当发生varchar长度缩短、字段类型变更(例如int转varchar)时无法处理。
  • 以下高级参数仅在普通通道任务中生效,解决方案中以下参数暂不生效。
--添加以下高级参数:
job.writer.table_operations={"createTable":"IGNORE","addTableColumn":"EXECUTE","renameTable":"IGNORE","truncateTable":"IGNORE","updateTableColumn":"EXECUTE","renameTableColumn":"IGNORE","dropTable":"IGNORE","dropTableColumn":"IGNORE"}

job.common.interceptor_name=batch_catalog_v2

Image

调度设置

单击右侧侧边栏的调度设置,配置相关调度设置参数。调度设置说明详见“调度设置”。

任务调试

参数配置完成后,可单击调试按钮 ,在弹出的窗口中,选择业务日期进行调试,调试结果/日志可在页面查看。
单击保存图标,完成草稿保存。

读写 Hudi 表常见问题

在 DataLeap 数据集成 Hive 数据源中,支持对 Hudi 表类型进行读写操作。但鉴于 Hudi 表自身的复杂性,在数据集成任务读写 Hudi 表时,会碰到一些常见问题。以下将为您介绍几个相关的常见问题 FAQ。

一、Bucket index 使用注意事项

Hudi 通过索引机制将给定的 Hudi 记录数据一致地映射到 File ID,从而提供高效的 Upsert。
Hudi 表中的 Record Key 和 File Group/File ID 之间的这种映射关系,一旦在 Record 的第一个版本确定后,后续将不会改变。简而言之,包含一组记录数据的所有版本必然在同一个 File Group 中。目前 DataLeap 数据集成写入 Hudi 表默认采用的索引类型为 Bucket index。

说明

目前 Hudi Bucket Index (RFC-29) 的实现已经合入社区最新的主分支。

1.1 Bucket index 仅能保证分区内主键唯一

针对 Hudi 分区表, bucket index 只能保证分区内主键唯一,而不能保证全局主键唯一。即可能出现以下情况:
Image
如上图所示,int_info 为主键,可以看到整张表数据中会出现重复主键的情况,但在分区内部是唯一的。您可在使用时根据业务实际情况自行决定该情况是否能够满足自身的业务需求。
如果您的场景中对数据的全局唯一性有强诉求,则可以使用以下高级参数 flink state index进行配置。高级参数配置如下:

参数名称

参数说明

默认值

job.writer.index.type

默认值为 bucket,在不同分区内可以有主键重复记录,但在单独的某个分区内部是唯一。
若需要对整表的数据有全局唯一性诉求时,可将该参数设置为 job.writer.index.type=flink_state,便可实现整表数据的主键全局唯一。

bucket

1.2 使用索引不同导致写入失败

当使用 DataLeap 数据集成写入 Hudi 表时如果之前该 Hudi 表非空,例如表中已通过 Spark 任务写入了部分数据,由于 Spark 默认采用的是 Simple index,而集成任务默认采用性能更高的 bucket index 索引类型,则索引不同会导致写入任务失败,可以看到如下图一样的报错:
Image
解决方案如下:

  1. 清空表数据后,只通过 DataLeap 数据集成的方式写入数据;
  2. 配置下述高级参数适配之前 Spark 写入的数据:
    job.writer.index.type=flink_state
    

二、不同读取方式的配置

Hudi 表中有三种数据查询方式:

  • Snapshot Queries(快照查询)
  • Incremental Queries (增量查询)
  • Read Optimized Queries (优化读)

DataLeap 数据集成任务默认采用 Snapshot Queries(快照查询),且集成提供了下述高级参数配置可以修改数据读取方式:

参数名称

参数说明

默认值

job.reader.hoodie.datasource.query.type

读取 Hudi 表数据时,指定数据查询读取方式,参数值为:snapshot、incremental、read_optimized。

  • snapshot:快照查询
  • incremental:增量查询
  • read_optimized:优化读

snapshot

三、其他注意事项

3.1 primaryKey/preCombineField字段必须非空

Hudi 表创建表时通常需要指定 preCombineField 属性,用于当主键冲突时会根据该字段的值进行排序,优先选择此值更大的记录。
因此在配置 DataLeap 数据集成任务写入 Hudi 表数据时需要注意 primaryKey/preCombineField 字段值均不能为 null,否则会报下图错误,下述表将 ts 字段设置为 preCombineField:
Image

3.2 一键建表/字段建表形式暂不支持建 Hudi 表

Image
目前 DataLeap 数据集成通道任务一键建表和数据同步解决方案自动建表时,暂不支持直接创建 Hudi 类型的表,自动建表时会导致解决方案异常退出,因此建议您可通过手动建表的方式进行创建 Hudi 表。
解决方案:

  1. 在任务开发界面创建一个临时查询 HSQL 任务。

  2. 并在临时查询任务中,通过以下 SQL 示例语句创建 Hudi 表:

    ```SQL CREATE TABLE IF NOT EXISTS dts.test_hudi (id BIGINT, narme STRING, ts BIGINT, dt STRING, hh STRING) USING hudi TBLPROPERTIES (type = 'mor', primaryKey = 'id', preCombineField = 'ts') PARTITIONED BY (dt, hh); ```
  3. 执行临时查询任务,创建 Hudi 表,用于数据集成任务或解决方案配置。

最近更新时间:2025.07.31 18:13:48
这个页面对您有帮助吗?
有用
有用
无用
无用