JSONデータ(ネスト)からHiveテーブルを作成し、クエリを実行したいのですが?これも可能ですか?
JSONファイルをS3にアップロードしてEMRインスタンスを起動することはできましたが、JSONファイルをHiveテーブルにするためにHiveコンソールに何を入力するのかわかりませんか?
誰かが私を始めるためのコマンドの例を持っていますか、Googleで役に立つものを見つけることができません...
HiveがJSONをテーブルの列にマップするには、JSON serdeを使用する必要があります。
ここにある方法を示す本当に良い例:
http://aws.Amazon.com/articles/2855
残念ながら、提供されているJSON serdeはネストされたJSONをうまく処理できないため、使用するにはJSONをフラット化する必要があります。
この記事の正しい構文の例を次に示します。
create external table impressions (
requestBeginTime string, requestEndTime string, hostname string
)
partitioned by (
dt string
)
row format
serde 'com.Amazon.elasticmapreduce.JsonSerde'
with serdeproperties (
'paths'='requestBeginTime, requestEndTime, hostname'
)
location 's3://my.bucket/' ;
実際には、JSON SerDeを使用する必要はありません。ここには素晴らしいブログ記事があります(私は著者とは一切関係ありません):
http://pkghosh.wordpress.com/2012/05/06/Hive-plays-well-with-json/
これは、組み込み関数json_Tupleを使用して、クエリ時にJSONを解析する戦略の概要を示しています(テーブル定義時ではありません):
https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-json_Tuple
基本的に、テーブルスキーマは、各行を単一の「文字列」列としてロードし、クエリごとに必要に応じて関連するjsonフィールドを抽出するだけです。例えばそのブログ投稿からのこのクエリ:
SELECT b.blogID, c.email FROM comments a LATERAL VIEW json_Tuple(a.value, 'blogID', 'contact') b
AS blogID, contact LATERAL VIEW json_Tuple(b.contact, 'email', 'website') c
AS email, website WHERE b.blogID='64FY4D0B28';
私の謙虚な経験では、これはより信頼性が高いことが証明されました(特にネストされたオブジェクトでJSONのserdesを扱うさまざまな暗号の問題に遭遇しました)。
私は同じ問題を解決する必要がありましたが、JSON SerDesにまだリンクされているものはどれも十分に思えませんでした。 Amazonは良いかもしれませんが、どこからでもソースを見つけることができません(誰かがリンクを持っていますか?)。
JsonSerDeに組み込まれているHCatalogは、実際にはどこでもHCatalogを使用していないにもかかわらず、私のために機能しています。
HCatalogのJsonSerDeを使用するには、hcatalog-core .jarをHiveのauxpathに追加し、Hiveテーブルを作成します。
$ Hive --auxpath /path/to/hcatalog-core.jar
Hive (default)>
create table my_table(...)
ROW FORMAT SERDE
'org.Apache.hcatalog.data.JsonSerDe'
...
;
ここに詳細を記載した投稿を書きました
Hcatalog-coreのHive 0.12以降には、JSONデータをシリアル化および逆シリアル化するJsonSerDeがあります。そのため、次の例のような外部テーブルを作成するだけです。
CREATE EXTERNAL TABLE json_table (
username string,
Tweet string,
timestamp long)
ROW FORMAT SERDE
'org.Apache.Hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE
LOCATION
'hdfs://data/some-folder-in-hdfs'
対応するJSONデータファイルは、次の例のようになります。
{"username":"miguno","Tweet":"Rock: Nerf paper, scissors is fine.","timestamp": 1366150681 }
{"username":"BlizzardCS","Tweet":"Works as intended. Terran is IMBA.","timestamp": 1366154481 }
.jsonファイルが大きい場合、スキーマを手作業で記述するのは退屈かもしれません。その場合、この便利なツールを使用して自動的に生成できます。
JSON処理機能は、Hiveですぐに使用できるようになりました。
Hive 4.0.0以降
CREATE TABLE ... STORED AS JSONFILE
各JSONオブジェクトは、1行に収まるようにフラット化する必要があります(改行文字はサポートしていません)。これらのオブジェクトは、正式なJSON配列の一部ではありません。
{"firstName":"John","lastName":"Smith","Age":21}
{"firstName":"Jane","lastName":"Harding","Age":18}