我是Hadoop的新手,并试图在hive中导入文件。我使用的源数据在某些列之间没有分量表。
例:
0000856214AB25 256 T PL1423AS ......
2563458547CD12 748 S AK2523YU ... and so on...
我已经从大型机以txt格式导入了这个文件。 我有固定字符数的字段第一列(1-10),第二列(11-12),第三列(13-14))
我想要的结果是读取此原始数据,如下所示:
1st column - 0000856214
2nd column - AB
3rd column - 25
4th column - 256
5th column - T
6th column - PL
7th column - 1423AS
如何使用 hive 导入此数据?
你能试试这个吗?
输入.txt
0000856214AB25 256 T PL1423AS
2563458547CD12 748 S AK2523YU
使用正则表达式创建配置单元表:
hive> CREATE TABLE test_regex(
>f1 STRING,f2 STRING,
>f3 STRING,f4 STRING,
>f5 STRING,f6 STRING,
>f7 STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
>WITH SERDEPROPERTIES ("input.regex" =
>"([0-9]{10})([A-Z]{2})([0-9]{2})\s+([0-9]{3})\s+([A-Z]{1})\s+([A-Z]{2})([A-Z0-9]{6})",
>"output.format.string" = "%1$s %2$s %3$s %4$s %5s %6s %7s")
>STORED AS TEXTFILE;
OK
Time taken: 0.056 seconds
数据加载:
hive> load data local inpath 'input.txt' overwrite into table test_regex;
OK
Time taken: 0.183 seconds
列选择:
hive> select f1,f3,f5,f7 from test_regex;
OK
0000856214 25 T 1423AS
2563458547 12 S 2523YU
hive> select *from test_regex;
OK
0000856214 AB 25 256 T PL 1423AS
2563458547 CD 12 748 S AK 2523YU
Time taken: 0.094 seconds
感谢Sivasakthi Jayaraman的解决方案
我找到了最后一个错误的解决方案。
-
下载罐
hive-contrib-0.8.1.jar
(就我而言,我在/usr/lib/hive/lib/
路径上遇到了hive-contrib-0.12.0-cdh5.0.2.jar
。 -
ADD JAR /home/user17/hive/hive-contrib-0.8.1.jar
(就我而言 -ADD JAR /usr/lib/hive/lib/hive-contrib-0.12.0-cdh5.0.2.jar
) -
您将看到它将被添加。
现在
select f1 from test_regex;
0000856214
2563458547
(如预期的那样)