
# 配置Hive目的端参数
作业中目的连接为[Hive连接](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0026.html#dataartsstudio_01_0026)时，目的端作业参数如[表1]所示。
 表1Hive作为目的端时的作业参数 
| 参数名         | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 取值样例                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|:---|
| 数据库名称       | 输入或选择写入数据的数据库名称。单击输入框后面的按钮可进入数据库选择界面。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | default                                                                                                                                                                                                                                                                                                                                             |
| 表名          | 输入或选择写入数据的目标表名。单击输入框后面的按钮可进入表的选择界面。 该参数支持配置为时间宏变量，且一个路径名中可以有多个宏定义变量。使用时间宏变量和定时任务配合，可以实现定期同步新增数据，详细说明请参见[使用时间宏变量完成增量同步](https://support.huaweicloud.com/bestpractice-dataartsstudio/dataartsstudio_05_0006.html)。 说明： 如果配置了时间宏变量，通过DataArts Studio数据开发调度CDM迁移作业时，系统会将时间宏变量替换为"数据开发作业计划启动时间-偏移量"，而不是"CDM作业实际启动时间-偏移量"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | TBL_X                                                                                                                                                                                                                                                                                                                                               |
| 自动创表        | 只有当源端为关系数据库时，才有该参数。表示写入表数据时，用户选择的操作： - 不自动创建：不自动建表。  - 不存在时创建：当目的端的数据库没有"表名"参数中指定的表时，CDM会自动创建该表。如果"表名"参数配置的表已存在，则不创建，数据写入到已存在的表中。  - 先删除后创建：CDM先删除"表名"参数中指定的表，然后再重新创建该表。   说明： - 自动建表只同步列注释，表注释不会被同步。  - 自动建表不支持同步主键。   | 不自动创建                                                                                                                                                                                                                                                                                                                                               |
| 源端null值转换值  | 将源端null值转换为其他值。 - TO_NULL  - TO_EMPTY_STRING  - TO_NULL_STRING                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | TO_NULL                                                                                                                                                                                                                                                                                                                                             |
| 导入前清空数据     | 选择目的端表中数据的处理方式。 - 是：任务启动前会清除目标表中数据。  - 否：导入前不清空目标表中的数据，如果选"否"且表中有数据，则数据会追加到已有的表中。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 是                                                                                                                                                                                                                                                                                                                                                   |
| 换行符处理方式     | 对于写入Hive textfile格式表的数据中存在换行符的场景，指定对换行符的处理策略。 - 删除  - 替换为其他字符串  - 不处理                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 删除                                                                                                                                                                                                                                                                                                                                                  |
| Hive表分区字段   | "自动创建"设置为"不自动创建"时，无此参数。 对Hive建表设置分区字段，多个值以逗号隔开。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | A,B                                                                                                                                                                                                                                                                                                                                                 |
| 表路径         | "自动创建"设置为"不自动创建"时，无此参数。 表路径。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | -                                                                                                                                                                                                                                                                                                                                                   |
| 存储格式        | "自动创建"设置为"不自动创建"时，无此参数。 选择存储格式。 - 行式存储格式：TEXTFILE。  - 列式存储格式：ORC、RCFILE、PARQUET。   TEXTFILE使用明文存储，当数据存在特殊字符的场景下可能会导致数据写入错乱，请谨慎使用。建议优先使用ORC存储格式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | ORC                                                                                                                                                                                                                                                                                                                                                 |
| hive表清理数据模式 | "导入前清空数据"设置为"是"时，呈现此参数。 选择Hive表清理数据模式。 - LOAD_OVERWRITE模式：将生成一个临时数据文件目录，使用Hive的load overwrite语法将临时目录加载到Hive表中。  - TRUNCATE模式：只清理分区下的数据文件，不删除分区。 说明： 目的端为分区表时，Hive表清理数据模式建议设置为LOAD_OVERWRITE模式，否则可能会有集群内存过载/磁盘过载的风险。                                                                                                                                                                                                                                                                                                                                                                                                                                             | TRUNCATE                                                                                                                                                                                                                                                                                                                                            |
| 分区信息        | "导入前清空数据"设置为"是"时，呈现此参数。目的端为分区表时，必须指定分区。 - 当使用TRUNCATE模式：只清理分区下的数据文件。  - 当使用LOAD_OVERWRITE模式：覆盖写入到指定分区，仅支持指定单分区。 当使用LOAD_OVERWRITE模式，仅支持写入一个分区。具体配置请参见[动态分区写入与静态分区写入介绍]。                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 单分区：year=2020,location=sun; 多分区：\['year=2020,location=sun', 'year=2021,location=earth'\]. 前一日分区： day='${dateformat(yyyy-MM-dd HH:mm:ss, -1, DAY)}', |
| 运行队列        | 只有当连接方式为API时，才有该参数。 指定请求参数--queue的值，决定hive任务提交到哪个队列运行。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | default                                                                                                                                                                                                                                                                                                                                             |
| 执行Analyze语句 | 数据全部写入完成后会异步执行ANALYZE TABLE语句，用于优化Hive表查询速度。 执行的SQL如下： - 非分区表：ANALYZE TABLE tablename COMPUTE STATISTICS  - 分区表：ANALYZE TABLE tablename PARTITION(partcol1\[=val1\], partcol2\[=val2\], ...) COMPUTE STATISTICS   说明： "执行Analyze语句"参数配置仅用于单表迁移场景。 执行Analyze语句可能会对Hive造成压力。                                                                                                                                                                                                                                                                                                                     | 是                                                                                                                                                                                                                                                                                                                                                   |
| 内部写队列内存最大值  | 当出现内存不足场景时，请酌情修改该参数，当参数过小时，会影响迁移速率。 取值范围是1-128，默认为空，不做限制，单位为MB，超出范围会设置为不限制。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 16                                                                                                                                                                                                                                                                                                                                                  |
| 内部转换队列内存最大值 | 当出现内存不足场景时，请酌情修改该参数，当参数过小时，会影响迁移速率。 取值范围是1-128，默认为空，不做限制，单位为MB，超出范围会设置为不限制。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 16                                                                                                                                                                                                                                                                                                                                                  |
   
![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
- Hive LoadOverwrite的动态分区写入与静态分区写入介绍：
  CDM Hive的LoadOverwrite方式依赖Hive原生语法'LOAD DATA \[LOCAL\] INPATH 'filepath' \[OVERWRITE\] INTO TABLE tablename \[PARTITION (partcol1=val1, partcol2=val2 ...)\]'，关于Hive语法可见[Hive官网](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML)介绍。
  写入过程将生成临时数据文件，并在写入完成后执行LOAD DATA OVERWRITE的SQL将临时数据文件写入目标表。
  实践样例：
  1. 以源端为mysql的一个表，使用dt作为分区日期，其建表语句如下：
     ```
     CREATE TABLE `demo` 
     (
       `id` varchar(10) DEFAULT NULL,
       `dt` date DEFAULT NULL
     ) 
     ENGINE=InnoDB DEFAULT CHARSET=utf8
     ```
     
  
  2. 目的端为Hive的一个分区表，同样使用dt作为分区日期，其建表语句如下：
     ```
     CREATE TABLE `demo`
     (
     `id` varchar(10)
     )
     PARTITIONED BY (`dt` date)
     ```
     
  
  3. 数据写入。 对于期望写入单目标分区，即静态分区的场景，通过配置分区信息，将数据写入目标分区。
     图1配置分区信息   
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002457510452.png)
     对于源端有多个分区数据，期望写入多个目标分区，即动态分区的场景，不需要配置分区信息，通过在字段映射中选择要迁移的分区字段，将数据从源端的分区字段写入目的端对应的分区。
     图2配置分区信息   
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002490789713.png)
     图3选择要迁移的分区字段   
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002457670080.png "点击放大") 
   
- 源端Hive包含array和map类型时，目的端表格式只支持ORC和parquet复杂类型。若目的端表格式为RC和TEXT时，会对源数据进行处理，支持成功写入。
- 因map类型为无序的数据结构，迁移到目的端的数据类型可能跟源端顺序不一致。
- Hive作为迁移的目的时，如果存储格式为Textfile，在Hive创建表的语句中需要显式指定分隔符。例如：
  ```
  CREATE TABLE csv_tbl(
  smallint_value smallint,
  tinyint_value tinyint,
  int_value int,
  bigint_value bigint,
  float_value float,
  double_value double,
  decimal_value decimal(9, 7),
  timestamp_value timestamp,
  date_value date,
  varchar_value varchar(100),
  string_value string,
  char_value char(20),
  boolean_value boolean,
  binary_value binary,
  varchar_null varchar(100),
  string_null string,
  char_null char(20),
  int_null int
  )
  ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
  WITH SERDEPROPERTIES (
  "separatorChar" = "\t",
  "quoteChar"     = "'",
  "escapeChar"    = "\\"
  )
  STORED AS TEXTFILE;
  ```
  
 
