1

私はいくつかの 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

今、ハイブで出力を読みたいです。このスクリプトでテーブルを作成しました:

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

最初の列は無視されているようです。ハイブはキーではなく値を出力として使用すると思います。何か案は?

4

2 に答える 2

1

あなたは正しいです。現在の Hive の制限の 1 つは、シーケンス ファイル形式のキーを無視することです。今のところ、私は Hive 0.7 について言及していますが、それは Hive 0.8 と Hive 0.9 の制限でもあると思います。

これを回避するには、キーが null で、値が現在のキーと値の組み合わせである新しい入力形式を作成する必要がある場合があります。申し訳ありませんが、これはあなたが探していた答えではありませんでした!

于 2012-05-09T00:36:06.300 に答える
0

fields terminated by ','
の代わりにすべきだfields terminated by '\t'と思います。

于 2012-05-08T13:06:04.557 に答える