我正在将表从teradata导出到配置单元。。teradata中的表有一个地址字段,其中包含新行字符(\n)。。最初我将表从teradata导出到挂载文件系统路径,然后将表加载到配置单元中。。。记录计数在teradata表和配置单元表之间不匹配,因为新的行字符出现在配置单元中。注意:我不想通过sqoop来处理这个问题,因为当从本地路径加载到配置单元时,我想处理新行字符的数据。
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/';
注意:确保在创建数据文件时使用“\”作为转义符。
moiiocjp2#
hive中的load data命令只将数据直接复制到hdfs表位置。hive拆分新行的唯一原因是您只定义了存储为文本的表,默认情况下,该表使用新行作为记录分隔符,而不是字段分隔符。要重新定义表,您需要
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ESCAPED BY 'x' LINES TERMINATED BY 'y'
其中,x和y可能分别是包含新行和记录分隔符的字段周围的转义字符
2条答案
按热度按时间6mw9ycah1#
我通过使用以下选项创建一个外部表来实现这一点:
然后我为包含数据文件的目录创建了一个分区(我的表使用分区),即。
注意:确保在创建数据文件时使用“\”作为转义符。
moiiocjp2#
hive中的load data命令只将数据直接复制到hdfs表位置。
hive拆分新行的唯一原因是您只定义了存储为文本的表,默认情况下,该表使用新行作为记录分隔符,而不是字段分隔符。
要重新定义表,您需要
其中,x和y可能分别是包含新行和记录分隔符的字段周围的转义字符