更新时间:2024-05-11 GMT+08:00

将Hudi表数据同步到Hive

通过执行run_hive_sync_tool.sh可以将Hudi表数据同步到Hive中。

例如:需要将HDFS上目录为hdfs://hacluster/tmp/huditest/hudimor1_deltastreamer_partition的Hudi表同步为Hive表,表名为table hive_sync_test3,使用unite、country和state为分区键,命令示例如下:

run_hive_sync_tool.sh --partitioned-by unite,country,state --base-path hdfs://hacluster/tmp/huditest/hudimor1_deltastreamer_partition --table hive_sync_test3 --partition-value-extractor org.apache.hudi.hive.MultiPartKeysValueExtractor --support-timestamp

表1 参数说明

命令

描述

必填

默认值

--database

Hive database名称

N

default

--table

Hive表名

Y

-

--base-file-format

文件格式 (PARQUET或HFILE)

N

PARQUET

--user

Hive用户名

N

-

--pass

Hive密码

N

-

--jdbc-url

Hive jdbc connect url

N

-

--base-path

待同步的Hudi表存储路径

Y

-

--partitioned-by

分区键-

N

-

--partition-value-extractor

分区类,需实现PartitionValueExtractor ,可以从HDFS路径中提取分区值

N

SlashEncodedDayPartitionValueExtractor

--assume-date-partitioning

以 yyyy/mm/dd进行分区从而支持向后兼容。

N

false

--use-pre-apache-input-format

使用com.uber.hoodie包下的InputFormat替换 org.apache.hudi包下的。除了从com.uber.hoodie迁移项目至org.apache.hudi外请勿使用。

N

false

--use-jdbc

使用Hive jdbc连接

N

true

--auto-create-database

自动创建Hive database

N

true

--skip-ro-suffix

注册时跳过读取_ro后缀的读优化视图

N

false

--use-file-listing-from-metadata

从Hudi的元数据中获取文件列表

N

false

--verify-metadata-file-listing

根据文件系统验证Hudi元数据中的文件列表

N

false

--help、-h

查看帮助

N

false

--support-timestamp

将原始类型中'INT64'的TIMESTAMP_MICROS转换为Hive的timestamp

N

false

--decode-partition

如果分区在写入过程中已编码,则解码分区值

N

false

--batch-sync-num

指定每批次同步hive的分区数

N

1000

Hive Sync时会判断表不存在时建外表并添加分区,表存在时对比表的schema是否存在差异,存在则替换,对比分区是否有新增,有则添加分区。

因此使用hive sync时有以下约束:

  • 写入数据Schema只允许增加字段,不允许修改、删除字段。
  • 分区目录只能新增,不会删除。
  • Overwrite覆写Hudi表不支持同步覆盖Hive表。
  • Hudi同步Hive表时,不支持使用timestamp类型作为分区列。