HIVE SERDE REGEX:输出格式 - 只想使用少数输出字符串

时间:2016-07-09 09:31:33

标签: regex hadoop hive hiveql

输入文件如下

ENO :: ENAME ::部门:: SAL

101 :: EMP1 :: COMP1 :: 2800000

201 :: EMP2 :: COMP2 :: 2800000

301 :: EMP3 :: COMP3 :: 3400000

401 :: emp4 :: COMP4 :: 3600000

501 :: emp5 :: COMP5 :: 400000

>create table emp(ename string,edept string)
> row format serde 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'           
> WITH SERDEPROPERTIES(                                                         
> "input.regex"="^([^\\::]+)\\::([^\\::]+)\\::([^\\::]+)\\::([^\\::]+)$",           
> "output.format.string"="%2$s%3$s")                                            
> ;
>load data local inpath '/home/cloudera/test/emp.txt' into table emp;

我想只将第2和第3个文字拉入表格。所以使用“output.format.string”=“%2 $ s%3 $ s” - 这是正确的方法吗?

但我的桌子装满了eno&仅限于。

1 个答案:

答案 0 :(得分:1)

Hive表只有两列,但正则表达式捕获四个组,因此只会忽略其他组。

您可以使用以下表达式。

"input.regex"="^[^\\::]+\\::([^\\::]+)\\::([^\\::]+)\\::[^\\::]+$"

您将获得以下输出。

emp.ename   emp.edept
emp1        comp1
emp2        comp2
emp3        comp3
emp4        comp4
emp5        comp5