hadoop—在将数据加载到配置单元时,从字段中删除周围的引号

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

我想将一个包含输入数据的表加载到配置单元中。我有以下格式的数据。

"153662";"0002241447";"0"
"153662";"000647036X";"0"
"153662";"0020434901";"0"
"153662";"0020973403";"0"
"153662";"0028604202";"0"
"153662";"0030437512";"0"

我想把这个数据加载到一个包含两个varchar列和一个int列的表中,但是周围的双引号让我很麻烦。我创建了下表。

CREATE EXTERNAL TABLE Table(A varchar(50),B varchar(50),C varchar(50))
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\;'
LINES TERMINATED BY '\n'

STORED AS TEXTFILE

但字段周围的引号也成为字段的一部分,如下所示。

"276725"    "034545104X"    "0"
"276726"    "0155061224"    "5"

我想忽略他们。另外,我希望第三个字段被读取为int。当前,当我在创建表时提供第三个字段作为int时,它将变为null。

k5ifujac

k5ifujac1#

您必须使用csv serde进行此操作。

CREATE TABLE Table(A varchar(50),B varchar(50),C varchar(50))
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES 
(
    "separatorChar" = ";",
    "quoteChar"     = "\""
)  
STORED AS TEXTFILE;
pcww981p

pcww981p2#

实现这一点的多种方法:
使用csv serde
使用regex serde-regex "\"(.*)\"\;\"(.*)\"\;\"(.*)\"" 将数据加载到外部表,然后删除双引号:
创建外部表源(a字符串、b字符串、c字符串)行格式分隔字段,以“\;”结尾位置“xyz”;
创建表目的地作为select regexp\u replace(a,“,”),regexp\u replace(b,“,”),cast(regexp\u replace(c,“,”),as bigint)from source;

相关问题