hive集合数据类型汇总


hive支持的集合类型有三种:

  • struct
  • map
  • array

基本概念

array

含义:array数组是一组具有相同类型和名称的变量集合
访问:内部每个元素可以通过下标来访问,下标从0开始。如值为['john',' boysen']的数组,第二个元素通过数组名[1]访问
注意:如果元素为字符类型时,mr和presto的显示不一样。例如['john','boysen'],mr的结果中显示为["john","boysen"],presto结果显示为[john,boysen],即一个显示的显示出引号,一个不显示引号,但是还是同一个数据,只是显示的方式不一样

可以通过 如下方法创建新的array列

select array(字段1,字段2) from table 

注意array要求元素的类型一样,因此由不同类型的字段创建array会涉及类型转化

map

含义:键值对元组集合
访问:通过键值访问。如map('first','john','last','boysen'),通过字段名['first']就可以访问值john

struct

含义:与c语言中的struct或者对象类似
访问:通过符号访问元素。如某个列的数据类型是struct{first string, last string},那么第一个元素可以通过字段名.first访问。

使用

创建

create table employees (
	name string,
	salary float,
	subordinates array<string>,
	deductions map<string,float>,
	address struct<street:string, city:string, state:string, zip:int>
)

三种集合类型在创建的时候可以指定对应的数据类型。

常用函数(主要汇总了和array相关的)

返回类型函数签名描述
intsize(Map<K.V>)或size(Array< T>)返回array或者map的元素个数
booleanarray_contains(Array< T>, value)判断value是否在array中
array< t>sort_array(Array< T>)根据数组元素的自然顺序将输入数组按升序排序并返回它
array< K>map_keys(Map<K.V>)返回包含输入映射键的无序数组
array< V>map_values(Map<K.V>)返回包含输入映射值的无序数组
stringconcat_ws(string SEP, array< string>)通过制定分隔符将string array中的元素拼接起来
arraysplit(string str, string pat)通过制定分隔符将string拆分成array,pat为正则表达式,注意Java中特殊字符正则表达式的转义(如果使用presto引擎,不需要转义)
array< double>percentile(BIGINT col, array(p1 [, p2]…))或者percentile_approx(DOUBLE col, array(p1 [, p2]…) [, B])返回百分位值数组,注意percentile和percentile_approx输入的列类型不一样
arraycollect_set(col)返回消除重复元素的一组对象
arraycollect_list(col)返回包含重复项的对象列表
Texplode(ARRAY< T> a)将数组分解为多行。返回一个具有单列(col)的行集,数组中的每个元素对应一行
int,Tposexplode(ARRAY< T> a)使用int类型的附加位置列(原始数组中项的位置,从0开始)将数组分解为多行。返回一个包含两列(pos,val)的行集,数组中的每个元素对应一行
T1,…,Tninline(ARRAY<STRUCTf1:T1,...,fn:Tn> a)将结构数组分解为多行。返回一个包含N列的行集(N=结构中顶级元素的数目),数组中每个结构一行

hive官方udf说明:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-LogicalOperators

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值