Hive load数据到\t分隔的表,字段映射错误怎么解决?

578 阅读1分钟

表结构如下:

CREATE EXTERNAL TABLE `tmp.shop_detail_tb`(
`id` string COMMENT '',
`name` string COMMENT '',
`type` string COMMENT '',
`amt` string COMMENT '',
`month` string COMMENT ''
)
PARTITIONED BY (
`dt` string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'  -- 字段值用\t分割
NULL DEFINED AS ''
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';

方法:

1 在Mac/Win本地把字段值用\t分好,上传linux,再load,查询的结果不对

2 在Mac/Win本地把字段值用Tab键分好,上传linux,再load,查询的结果不对

3 在Mac/Win本地不用修改分隔符,文件rz -be上传到linux目录后,用vim再把字段值分隔符替换为Tab键(:%s/分隔符/Tab键/g),再load,查询的结果才对 【比如文本中是逗号分割的,rz -be上传到linux目录后,用vim再把逗号替换为Tab键(:%s/,/Tab键/g),再load,查询的结果才对】

过程:

0 Mac/Win本地:

1 rz -be 把该文件上传到linux

2 vim把逗号替换成Tab键之后:【:%s/,/Tab键/g】

3 $cat data30.txt

1    李一包子    外卖    34000    201909
1    李一包子    堂食    30000    201909
2    李二面条    外卖    29000    201909
2    李二面条    堂食    40000    201909
3    李三火锅    外卖    12000    201909
3    李三火锅    堂食    90000    201909

4

hive> load data local inpath 'data30.txt' 
overwrite into table tmp.shop_detail_tb partition (dt = '2021-01-30') ;

5 再查询:如下,每个字段值才能正确的映射到对应的字段。

Hive 2.0.0