将多行xml数据从文本文件加载到配置单元表中

omvjsjqw  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(416)

我在mssql中的表有如下模式: (id bigint, xmldata xml, other bigint) 我想创建与sql表相同的配置单元表。通过使用sqoop,我得到了hdfs上的原始数据文件,比如:

1  5678|<root><l1><l2><productid>1234</productid><description>Just to show</description></l2></l1></root>|1002020
2  5679|<root><l1><l2><productid>1239</productid><description>Just to show</description></l2></l1></root>|4213212
3  5680||112345
4  ....
8  5688|<root><l1><l2><productid>1248</productid><description>Just
9  to 
10 show
11 </description></l2></l1></root>|12391023
12 5689|<root><l1><l2><productid>1259</productid><description>Just to
13 show</description></l2></l1></root>|12391021

第一个数字1、2、3是行号。我用 | 划出圆柱的界限。如您所见,一些xml字段跨越多行。
我的问题是:如何创建配置单元表并加载这些原始数据?
我已经阅读了有关的问题,但没有人在我的情况。
我试过:
CREATE TABLE test (id Bigint, xmldata String, other Bigint) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'; Load data inpath 'path/raw' into table test 配置单元表不正确,例如:

5678    <root><l1><l2><productid>1234</productid><description>Just to show</description></l2></l1></root>   1002020
5679    <root><l1><l2><productid>1239</productid><description>Just to show</description></l2></l1></root>   4213212
5680        112345
5688    <root><l1><l2><productid>1248</productid><description>Just  NULL
NULL    NULL    NULL
NULL    NULL    NULL
NULL    12391023    NULL
5689    <root><l1><l2><productid>1259</productid><description>Just to   NULL
NULL    12391021    NULL

更新:
尝试:
CREATE TABLE ts_test (id String, xmldata String, other String) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^([^|]*)||$", "output.format.string" = "%1$s %2$s %3$s" ); Load data inpath 'path/test.xml' into table ts_test; 输出表不正确,如:

5678    <root><l1><l2><productid>1234</productid><description>Just to show</description></l2></l1></root>   1002020
5679    <root><l1><l2><productid>1239</productid><description>Just to show</description></l2></l1></root>   4213212
5680        112345
NULL    NULL    NULL
NULL    NULL    NULL
NULL    NULL    NULL
NULL    NULL    NULL
NULL    NULL    NULL
NULL    NULL    NULL
gkl3eglg

gkl3eglg1#

您需要自定义输入格式。与其重复,不如看一下使用fileformat v serde读取自定义文本文件

相关问题