我使用值
在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值。
如何解决这个问题?请指导。
答案 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)