如何格式化csv中的日期以由配置单元表接受

bxjv4tth  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(452)

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

  1. 1750,651,'2013-03-11','2013-03-17'
  2. 1751,652,'2013-03-18','2013-03-24'
  3. 1752,653,'2013-03-25','2013-03-31'
  4. 1753,654,'2013-04-01','2013-04-07'
  5. create table dattable(
  6. DATANUM INT,
  7. ENTRYNUM BIGINT,
  8. START_DATE DATE,
  9. END_DATE DATE )
  10. ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
  11. LOAD DATA LOCAL INPATH '/path/dtatable.csv' OVERWRITE INTO TABLE dattable ;

select返回最后2列的空值
另一个问题是,如果日期格式不同于yyyy-mm-dd怎么办?是否可以让配置单元标识格式(因为现在我正在修改csv文件格式以接受hive)

e5njpo68

e5njpo681#

lasysimpleserde(默认)不适用于带引号的csv。使用csvserde:

  1. create table dattable(
  2. DATANUM INT,
  3. ENTRYNUM BIGINT,
  4. START_DATE DATE,
  5. END_DATE DATE )
  6. ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
  7. WITH SERDEPROPERTIES (
  8. "separatorChar" = ",",
  9. "quoteChar" = "'"
  10. )
  11. STORED AS TEXTFILE;

还要阅读以下内容:csvserde将所有列都视为string类型
将日期列定义为字符串并在选择中应用转换。

ukqbszuj

ukqbszuj2#

回答你的第二个问题:
您将需要一个额外的临时表来读取输入文件,然后可以在insert select语句中进行日期转换。在临时表中,日期字段将存储为字符串。前任。

  1. create table dattable_ext(
  2. DATANUM INT,
  3. ENTRYNUM BIGINT,
  4. START_DATE String,
  5. END_DATE String)
  6. ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

将数据加载到临时表中

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

从临时表插入到托管表。

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

您可以用输入日期格式替换unix\u timestamp函数中的日期格式。

展开查看全部

相关问题