在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数据类型的列的主要内容,如果未能解决你的问题,请参考以下文章

如何在 oracle 中创建具有对象数据类型的列

Hive 从现有表中创建具有复杂类型的新表

在 hive 中创建带有附加列的表

如何使用 typeORM 在 Nestjs 中创建类型为 Date 的列并键入 DateTime?

hive中创建外部分区表使用location是指定数据存放位置还是指数据来源

在 Postgres 中创建表时将空列设置为带时区的时间戳