2016-07-09 4 views
1

HIVE SERDE REGEX:出力フォーマット - 出力のほんの数を使用したい文字列

エノ:: ENAME :: DEPTを次のように入力ファイルがある:: SAL

101 :: EMP1 :: COMP1 :: 2800000

201 :: EMP2 :: COMP2 :: 2800000

301 :: EMP3 :: COMP3 ::340万

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 & enameでロードされます。

答えて

1

ハイブテーブルには2つの列しかありませんが、正規表現では4つのグループがキャプチャされるため、追加のグループは無視されます。

次の式を使用できます。

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

次の出力が表示されます。

emp.ename emp.edept 
emp1  comp1 
emp2  comp2 
emp3  comp3 
emp4  comp4 
emp5  comp5 
関連する問題