Hive数据源为您提供读取和写入Hive数据的双向通道能力,实现Hive与不同数据源之间进行数据传输。
下文为您介绍Hive数据同步的能力支持情况。
您可在数据开发 > 数据源管理中进行配置注册,相关操作可参见“注册数据源”。
任务新建完成后,进入任务配置页面,您可根据实际场景,配置Hive读写通道任务。
数据来源选择Hive,并完成以下相关参数配置:
其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。
参数 | 说明 |
|---|---|
*数据源类型 | 下拉选择Hive数据源类型。 |
*数据源名称 | 下拉选择已在数据源注册界面创建成功的数据源名称信息。 |
*数据表 | 对应数据库下,选择需要采集的 Hive 表名称,下拉可选。 |
表存储类型 | 选定表后,会展出选择 Hive 表的存储类型信息,如 Parquet、Text、Orc、Hudi COW、Hudi MOR 存储格式类型,便于您直接了解选中表的存储属性。 |
*读取方式 | Hive读取方式支持“基于HDFS”和“基于JDBC”:
|
*分区设置 | 基于HDFS方式读取数据时,会根据所选数据库表,获取 Hive 表中分区信息,指定读取的分区。分区内容可通过时间变量参数方式进行设置。详见“调度参数说明”。
说明 暂不支持通过集成任务读取非分区表。 |
数据过滤 | 基于JDBC方式读取数据时,支持您将需要同步的数据进行筛选条件设置,只同步符合过滤条件的数据,可直接填写关键词 where 后的过滤SQL语句且无需填写结束符号(;),例如:create_time > '${date}',不需要填写 where 关键字。 |
数据目标类型选择Hive,并完成以下相关参数配置:
其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。
参数 | 说明 |
|---|---|
*数据源类型 | 下拉选择Hive数据源类型。 |
*数据源名称 | 下拉选择已在数据源注册界面创建成功的数据源名称信息。 |
*数据表 | 选择需要写入数据的 Hive 表名称信息,下拉可选。
|
表存储类型 | 选定表后,会展出选择 Hive 表的存储类型信息,如 Parquet、Text、Orc、Hudi COW、Hudi MOR 存储格式类型,便于您直接了解选中表的存储属性。 |
*分区设置 | 分区字段从 Hive 表中自动获取。
说明
|
数据写入方式 | 下拉选择目标数据写入方式,支持以下两种写入方式:
|
数据目标类型选择Hive,并完成以下相关参数配置:
其中参数名称前带 * 的为必填参数,名称前未带 * 的为可选填参数。
参数 | 说明 |
|---|---|
*目标类型 | 下拉选择 Hive 数据源类型。 |
*数据源名称 | 已在数据源管理中注册成功的 Hive 数据源,下拉可选。 |
*数据表 | 选择需要流式写入数据的 Hive 表名称信息,下拉可选分区表或非分区表。
|
表存储类型 | 选定表后,会展出选择 Hive 表的存储类型信息,如 Parquet、Text、Orc、Hudi COW、Hudi MOR 存储格式类型,便于您直接了解选中表的存储属性。 |
分区频率 | 支持选择天级或小时级的分区频率:
说明 数据跟随 Hive 分区生成的时间产出,并非实时写入。 |
分区设置 | 流式写入 Hive 分区表时,分区字段的分区类型默认为动态分区(DYNAMIC)或时间分区类型,不支持修改。
说明
|
字段为一一映射关系,即将源表字段信息,同步到同一行的目标字段信息中。数据源在选择好来源和目标数据源信息后,您可通过转换模式和基础模式方式来配置字段映射关系。操作详见“字段映射配置”。
您可选择是否开启高级参数设置,参数说明详见“高级参数设置”。
在通道任务里,若源端为 MySQL、PostgreSQL、SQL Server 或者 Oracle,并且源端数据表中的字段类型是 Varchar,当 Varchar 字段的精度发生改变时,写入 Hive 目标端的 Varchar 字段数据可能会出现被截断的场景,在此场景下,添加以下高级参数后:
当以下指定范围内的数据库及字段类型发生长度加长时,且目标端的 Hive 表使用 varchar 字段类型,可自动为 Hive 表的 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
单击右侧侧边栏的调度设置,配置相关调度设置参数。调度设置说明详见“调度设置”。
参数配置完成后,可单击调试按钮 ,在弹出的窗口中,选择业务日期进行调试,调试结果/日志可在页面查看。
单击保存图标,完成草稿保存。
在 DataLeap 数据集成 Hive 数据源中,支持对 Hudi 表类型进行读写操作。但鉴于 Hudi 表自身的复杂性,在数据集成任务读写 Hudi 表时,会碰到一些常见问题。以下将为您介绍几个相关的常见问题 FAQ。
Hudi 通过索引机制将给定的 Hudi 记录数据一致地映射到 File ID,从而提供高效的 Upsert。
Hudi 表中的 Record Key 和 File Group/File ID 之间的这种映射关系,一旦在 Record 的第一个版本确定后,后续将不会改变。简而言之,包含一组记录数据的所有版本必然在同一个 File Group 中。目前 DataLeap 数据集成写入 Hudi 表默认采用的索引类型为 Bucket index。
说明
目前 Hudi Bucket Index (RFC-29) 的实现已经合入社区最新的主分支。
针对 Hudi 分区表, bucket index 只能保证分区内主键唯一,而不能保证全局主键唯一。即可能出现以下情况:
如上图所示,int_info 为主键,可以看到整张表数据中会出现重复主键的情况,但在分区内部是唯一的。您可在使用时根据业务实际情况自行决定该情况是否能够满足自身的业务需求。
如果您的场景中对数据的全局唯一性有强诉求,则可以使用以下高级参数 flink state index进行配置。高级参数配置如下:
参数名称 | 参数说明 | 默认值 |
|---|---|---|
job.writer.index.type | 默认值为 bucket,在不同分区内可以有主键重复记录,但在单独的某个分区内部是唯一。 | bucket |
当使用 DataLeap 数据集成写入 Hudi 表时如果之前该 Hudi 表非空,例如表中已通过 Spark 任务写入了部分数据,由于 Spark 默认采用的是 Simple index,而集成任务默认采用性能更高的 bucket index 索引类型,则索引不同会导致写入任务失败,可以看到如下图一样的报错:
解决方案如下:
job.writer.index.type=flink_state
Hudi 表中有三种数据查询方式:
DataLeap 数据集成任务默认采用 Snapshot Queries(快照查询),且集成提供了下述高级参数配置可以修改数据读取方式:
参数名称 | 参数说明 | 默认值 |
|---|---|---|
job.reader.hoodie.datasource.query.type | 读取 Hudi 表数据时,指定数据查询读取方式,参数值为:snapshot、incremental、read_optimized。
| snapshot |
Hudi 表创建表时通常需要指定 preCombineField 属性,用于当主键冲突时会根据该字段的值进行排序,优先选择此值更大的记录。
因此在配置 DataLeap 数据集成任务写入 Hudi 表数据时需要注意 primaryKey/preCombineField 字段值均不能为 null,否则会报下图错误,下述表将 ts 字段设置为 preCombineField:
目前 DataLeap 数据集成通道任务一键建表和数据同步解决方案自动建表时,暂不支持直接创建 Hudi 类型的表,自动建表时会导致解决方案异常退出,因此建议您可通过手动建表的方式进行创建 Hudi 表。
解决方案:
在任务开发界面创建一个临时查询 HSQL 任务。
并在临时查询任务中,通过以下 SQL 示例语句创建 Hudi 表:
执行临时查询任务,创建 Hudi 表,用于数据集成任务或解决方案配置。