如何加载带有双引号并用制表符分隔的CSV数据到HIVE表中?

时间:2015-06-04 07:23:35

标签: hadoop hive

我正在尝试从csv文件加载数据,其中的值用双引号括起来""''和标签分开' \ t' 。 但是,当我尝试将其加载到配置单元时,它不会抛出任何错误,并且数据加载时没有任何错误,但我认为所有数据都被加载到单个列中,并且大多数值显示为NULL。 下面是我的创建表语句。

CREATE TABLE example
(
organization  STRING,
order BIGINT,
created_on  TIMESTAMP,
issue_date TIMESTAMP,
qty  INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t' 
ESCAPED BY '"'
STORED AS TEXTFILE;

输入文件样本; -

 "Organization" "Order"  "Created on"   "issue_date"   "qty"
 "GB"   "111223"    "2015/02/06 00:00:00"   "2015/05/15 00:00:00"   "5"
 "UK"   "1110"  "2015/05/06 00:00:00"   "2015/06/1 00:00:00"   "51"

和Load语句将数据推送到hive表中。

 LOAD DATA INPATH '/user/example.csv' OVERWRITE INTO TABLE example

可能是什么问题,如何忽略文件的标头。 如果我删除ESCAPED BY'''从create语句中加载各自的列,但所有值都用双引号括起来。 如何从值中删除双引号并忽略文件的标题?

5 个答案:

答案 0 :(得分:18)

您现在可以使用OpenCSVSerde来定义分隔符并轻松转义周围的双引号:

CREATE EXTERNAL TABLE example (
   organization  STRING,
   order BIGINT,
   created_on  TIMESTAMP,
   issue_date TIMESTAMP,
   qty  INT
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = "\t",
   "quoteChar"     = "\""
)  
LOCATION '/your/folder/location/';

答案 1 :(得分:0)

您不想使用escaped by,这是转义字符,而不是引用字符。我不认为Hive实际上支持引号字符。您可能需要查看接受quotechar属性的this csv serde

此外,如果您有HUE,则可以使用Metastore Manager webapp加载CSV,这将处理标题行,列数据类型等。

答案 2 :(得分:0)

“Hive现在包含一个OpenCSVSerde,它可以正确地解析那些引用的字段,而不会添加额外的jar或容易出错且速度慢的正则表达式。”

行格式SERDE'org.apache.hadoop.hive.serde2.OpenCSVSerde'

source = Ben Doerr

How to handle fields enclosed within quotes(CSV) in importing data from S3 into DynamoDB using EMR/Hive

答案 3 :(得分:-1)

使用CSV Serde创建表格。我在hive中创建了一个如下表格,它就像魅力一样。

CREATE EXTERNAL TABLE IF NOT EXISTS myTable (
id STRING,
url STRING,
name STRING
)
row format serde 'com.bizo.hive.serde.csv.CSVSerde'
with serdeproperties ("separatorChar" = "\t")
LOCATION '<folder location>';

答案 4 :(得分:-2)

您可以使用CSV serde&#34; csv-serde-1.1.2.jar&#34;加载没有双引号的文件。

下载链接:

http://ogrodnek.github.io/csv-serde/

并将create table语句设为

CREATE TABLE <table_name> (col_name_1 type1, col_name_2 type2, ...) row format serde 'com.bizo.hive.serde.csv.CSVSerde';

您可以在create table stmt

中删除具有以下属性的标头
tblproperties ("skip.header.line.count"="1");