无法将数据从CSV文件加载到HIVE

时间:2018-07-29 23:45:25

标签: hadoop hive null hdfs

在将数据从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”文件的位置,如以下屏幕截图所示:

enter image description here

我不知道为什么当源数据具有日期和数字时,我创建的外部表具有所有“无”值。
有人可以帮忙吗?

2 个答案:

答案 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         |
+-----------------+----------------+--+