在将数据从CSV文件加载到配置单元外部表中时,我得到了“无”值。
我的CSV文件结构如下:
creation_month,accts_created
7/1/2018,40847
6/1/2018,67216
5/1/2018,76009
4/1/2018,87611
3/1/2018,99687
2/1/2018,92631
1/1/2018,111951
12/1/2017,107717
'creation_month'和'accts_created'是我的列标题。
create external table monthly_creation
(creation_month DATE,
accts_created INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' location '/user/dir4/'
位置为“ / user / dir4 /”,因为这是我放置“ monthly_acct_creation.csv”文件的位置,如以下屏幕截图所示:
我不知道为什么当源数据具有日期和数字时,我创建的外部表具有所有“无”值。
有人可以帮忙吗?
答案 0 :(得分:1)
DATE值以YYYY-MM-DD的形式描述特定的年/月/日。例如,DATE'2013-01-01'。
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-date
我建议在日期列中使用字符串类型,您可以稍后将其转换或解析为时间戳。
关于整数列,您需要跳过所有要适当转换为int类型的列的标题
顺便说一下,新版本的HUE允许您直接从CSV构建Hive表
答案 1 :(得分:1)
日期数据类型格式仅接受 yyyy-MM-dd ,因为您的日期字段格式不同,并且creation_month字段值中的值为空。
使用 creation_month字段作为字符串数据类型创建表,并使用create table语句中的skip.header.line 属性跳过第一行。
尝试使用以下ddl:
hive> create external table monthly_creation
(creation_month string,
accts_created INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
Location '/user/dir4/'
tblproperties ("skip.header.line.count"="1");
hive> select * from monthly_creation;
+-----------------+----------------+--+
| creation_month | accts_created |
+-----------------+----------------+--+
| 7/1/2018 | 40847 |
| 6/1/2018 | 67216 |
| 5/1/2018 | 76009 |
| 4/1/2018 | 87611 |
| 3/1/2018 | 99687 |
| 2/1/2018 | 92631 |
| 1/1/2018 | 111951 |
| 12/1/2017 | 107717 |
+-----------------+----------------+--+