输入文件如下
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&仅限于。
答案 0 :(得分:1)
Hive表只有两列,但正则表达式捕获四个组,因此只会忽略其他组。
您可以使用以下表达式。
"input.regex"="^[^\\::]+\\::([^\\::]+)\\::([^\\::]+)\\::[^\\::]+$"
您将获得以下输出。
emp.ename emp.edept
emp1 comp1
emp2 comp2
emp3 comp3
emp4 comp4
emp5 comp5