hive建表时partitioned分区字段类型只能用string吗?可以用其他的字段类型吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive建表时partitioned分区字段类型只能用string吗?可以用其他的字段类型吗?相关的知识,希望对你有一定的参考价值。
可以呀,根据自己的需求指定就行了!但是一般情况用string的!比如:
use dw;
drop table if exists xxxxx;
CREATE TABLE xxxxx (
time string,
user_id int,
keyword string
)
comment "记录表"
partitioned by (ds string, hour string, type int)
stored as textfile;追问
我用partitioned by (DT timestemp),但是DT字段值是2016-12-23,然后运行存储过程王表中插数时,DT字段值全为空,该咋办?
参考技术A 我分区的类型就是int 按照year month day 分的,可行Hive建表时,使用Array和Map类型以及数据导入
在Hive建表时,我们是可以指定数据类型为Array和Map类型的。除此之外还有Struct类型,这里就不对此做过多延伸。
参考:Hive增删改查
建表:
CREATE TABLE test001(
id STRING COMMENT '',
address ARRAY<string> COMMENT '',
jobs map<string,string>
);
如果是从本地加载文件,我们可以把建表语句改成:
CREATE TABLE test001(
id STRING COMMENT '',
address ARRAY<string> COMMENT '',
jobs map<string,string>
)
row format delimited
collection items terminated by ',' --按逗号分割数组
map keys terminated by ':'; --按冒号分割map
然后从本地或者hdfs上导入数据
load data [local] inpath 'hdfsPath'
into table table_name
partition (Year='2020',month='9');
此外,如果是从其他表查询出来的结果,插入表中,则需要先把数据转换为指定的array类型或map类型才可以插入成功。
INSERT OVERWRITE TABLE test001
SELECT '1' as id,split('南京,北京',',') as address,str_to_map('1:java&2:python','&',':') as jobs;
这里str_to_map
是把字符串转换为map类型。第一个参数1:java&2:python
是我们String类型的map数据,第二个参数&
是指定map之间的分割符,会把1:java&2:python
拆成两个map。这里需要提醒的是,如果我们的数据里只有1:java
这一种,&
(或其他类型的符号)也需要加上,否则返回值的key会变为1:java
,value为NULL
,即1:java:NULL
这种类型。感兴趣的小伙伴也可以把&
换成:
试试效果。第三个参数:
即为我们map的键值分割键。当我们按具体需要转换为map类型后,即可成功插入数据。
以上是关于hive建表时partitioned分区字段类型只能用string吗?可以用其他的字段类型吗?的主要内容,如果未能解决你的问题,请参考以下文章