2016-09-09 6 views
0

特定の列に対して固定レコード長のハイブテーブルを作成するにはどうすればよいですか?固定レコード長でHIVEテーブルを作成する

私のデータは次のとおりです。

ROW1~|`900~|`3103~|`2015~|`AA~|`1002003829 

ROW2~|`900~|`3103~|`2015~|`BB~|`1002005103 

ROW3~|`900~|`3103~|`2015~|`CC~|`1002003829 

ROW4~|`900~|`3103~|`2015~|`DD~|`1002003829 

ROW5~|`900~|`3103~|`2015~|`FF~|`1002003829  

答えて

0

これはROW FORMAT SERDEオプションで達成し、例えばRegexSerDe

を使用することができます:固定長4

CREATE TABLE event (
    code STRING, 
    location STRING) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' 
WITH SERDEPROPERTIES (
    "input.regex" = "([^]{4}) ([^]*)" 
) 
STORED AS TEXTFILE; 

指定codeフィールド。

参考文献:

Relevant LanguageManual DDL section

GettingStarted example of ROW FORMAT SERDE

Example of using SerDe for fixed length columns

0

1)すべてのフィールドは文字列でなければなりません。

2)この場合、すべてのフィールドの固定サイズは10文字であり、フィールドセパレータはありません。

3)output.format.stringは、書き込みの場合、読み込まれたのと同じ形式でレコードを出力します。

CREATE EXTERNAL TABLE test(field1 STRING, field2 STRING, field3 STRING) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' 
WITH SERDEPROPERTIES (
    "input.regex" = "(.{10})(.{10})(.{10})", 
    "output.format.string" = "%1$s%2$s%3$s" 
    ) 
LOCATION '/path/to/table'; 
関連する問題