复杂数据类型一共有四种:
- ARRAY:数组
- MAP:键值对
- STRUCT:命名字段集合
- UNION:从几种数据类型中指明选择一种,UNION的值必须于这些数据类型之一完全匹配;
所用函数说用:
列转行
- EXPLODE(col): 将 hive 一列复杂的 array 或者 map 结构拆分成多行。
- LATERAL VIEW
用法:LATERAL VIEW udtf(expression) tableAlias as columnAlias
解释:用于和 split,explode 等 UDTF一起使用,它能够将一系列数据拆成多行,在此基础上可以对拆分后的数据进行聚合。
行转列
- CONCAT(string A/col, string B/col...): 返回输入字符串连接后的结果,支持任意个输入字符串;
- CONCAT_WS(separator,str1,str2,...): 它是一个特殊形式的 CONCAT()。第一个参数剩余参数见的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是NULL,返回值也将为NULL。这个函数会跳过分隔符参数后的任何NULL和空字符串。分隔符将被加到被连接的字符串之间;
- COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型的字段。
ARRAY
- 创建名为 t2的表,只有 person 和 friends 两个字段, person 是字符串类型, friends 是数组类型,通过文本文件导入数据时,person 和 friends之间的分隔符是竖线,friends 内部的多个元素之间的分隔符是逗号,
注意分隔符的语法:
create table if not exists t2( person string, friends array<string> ) row format delimited fields terminated by '|' collection items terminated by ',';
-
创建文本文件002.txt, 内容如下:可见只有两条记录,第一条person字段值为 tom,friends字段里面有三个元素,用逗号分隔:
tom|tom_friend_0,tom_friend_1,tom_friend_2 jerry|jerry_friend_0,jerry_friend_1,jerry_friend_2,jerry_friend_3,jerry_friend_4,jerry_friend_5
<