表结构如下:
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