如何处理配置单元中的新行字符?

vsnjm48y  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(360)

我正在将表从teradata导出到配置单元。。teradata中的表有一个地址字段,其中包含新行字符(\n)。。最初我将表从teradata导出到挂载文件系统路径,然后将表加载到配置单元中。。。记录计数在teradata表和配置单元表之间不匹配,因为新的行字符出现在配置单元中。
注意:我不想通过sqoop来处理这个问题,因为当从本地路径加载到配置单元时,我想处理新行字符的数据。

6mw9ycah

6mw9ycah1#

我通过使用以下选项创建一个外部表来实现这一点:

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/';

注意:确保在创建数据文件时使用“\”作为转义符。

moiiocjp

moiiocjp2#

hive中的load data命令只将数据直接复制到hdfs表位置。
hive拆分新行的唯一原因是您只定义了存储为文本的表,默认情况下,该表使用新行作为记录分隔符,而不是字段分隔符。
要重新定义表,您需要

ROW FORMAT DELIMITED 
FIELDS TERMINATED BY  ',' ESCAPED BY 'x' 
LINES TERMINATED BY 'y'

其中,x和y可能分别是包含新行和记录分隔符的字段周围的转义字符

相关问题