我在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
1条答案
按热度按时间gkl3eglg1#
您需要自定义输入格式。与其重复,不如看一下使用fileformat v serde读取自定义文本文件