
# 将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                                   |
   
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
Hive Sync时会判断表不存在时建外表并添加分区，表存在时对比表的schema是否存在差异，存在则替换，对比分区是否有新增，有则添加分区。
因此使用hive sync时有以下约束：
- 写入数据Schema只允许增加字段，不允许修改、删除字段。
- 分区目录只能新增，不会删除。
- Overwrite覆盖写Hudi表不支持同步覆盖Hive表。
- Hudi同步Hive表时，不支持使用timestamp类型作为分区列。
 
