11

解決済み:この問題の「解決策」については、下記のUpdate#2を参照してください。 S3でHive、S3、EMR、およびRecover Partitionを使用したデータのロード

~~~~~~~

のように、私は、ネストされたディレクトリ構造に保存されているいくつかのログ* .gzをファイルを持っている:私はハイブにこれらをロードしようとしています

s3://($BUCKET)/y=2012/m=11/d=09/H=10/ 

テーブル作品の

create external table logs (content string) 
partitioned by (y string, m string, d string, h string) 
location 's3://($BUCKET)'; 

作成を:弾性地図上のようなマルチレベルのパーティションの仕様を使用して、(EMR)を削減します。私は、既存のパーティションのすべての回復を試みる:

alter table logs recover partitions; 

これが動作しているようですが、それは私のS3構造をドリルダウンやディレクトリのすべてのさまざまなレベルを追加ん:

hive> show partitions logs; 
OK 
y=2012/m=11/d=06/h=08 
y=2012/m=11/d=06/h=09 
y=2012/m=11/d=06/h=10 
y=2012/m=11/d=06/h=11 
y=2012/m=11/d=06/h=12 
y=2012/m=11/d=06/h=13 
y=2012/m=11/d=06/h=14 
y=2012/m=11/d=06/h=15 
y=2012/m=11/d=06/h=16 
... 

そうに思えるがHiveは私のファイルレイアウトを見て、解釈することができます。しかし、実際のデータはロードされません。私が単純なカウントをしたり*を選択しようとすると、何も得られません。

hive> select count(*) from logs; 
... 
OK 
0 

hive> select * from logs limit 10; 
OK 

hive> select * from logs where y = '2012' and m = '11' and d = '06' and h='16' limit 10; 
OK 

思考?パーティションを復旧する以外にデータをロードするためのコマンドがいくつか追加されていませんか?

私は手動でそれが動作します、その後、明示的な場所にパーティションを追加する場合:

私はこれを行うためのスクリプトを書くことができますが、私は何か根本的なWRT「回復パーティションを欠けているようにそれは感じています'

UPDATE#1

以下のコメントでジョー・Kによる華麗なと鋭い観察のおかげで、私は、大文字小文字の区別の問題がここに関与しているかもしれないことだと思います。

ファイルは間違いなく大文字のH(私はこれはISO8601フォーマットにはいくつかのうなずきかもしれないと思う)で、次のパスの仕様のように編成されています。私はないパーティション仕様と私の外部表を作成

s3://($BUCKET)/y=2012/m=11/d=09/H=10/ 

適切な資本化:

partitioned by (y string, m string, d string, H string) 

( 'H'に注意してください)。私はディレクトリをリカバリし、パーティションを適切に見つけるように見えるが、何とか(これまでのすべての教示的な場所で 'H'を使用していたにもかかわらず)、Hiveはそれを小文字の 'h' :

hive> show partitions logs; 
OK 
y=2012/m=11/d=06/h=08 

(「h」に注意してください)。だから、Hiveはパーティションを発見することができますが、小文字で保存しているようです...後でデータを探すときに、S3は大文字と小文字を区別するため、これらのパスは(もちろん)空です。

私はすべての小文字のディレクトリ構造に自分のデータを移動し、それが動作するかどうかを見るつもりです...

UPDATE#2

確かに、私は(S3ファイルのレイアウトで)パーティション名として資産「H」は、問題がここにいたことを確認しました。私の知る限り、これが起こっていたものです。

  • S3上の私のレイアウトが正しく
  • ...これらのパーティションを発見したパーティションをRECOVER実行大文字と小文字を区別パーティション名(H =)
  • を持っていましたしかし、それらは小文字(h)として内部に格納されます。

'recover partitions'コマンドは、Amazonによって作成されたHiveの拡張です。私はこのバグがこのコンポーネントにあると強く思っています。私の知る限りでは、Hiveはパーティション発見のためのファイルルートを探究する概念を持っていません...

+0

他の人がこの経路を迂回している場合は、次の2つの非常に役立つブログ記事があります:http://pkghosh.wordpress.com/2012/05/06/hive-plays-well-with-json/ https: //sites.google.com/a/khanacademy.org/forge/technical/data_n/running-emr-elastic-mapreduce-on-the-khan-academy-data –

+0

私が気づいていることの1つは、あなたの時間パーティションの列あなたの投稿のさまざまな部分で異なるケースがあります。これは問題の一部になる可能性がありますか?私はS3/Hiveのどの部分が大文字と小文字を区別しているのかわからない。 'formatted logs2 partition(y = '2012'、m = '11 '、d = '06'、h = '08 ')'を記述すると、出力はどうなりますか? –

+0

Joe!ありがとうございました!私はあなたが何かにいると思う。私は間違いなく、大文字と小文字を区別する問題の症状である動作を見ています。私はより多くの情報で私の質問を更新するつもりです。 –

答えて

10

時間フィールドには大文字小文字の問題です!

関連する問題