我有几个hadoop流式api程序并使用此输出格式生成输出: “org.apache.hadoop.mapred.SequenceFileOutputFormat” 流式api程序可以使用输入格式“org.apache.hadoop.mapred.SequenceFileAsTextInputFormat”读取文件。
输出文件中的数据如下所示。
val1-1,val1-2,val1-3
val2-1,val2-2,val2-3
val3-1,val3-2,val3-3
现在我想用hive读取输出。我用这个脚本创建了一个表:
CREATE EXTERNAL
TABLE IF NOT EXISTS table1
(
col1 int,
col2 string,
col3 int
)
PARTITIONED BY (year STRING,month STRING,day STRING,hour STRING)
ROW FORMAT DELIMITED
FIELDs TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileAsTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileOutputFormat'
LOCATION '/hive/table1';
当我使用查询
查询数据时select * from table1
结果将是
val1-2,val1-3
val2-2,val2-3
val3-2,val3-3
似乎第一列已被忽略。我认为hive只使用值作为输出而不是键。有什么想法吗?
答案 0 :(得分:1)
你是对的。 Hive现在的一个限制是忽略Sequence文件格式中的键。现在,我指的是Hive 0.7,但我相信这也是Hive 0.8和Hive 0.9的限制。
为了避免这种情况,您可能必须创建一个新的输入格式,其键为null,值是您当前键和值的组合。对不起,我知道这不是你要找的答案!
答案 1 :(得分:0)
应该是fields terminated by ','
我认为,而不是fields terminated by '\t'
。