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
こんな感じ。大変捗りますね。