- 复合数据类型
Structs: structs内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c.a来访问域a
Maps(K-V对):访问指定域可以通过[“指定域名称”]进行,例如,一个Map M包含了一个group-》gid的kv对,gid的值可以通过M[‘group’]来获取
Arrays:array中的数据为相同类型,例如,假如array A中元素[‘a’,‘b’,‘c’],则A[1]的值为’b’
类型 | 解释 | 举例 |
---|---|---|
struct | 与c++中的结构体类似,可通过‘.’访问每个域的值,比如Struct{first string,last string},可以通过name.first访问第一个成员 | struct(‘john’,‘doe’) |
map | 存储key/value对,可通过[‘key’]获取每个key的值,比如‘first’–>‘john’ 可通过name[‘last’]获取last name。 | map(‘first’,‘john’,last,‘doe’) |
array | 同种类型的数据集合,从0开始索引,比如[‘john’,‘doe’],可通过name[1]获取doe | array(‘john’,‘doe’) |
- 行拆列 explode
explode 是一个 hive 内置的表生成函数:Built-in Table-Generating Functions (UDTF),主要是解决 1 to N 的问题,即它可以把一行输入拆成多行,比如一个 array 的每个元素拆成一行,作为一个虚表输出
explode(ARRAY) 列表中的每个元素生成一行
explode(MAP) map中每个key-value对,生成一行,key为一列,value为一列
---word count例子
select word,count(1) num