2016-06-15 9 views
3

でJSONを爆発:私がどのように見えるハイブに保存されているJSON持っハイブ

{"SHAREit":"4666179584","Google Play Store":"515161408","Internet":"369566560","Facebook":"257369824","YouTube":"173979008"} 

を私は、このJSONは次のように別のテーブルに格納されているがしたい:

|SHAREit   |   4666179584| 
|------------------+---------------------+ 
|Google Play  |   515161408 | 
|------------------+---------------------+ 
|Internet   |   369566560 | 
|------------------+---------------------+ 
|Facebook   |   257369824 | 
|------------------+---------------------+ 
|YouTube   |   173979008 | 
+------------------+---------------------+ 

私が試しましたリンクhttps://brickhouseconfessions.wordpress.com/2014/02/07/hive-and-json-made-simple/からチュートリアルに従うには、私は次のようなエラーになっています:

FAILED: SemanticException 1:164 AS clause has an invalid number of aliases. Error encountered near token 'usage'

マイクエリ:

select apps,usage from my_table 
LATERAL VIEW explode_map(json_map(app_bytes,'string, string')) appsTable as apps,usage 
where appsTable.day='2016-06-11' and appsTable.event_info.type="TRACK_APP_BYTES"; 

PS:app_bytesはmy_tableに

+0

http://thornydev.blogspot.com/2013/07/querying-json-records-via-hive.html – RanchiRhino

答えて

0

あなたは、STANDARD HIVEされていないjson_mapのようなUDFを使用した例では、列の名前です。あなたはhereからレンガハウスコードをビルドしてロードし、それらをコンパイルしてマシンにインストールして使用する必要があります。

json_tupleを使用するのが最も簡単な方法です。あなたのケースはかなり簡単です(ネストされた構造などはありません)。次のようなものが必要なフィールドを抽出し、テーブルに格納することができます。

select x.* from my_table      
    LATERAL VIEW json_tuple(app_bytes,'SHAREit', 
    'Google Play Store','Internet','Facebook','YouTube') x ; 
関連する問題