文章目录

  • 基本概念
  • array
  • map
  • struct
  • 使用
  • 创建
  • 常用函数(主要汇总了和array相关的)



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相关的)

返回类型

函数签名

描述

int

size(Map<K.V>)或size(Array< T>)

返回array或者map的元素个数

boolean

array_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>)

返回包含输入映射值的无序数组

string

concat_ws(string SEP, array< string>)

通过制定分隔符将string array中的元素拼接起来

array

split(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输入的列类型不一样

array

collect_set(col)

返回消除重复元素的一组对象

array

collect_list(col)

返回包含重复项的对象列表

T

explode(ARRAY< T> a)

将数组分解为多行。返回一个具有单列(col)的行集,数组中的每个元素对应一行

int,T

posexplode(ARRAY< T> a)

使用int类型的附加位置列(原始数组中项的位置,从0开始)将数组分解为多行。返回一个包含两列(pos,val)的行集,数组中的每个元素对应一行

T1,…,Tn

inline(ARRAY<STRUCTf1:T1,...,fn:Tn> a)

将结构数组分解为多行。返回一个包含N列的行集(N=结构中顶级元素的数目),数组中每个结构一行

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