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