Hive外部表指向嵌入双引号的CSV文件

时间:2018-01-04 04:32:59

标签: csv hadoop hive hiveql

我正在尝试创建一个指向CSV文件的外部Hive表。 我的CSV文件有一列(col2),可以使用双引号和逗号作为列值的一部分。

每栏中的数据:

Col1 : 150
Col2 : BATWING, ABC "D " TEST DATA
Col3 : 300

CSV行:

150,"BATWING, ABC ""D "" TEST DATA",300

创建表DDL:

CREATE EXTERNAL TABLE test (
   col1 INT, 
   col2 STRING, 
   col3 INT) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
ESCAPED BY '"' 
LOCATION 's3://test-folder/test-file.csv'

当我查询表时,我在col3中看到空值。

创建表格时我在这里缺少什么?任何帮助表示赞赏

2 个答案:

答案 0 :(得分:1)

使用OpenCSVSerde。这是一个例子

创建表

CREATE TABLE bala (col1 int, col2 string, col3 int)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES(
  "separatorChar" = ",", "escapeChar"='\"'
);

加载数据

hive>LOAD DATA INPATH '/../test.csv' INTO TABLE bala
Loading data to table bala
Table testing.bala stats: [numFiles=1, totalSize=40]
OK
Time taken: 0.514 seconds

检查是否已加载

hive> select * from bala;
OK
150 BATWING, ABC "D " TEST DATA 300
Time taken: 0.288 seconds, Fetched: 1 row(s)

答案 1 :(得分:0)

Create hive external table:

DROP TABLE IF EXISTS ${hiveconf:dbnm}.tblnm ;
CREATE EXTERNAL TABLE ${hiveconf:dbnm}.tblnm (
C1 string,
C2 string
)
PARTITIONED BY (C3 string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES (
    "separatorChar" = '|'  (change it to your separator)
   ,"quoteChar"     = '\"'
) 
STORED AS TEXTFILE 
LOCATION '/hdfspath' 
--tblproperties ("skip.header.line.count"="1")
;
MSCK REPAIR TABLE ${hiveconf:dbnm}.tblnm;