ラベル Hive の投稿を表示しています。 すべての投稿を表示
ラベル Hive の投稿を表示しています。 すべての投稿を表示

2014年4月15日火曜日

HiveでJSONを解析(json_tuple)

HiveでJSONを解析する方法の1つjson_tupleの使い方を説明します。

テストデータ

-----------------------------------------------------------------
{
    "key1":"sample1",
    "key2":2,
    "key3":{
        "key4":[
            {
                "key5":"sample5"
            },
            {
                "key5":"sample6"
            }
        ]
    }
}
{"key1":"test1","key2":22,"key3":{"key4":[{"key5":"test5"},{"key5":"test6"}]}}
-----------------------------------------------------------------
※JSONが1行毎に複数存在する、ログデータのようなものを想定

テーブル定義

-----------------------------------------------------------------
CREATE EXTERNAL TABLE json_table (
raw_data string
)
ROW FORMAT DELIMITED
LINES TERMINATED BY '\n'
LOCATION '/data/sample';
-----------------------------------------------------------------
※ログ1行(改行区切り)をStringとして定義

get_json_objectでkey5を取得する場合

hive> SELECT get_json_object(json_table.raw_data, '$.key1'), get_json_object(json_table.raw_data, '$.key2') FROM json_table;

sample1 2
test1   22
⇒取得する項目が少なければ良いが、多いとHQLが見難くなる。

json_tupleを使うと

hive> SELECT keys.* FROM json_table AS json LATERAL VIEW json_tuple(json.raw_data, 'key1', 'key2') keys as k1, k2;

sample1 2
test1   22
⇒こっちの方が若干見やすい。。。
※LATERAL VIEWについては、別途説明します。


参考:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-json_tuple

HiveでJSONを解析(get_json_object)

HiveでJSONを解析する方法の1つget_json_objectの使い方を説明します。

テストデータ

-----------------------------------------------------------------
{
    "key1":"sample1",
    "key2":2,
    "key3":{
        "key4":[
            {
                "key5":"sample5"
            },
            {
                "key5":"sample6"
            }
        ]
    }
}
{"key1":"test1","key2":22,"key3":{"key4":[{"key5":"test5"},{"key5":"test6"}]}}
-----------------------------------------------------------------
※JSONが1行毎に複数存在する、ログデータのようなものを想定

テーブル定義

-----------------------------------------------------------------
CREATE EXTERNAL TABLE json_table (
raw_data string
)
ROW FORMAT DELIMITED
LINES TERMINATED BY '\n'
LOCATION '/data/sample';
-----------------------------------------------------------------
※ログ1行(改行区切り)をStringとして定義

HQL

hive> SELECT get_json_object(json_table.raw_data, '$.key1') FROM json_table;

sample1
test1

hive> SELECT get_json_object(json_table.raw_data, '$.key3.key4[0].key5') FROM json_table;

sample5
test5

参考:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-get_json_object

2014年3月22日土曜日

Apache Hiveを使ってみる

Apache Hiveを使ってみる。

準備:
Hiveを使用するには、JavaとHadoopのインストールが必要です。
※パス、ファイル名、ユーザは必要に応じて変更して下さい。

Hiveダウンロード

$ cd /usr/local/
$ sudo wget http://ftp.riken.jp/net/apache/hive/hive-0.12.0/hive-0.12.0-bin.tar.gz
$ sudo tar -zxvf hive-0.12.0-bin.tar.gz
$ sudo mv hive-0.12.0-bin/ hive
$ sudo chown hadoop:hadoop hive/

※必要に応じたバージョンをダウンロード(今回は.0.12.0を使用)
※http://ftp.riken.jp/net/apache/hive/

Hadoopユーザに切り替え

$ su hadoop

環境変数

$HOME/.profileに下記を追加

export HIVE_HOME=/usr/local/hive
export PATH=$HIVE_HOME/bin:$PATH

Hive動作確認

テーブル作成
hive
hive> CREATE EXTERNAL TABLE sample (
    > data string
    > )
    > LOCATION '/data/sample/';
OK
Time taken: 28.416 seconds
※HDFS上の/data/sample/にデータがあることが前提

クエリの実行
hive> SELECT * FROM sample;
OK
sample
test
Time taken: 1.279 seconds, Fetched: 2 row(s)