更新时间:2024-12-18 GMT+08:00

配置Hive目的端参数

作业中目的连接为Hive连接时,目的端作业参数如表1所示。

表1 Hive作为目的端时的作业参数

参数名

说明

取值样例

数据库名称

输入或选择写入数据的数据库名称。单击输入框后面的按钮可进入数据库选择界面。

default

表名

输入或选择写入数据的目标表名。单击输入框后面的按钮可进入表的选择界面。

该参数支持配置为时间宏变量,且一个路径名中可以有多个宏定义变量。使用时间宏变量和定时任务配合,可以实现定期同步新增数据,详细说明请参见使用时间宏变量完成增量同步

说明:

如果配置了时间宏变量,通过DataArts Studio数据开发调度CDM迁移作业时,系统会将时间宏变量替换为“数据开发作业计划启动时间-偏移量”,而不是“CDM作业实际启动时间-偏移量”。

TBL_X

自动创表

只有当源端为关系数据库时,才有该参数。表示写入表数据时,用户选择的操作:
  • 不自动创建:不自动建表。
  • 不存在时创建:当目的端的数据库没有“表名”参数中指定的表时,CDM会自动创建该表。如果“表名”参数配置的表已存在,则不创建,数据写入到已存在的表中。
  • 先删除后创建:CDM先删除“表名”参数中指定的表,然后再重新创建该表。
说明:
  • 自动建表只同步列注释,表注释不会被同步。
  • 自动建表不支持同步主键。

不自动创建

源端null值转换值

将源端null值转换为其他值。

  • TO_NULL
  • TO_EMPTY_STRRING
  • 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表中。
  • TRUCATE模式:只清理分区下的数据文件,不删除分区。
    说明:

    目的端为分区表时,Hive表清理数据模式建议设置为LOAD_OVERWRITE模式,否则可能会有集群内存过载/磁盘过载的风险。

TRUCATE

分区信息

“导入前清空数据”设置为“是”时,呈现此参数。目的端为分区表时,必须指定分区。

  • 当使用TRUCATE模式:只清理分区下的数据文件。
  • 当使用LOAD_OVERWRITE模式:覆盖写入到指定分区,仅支持指定单分区。

单分区:year=2020,location=sun;

多分区:['year=2020,location=sun', 'year=2021,location=earth'].

删除前一日分区:

day='${dateformat(yyyy-MM-dd HH:mm:ss, -1, DAY)}',

执行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

  • 源端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),
    timestmamp_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;