在hive表中创建具有date数据类型的列

时间:2014-05-12 08:51:18

标签: date timestamp hive

我使用值

在HIVE(0.10.0)中创建了表格
2012-01-11  17:51   Stockton    Children's Clothing     168.68  Cash
2012-01-11  17:51   Tampa       Health and Beauty       441.08  Amex
............

这里的日期和时间是制表符分隔值,我需要处理日期列,因为Hive不允许“date”数据类型,我使用“TIMESTAMP”作为第一个日期列(2012-01-11,.. 。),  但是在创建表之后,它显示第一列的NULL值。

如何解决这个问题?请指导。

3 个答案:

答案 0 :(得分:5)

我将数据加载到一个表中,所有列都定义为string,然后将日期值转换为另一个表,其中列被定义为DATE。它似乎没有任何问题。唯一的区别是我使用的是鲨鱼版的Hive,老实说,我不确定与实际的Hive和Shark Hive是否存在任何深刻的差异。

数据:

hduser2@ws-25:~$ more test.txt 
2010-01-05  17:51   Visakh
2013-02-16  09:31   Nair

<强>代码:

[localhost:12345] shark>  create table test_time(dt string, tm string, nm string) row format delimited fields terminated by '\t' stored as textfile;
Time taken (including network latency): 0.089 seconds
[localhost:12345] shark> describe test_time;
dt  string  
tm  string  
nm  string  
Time taken (including network latency): 0.06 seconds
[localhost:12345] shark> load data local inpath '/home/hduser2/test.txt' overwrite into table test_time;                                                   
Time taken (including network latency): 0.124 seconds
[localhost:12345] shark> select * from test_time;
2010-01-05  17:51   Visakh
2013-02-16  09:31   Nair
Time taken (including network latency): 0.397 seconds
[localhost:12345] shark> select cast(dt as date) from test_time;
2010-01-05
2013-02-16
Time taken (including network latency): 0.399 seconds
[localhost:12345] shark> create table test_date as select cast(dt as date) from test_time;
Time taken (including network latency): 0.71 seconds
[localhost:12345] shark> select * from test_date;
2010-01-05
2013-02-16
Time taken (including network latency): 0.366 seconds
[localhost:12345] shark> 

如果您使用的是TIMESTAMP,那么您可以尝试连接日期和时间字符串,然后再进行投射。

create table test_1 as select cast(concat(dt,' ', tm,':00') as string) as ts from test_time;

select cast(ts as timestamp) from test_1;

答案 1 :(得分:2)

使用直线侧的加载命令,它对我来说很好。

数据:

[root@hostname workspace]# more timedata 
buy,1977-03-12 06:30:23
sell,1989-05-23 07:23:12

创建表语句:

create table mytime(id string ,t timestamp) row format delimited fields terminated by ',';

加载数据声明:

load data local inpath '/root/workspace/timedata' overwrite into table mytime;

表格结构:

describe mytime;      
+-----------+------------+----------+--+
| col_name  | data_type  | comment  |
+-----------+------------+----------+--+
| id        | string     |          |
| t         | timestamp  |          |
+-----------+------------+----------+--+

查询结果:

select * from mytime;                                                                     
+------------+------------------------+--+
| mytime.id  |       mytime.t        |
+------------+------------------------+--+
| buy        | 1977-03-12 06:30:23.0  |
| sell       | 1989-05-23 07:23:12.0  |
+------------+------------------------+--+

答案 2 :(得分:1)

Apache Hive Data Types对于查询语言和数据建模非常重要(表示公司数据库的表中的数据结构)。 有必要了解数据类型及其用于定义表列类型的用法。 Apache Hive Data Types主要有两种类型。他们是, 原始数据类型 复杂数据类型 将讨论复杂数据类型, 复杂数据类型进一步分为四种类型。它们将在下面解释,

2.1阵列 它是一个有序的字段集合。 字段必须都是相同的类型 语法:ARRAY

示例:array(1,4)

2.2 MAP 它是一组无序的键值对。 键必须是基元,值可以是任何类型。 语法:MAP

示例:map('a',1,'c',3)

2.3 STRUCT 它是不同类型元素的集合。 语法:STRUCT

示例:struct('a',1 1.0)

2.4 UNION 它是异构数据类型的集合。 语法:UNIONTYPE

示例:create_union(1,'a',63)