使用配置单元导入混合数据(字符串和字符串数组)

时间:2015-04-21 17:06:52

标签: csv hadoop hive

我正在尝试使用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

为什么?

2 个答案:

答案 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/