使用配置单元导入混合数据(字符串和字符串数组)
Import mixed data (string and array of strings) with hive
我正在尝试使用配置单元导入一些这种类型的数据:
2015-0-6,value1
2015-0-9,value1,value2,value3
我试过这些方法
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';
但只有时间戳和第一个值存储在 table 中。
例如:
2015-0-6 value1
2015-0-9 value1
为什么?
您需要定义一个 python 脚本,如下所示:
import sys
for line in sys.stdin:
splitLine=line.strip().split(',', 1)
print "%s\t%s" % (splitLine[0], splitLine[1])
然后在你的 hql 类型中
CREATE TABLE fields (timestamp STRING, fields_string STRING) ROW FORMAT
DELIMITED FIELDS TERMINATED BY '\t';
ADD FILE /your_script_path/script.py;
INSERT OVERWRITE TABLE fields SELECT TRANSFORM(line) USING 'python
script.py' AS timestamp, fields FROM your_table_in_which_you_have_one_column_called_LINE ;
尝试使用本博客中介绍的 SerDe。我认为它接近您的要求。
https://bigdatamusings.wordpress.com/2014/08/
我正在尝试使用配置单元导入一些这种类型的数据:
2015-0-6,value1
2015-0-9,value1,value2,value3
我试过这些方法
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';
但只有时间戳和第一个值存储在 table 中。 例如:
2015-0-6 value1
2015-0-9 value1
为什么?
您需要定义一个 python 脚本,如下所示:
import sys
for line in sys.stdin:
splitLine=line.strip().split(',', 1)
print "%s\t%s" % (splitLine[0], splitLine[1])
然后在你的 hql 类型中
CREATE TABLE fields (timestamp STRING, fields_string STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
ADD FILE /your_script_path/script.py;
INSERT OVERWRITE TABLE fields SELECT TRANSFORM(line) USING 'python script.py' AS timestamp, fields FROM your_table_in_which_you_have_one_column_called_LINE ;
尝试使用本博客中介绍的 SerDe。我认为它接近您的要求。 https://bigdatamusings.wordpress.com/2014/08/