在hive表中创建具有date数据类型的列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在hive表中创建具有date数据类型的列相关的知识,希望对你有一定的参考价值。
我使用值在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不允许“日期”数据类型,我使用“TIMESTAMP”作为第一个日期列(2012-01-11,...),但是在创建表之后,它显示第一列的NULL值。
怎么解决这个?请指导。
我将数据加载到一个表中,所有列都定义为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 ' ' 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;
通过使用直线侧的加载命令,它对我来说很好。
数据:
[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 |
+------------+------------------------+--+
Apache Hive Data Types对于查询语言和数据建模非常重要(在公司数据库的表中表示数据结构)。有必要了解数据类型及其用于定义表列类型的用法。 Apache Hive Data Types主要有两种类型。它们是,原始数据类型复杂数据类型将讨论复杂数据类型,复杂数据类型进一步分为四种类型。它们在下面解释,
2.1 ARRAY它是一个有序的字段集合。字段必须都是相同的类型语法: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)
以上是关于在hive表中创建具有date数据类型的列的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 typeORM 在 Nestjs 中创建类型为 Date 的列并键入 DateTime?