使用fixedrecord长度创建配置单元表

mklgxw1f  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(406)

如何为特定列创建具有固定记录长度的配置单元表?
我的数据是:

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
bprjcwpo

bprjcwpo1#

这可以通过 ROW FORMAT SERDE 选择和使用 RegexSerDe 例如:

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 定长字段 4 .
参考文献:
相关语言手册ddl部分
gettingstarted行格式serde示例
固定长度列使用serde的示例

xzabzqsa

xzabzqsa2#

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';

相关问题