csv - csv 文件使用加载数据到 hive 表 - 如何格式化 csv 中的日期以由 hive 表接受
问题描述
我正在使用加载数据语法将 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 不同怎么办。是否可以让 hive 识别格式?(因为现在我正在修改 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 函数中的日期格式替换为您的输入日期格式。
推荐阅读
- javascript - 你如何递归地对一个深度嵌套的对象数组进行排序并返回结果 - javascript
- dart - Flutter - InputDecoration 边框仅在聚焦时
- delphi - 无法在 Delphi 中更改 TEdit 高度
- c++ - 卤化物多GPU支持
- android - Android Studio 正在将我的 API 级别从 23 更改为 26
- android - 在 Google Play 上与某些设备存在兼容性问题
- java - 如何覆盖禁用的 JPanel 的背景颜色
- python - 如何在postgres中定义django的多对多字段?
- python - HoughLinesP 未检测到预期的线条
- assembly - 为什么 RV32I 包含 ADDI 和 XORI 等指令,但不包含 BLTI?