【发布时间】:2018-08-11 08:08:32
【问题描述】:
我正在将表从 Teradata 导出到 Hive.. teradata 中的表有一个地址字段,其中包含换行符 (\n).. 最初我正在导出表以从 Teradata 挂载文件系统路径,然后我正在加载将表放入 hive ... teradata 表和 hive 表之间的记录计数不匹配,因为 hive 中出现了换行符。
注意:我不想通过 sqoop 处理这个来带来数据我想在从本地路径加载到 hive 时处理换行符。
【问题讨论】:
我正在将表从 Teradata 导出到 Hive.. teradata 中的表有一个地址字段,其中包含换行符 (\n).. 最初我正在导出表以从 Teradata 挂载文件系统路径,然后我正在加载将表放入 hive ... teradata 表和 hive 表之间的记录计数不匹配,因为 hive 中出现了换行符。
注意:我不想通过 sqoop 处理这个来带来数据我想在从本地路径加载到 hive 时处理换行符。
【问题讨论】:
我通过使用以下选项创建一个外部表来实现这一点:
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001'
ESCAPED BY '\\'
STORED AS TEXTFILE;
然后我为包含数据文件的目录创建了一个分区。 (我的表使用分区) 即
ALTER TABLE STG_HOLD_CR_LINE_FEED ADD PARTITION (part_key='part_week53') LOCATION '/ifs/test/schema.table/staging/';
注意:确保在创建数据文件时使用“\”作为转义字符。
【讨论】:
Hive 中的加载数据命令仅将数据直接复制到 hdfs 表位置。
Hive 拆分新行的唯一原因是如果您只定义存储为 TEXT 的表,默认情况下使用新行作为记录分隔符,而不是字段分隔符。
要重新定义表格,您需要类似
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',' ESCAPED BY 'x'
LINES TERMINATED BY 'y'
x 和 y 希望分别在包含换行符和记录分隔符的字段周围转义字符
【讨论】: