繁体   English   中英

使用加载数据将 csv 文件转换为 hive 表 - 如何格式化 csv 中的日期以供 hive 表接受

[英]csv file to hive table using load data - How to format the date in csv to accept by hive table

我正在使用加载数据语法将 csv 文件加载到表中。该文件与 hive 接受的格式相同。 但仍然在发出加载数据后,最后 2 列在选择时返回 null。

1750,651,'2013-03-11','2013-03-17'
1751,652,'2013-03-18','2013-03-24'
1752,653,'2013-03-25','2013-03-31'
1753,654,'2013-04-01','2013-04-07'

create table dattable(
DATANUM    INT,  
ENTRYNUM BIGINT, 
START_DATE  DATE,
END_DATE    DATE ) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

 LOAD DATA LOCAL INPATH '/path/dtatable.csv' OVERWRITE INTO TABLE dattable ;

Select 返回最后 2 列的 NULL 值

另一个问题是如果日期格式与 YYYY-MM-DD 不同怎么办。 是否可以让配置单元识别格式? (因为现在我正在修改 csv 文件格式以接受 hive)

回答你的第二个问题:

您将需要一个额外的临时表来读取您的输入文件,然后您可以在插入选择语句中进行日期转换。在您的临时表中,将日期字段存储为字符串。 前任。

create table dattable_ext(
DATANUM    INT,  
ENTRYNUM BIGINT, 
START_DATE  String,
END_DATE    String) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

加载数据到临时表

LOAD DATA LOCAL INPATH '/path/dtatable.csv' OVERWRITE INTO TABLE dattable_ext;

从临时表插入到托管表。

insert into table dattable select DATANUM, ENTRYNUM,
from_unixtime(unix_timestamp(START_DATE,'yyyy/MM/dd'),'yyyy-MM-dd'),
from_unixtime(unix_timestamp(END_DATE,'yyyy/MM/dd'),'yyyy-MM-dd') from dattable_ext;

您可以使用输入日期格式替换 unix_timestamp 函数中的日期格式。

LasySimpleSerDe(默认)不适用于带引号的 CSV。 使用CSVSerDe

create table dattable(
DATANUM    INT,  
ENTRYNUM BIGINT, 
START_DATE  DATE,
END_DATE    DATE ) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = ",",
   "quoteChar"     = "'"
)  
STORED AS TEXTFILE;

另请阅读: CSVSerDe 将所有列视为字符串类型

将日期列定义为字符串并在选择中应用转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM