複雑な json をハイブにインポートする方法。次の形式の Json ファイル: {"some-headers":"", "dump":[{"item-id":"item-1"},{"item-id":"item-2"},...]}
. の下にフィールドを指定するためのハイブdump
。Json ファイルのサイズは、現在のように 200MB を超えていませんが、ダンプであるため、すぐに GB に達します。他の可能な方法は大歓迎です。
2 に答える
End-to-End ソリューションの投稿。JSON をハイブ テーブルに変換するための段階的な手順:
ステップ1)Mavenがまだない場合はインストールします
>$ sudo apt-get install maven
ステップ2)gitがまだない場合はインストールします
>sudo git clone https://github.com/rcongiu/Hive-JSON-Serde.git
ステップ 3) $HOME/HIVE-JSON_Serde フォルダーに移動します。
ステップ 4) serde パッケージをビルドする
>sudo mvn -Pcdh5 clean package
ステップ 5) serde ファイルは $HOME/Hive-JSON-Serde/json-serde/target/json-serde-1.3.7-SNAPSHOT-jar-with-dependencies.jar にあります。
ステップ 6) ハイブの依存関係 jar として serde を追加します。
hive> ADD JAR $HOME/Hive-JSON-Serde/json-serde/target/json-serde-1.3.7- SNAPSHOT-jar-with-dependencies.jar;
ステップ 7) $HOME/books.json に json ファイルを作成 (例)
{"value": [{"id": "1","bookname": "A","properties": {"subscription": "1year","unit": "3"}},{"id": "2","bookname":"B","properties":{"subscription": "2years","unit": "5"}}]}
ステップ 8) ハイブに tmp1 テーブルを作成する
hive>CREATE TABLE tmp1 (
value ARRAY<struct<id:string,bookname:string,properties:struct<subscription:string,unit:string>>>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'mapping.value' = 'value'
)
STORED AS TEXTFILE;
ステップ 9) json から tmp1 テーブルにデータをロードする
>LOAD DATA LOCAL INPATH '$HOME/books.json' INTO TABLE tmp1;
ステップ 10) tmp1 から展開操作を行うための tmp2 テーブルを作成します。この中間ステップは、マルチレベルの json 構造を複数の行に分割することです。 注: JSON 構造が単純で単一レベルの場合は、このステップを避けてください。
hive>create table tmp2 as
SELECT *
FROM tmp1
LATERAL VIEW explode(value) itemTable AS items;
ステップ 11) ハイブ テーブルを作成し、tmp2 テーブルから値をロードします。
hive>create table books as
select value[0].id as id, value[0].bookname as name, value[0].properties.subscription as subscription, value[0].properties.unit as unit from tmp2;
ステップ 12) tmp テーブルを削除する
hive>drop table tmp1;
hive>drop table tmp2;
ステップ 13) ハイブ テーブルをテストする
hive>select * from books;
出力:
id 名 サブスクリプション ユニット
1B 1年 3
2B 2年 5
HiveSerDe を実装することで、JSON を Hive にインポートできます。
このリンクは、サンプル実装として機能します。
https://github.com/rcongiu/Hive-JSON-Serde
これらのリンクも参照できます