0

複数行の列を持つテキスト形式のハイブ テーブルを 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

何かご意見は?

4

0 に答える 0