hadoop
hive
LTSV

HiveでLTSVを利用する

More than 1 year has passed since last update.

SerDeを用意してもいいんですが、Hiveの機能でmapのdelimiterを指定できるので、それを使うとLTSVな行をmap<string, string>として読むことができます。

ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\n'
    COLLECTION ITEMS TERMINATED BY '\t'
    MAP KEYS TERMINATED BY ':'

例えばこんな感じのテーブルを作って

CREATE EXTERNAL TABLE some_ltsv_table (
    record  map<string, string>
)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\n'
    COLLECTION ITEMS TERMINATED BY '\t'
    MAP KEYS TERMINATED BY ':'
STORED AS TEXTFILE
LOCATION '/path/to/ltsv/dir'
;

/path/to/ltsv/dirにこんなltsvのファイルを入れておくと

a:1 b:2
a:3 b:4 c:5

Hiveからこんな感じに読むことができます

SELECT
    record
FROM
    some_ltsv_table

--
{"a":"1", "b":"2"}
{"a":"3", "b":"4", "c":"5"}
SELECT
    record['a']
FROM
    some_ltsv_table

--
1
3

こんな感じ。大変捗りますね。