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

时间:2016-07-27 15:51:46

标签: hadoop hive

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

"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。

2 个答案:

答案 0 :(得分:5)

您必须使用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;

答案 1 :(得分:1)

实现这一目标的多种方法:

  1. 使用CSV serde
  2. 使用正则表达式serdegegege "\"(.*)\"\;\"(.*)\"\;\"(.*)\""
  3. 将数据加载到外部表格,然后删除双引号:
  4.   

    CREATE EXTERNAL TABLE源码(   一个字符串,   b字符串,   c String)   由'\;'终止的行格式删除字段LOCATION'xyz';

         

    CREATE TABLE目的地AS SELECT REGEXP_REPLACE(a,'“',''),REGEXP_REPLACE(b,'”',''),CAST(REGEXP_REPLACE(c,'“','')AS BIGINT)来源;