複数行の列を持つテキスト形式のハイブ テーブルを ORC 形式に変換すると、列を正しく読み取ることができません。
カスタム レコード区切り文字を使用した Hive テーブル
CREATE EXTERNAL TABLE IF NOT EXISTS MULTILINE_XML_TXT
(id INT, name STRING, xml STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION '/practice/xml/multiline/mysql/text/in/'
TBLPROPERTIES ('textinputformat.record.delimiter'='#');
上記の表の xml 列には、複数の行にデータが含まれています。このテーブルからクエリを実行すると、データが正しく表示されます。
上表のサンプルデータ(2行)
100 xyz <employees><employee><age>26</age>
</employee><employee><age>45</age>
</employee></employees>
200 abc <employees><employee><age>20</age>
</employee><employee>
<age>50</age></employee></employees>
ORC 形式で別のテーブルを作成し、テキスト テーブルから ORC テーブルにデータをコピーしましたが、変換が正しくありません。
CREATE TABLE IF NOT EXISTS MULTILINE_XML_ORC
(id INT, name STRING, xml STRING) STORED AS ORC;
INSERT OVERWRITE TABLE MULTILINE_XML_ORC
SELECT id, name, xml FROM MULTILINE_XML_TXT;
クエリselect * from MULTILINE_XML_ORC
を実行すると、次の結果が得られますが、これは正しくありません。
100 xyz <employees><employee><age>26</age>
NULL NULL NULL
NULL NULL NULL
NULL NULL NULL
NULL abc <employees><employee><age>20</age>
NULL NULL NULL
NULL NULL NULL
NULL NULL NULL
NULL NULL NULL
何かご意見は?