我正在尝试使用hive导入这种类型的数据:
2015-0-6,值1
2015-0-9,值1,值2,值3
我试过这些方式
CREATE TABLE fields (timestamp STRING, fields_array ARRAY<STRING>)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
CREATE TABLE fields (timestamp STRING, fields_string STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
但只有时间戳和第一个值存储在表中。 例如:
2015-0-6 value1
2015-0-9 value1
为什么?
答案 0 :(得分:1)
您需要定义一个python脚本,例如:
import sys
for line in sys.stdin:
splitLine=line.strip().split(',', 1)
print "%s\t%s" % (splitLine[0], splitLine[1])
在您的hql类型
中CREATE TABLE字段(时间戳STRING,fields_string STRING)行格式 由'\ t'终止的删除字段;
添加文件/your_script_path/script.py;
INSERT OVERWRITE TABLE字段SELECT TRANSFORM(line)USING'python script.py'AS时间戳,字段FROM your_table_in_which_you_have_one_column_called_LINE;
答案 1 :(得分:1)
尝试使用此博客中解释的SerDe。我认为它接近你的要求。 https://bigdatamusings.wordpress.com/2014/08/