1. 复杂数据类型构造器
1.1 MAP
- 说明:创建map列,value的类型固定
- 参数:(key1, value1, key2, value2, ...)
- 案例
SELECT MAP('name', 'tom', 'age', '20');
+
| _c0 |
+
| {"name":"tom","age":"20"} |
+
SELECT MAP('name', 'tom', 'age', 20);
+
| _c0 |
+
| {"name":"tom","age":"20"} |
+
SELECT MAP('name', 20, 'age', '20');
+
| _c0 |
+
| {"name":"20","age":"20"} |
+
1.2 STRUCT
- 说明:创建truct列
- 参数:(val1, val2, val3, ...),struct的字段名固定为col1,col2,col3,...,与map()方法类似,但value的类型可以不同
- 案例
SELECT STRUCT('Hello', 100);
+
| _c0 |
+
| {"col1":"Hello","col2":100} |
+
1.3 NAMED_STRUCT
- 说明:创建指定字段名称的struct列
- 参数:(name1, val1, name2, val2, ...),与map()方法类似,但value的类型可以不同
- 案例
SELECT NAMED_STRUCT('Hello', 100, 'name', 'tom');
+
| _c0 |
+
| {"hello":100,"name":"tom"} |
+
1.4 ARRAY
- 说明:创建数组列
- 参数:(val1, val2, ...)
- 案例
SELECT ARRAY(1, 2, 3);
+
| _c0 |
+
| [1,2,3] |
+
SELECT ARRAY(1, 2, '3');
+
| _c0 |
+
| ["1","2","3"] |
+
2. 查询复杂数据类型中的元素
SELECT arr[0] FROM (SELECT ARRAY(1, 2, 3) AS arr) t;
+
| _c0 |
+
| 1 |
+
SELECT m['name'] FROM (SELECT MAP('name', 'tom', 'age', '20') AS m) t;
+
| _c0 |
+
| tom |
+
SELECT s.name FROM (SELECT NAMED_STRUCT('Hello', 100, 'name', 'tom') AS s) t;
+
| name |
+
| tom |
+
3. 函数
SIZE(Map<K.V>)、SIZE(Array)
- 定义:
size(Map<K.V>) size(Array<T>)
- 说明:返回数组中元素个数和map中键值对个数
- 返回值类型:int
- 案例
SELECT SIZE(arr) FROM (SELECT ARRAY(1, 2, 3) AS arr) t;
+
| _c0 |
+
| 3 |
+
SELECT SIZE(m) FROM (SELECT MAP('name', 'tom', 'age', '20') AS m) t;
+
| _c0 |
+
| 2 |
+
MAP_KEYS(Map<K.V>)
- 定义:
map_keys(Map<K.V>)
- 说明:获取map中的所有key创建数组
- 返回值类型:array
- 案例
SELECT MAP_KEYS(m) FROM (SELECT MAP('name', 'tom', 'age', '20') AS m) t;
+
| _c0 |
+
| ["name","age"] |
+
MAP_VALUES(Map<K.V>)
- 定义:
map_values(Map<K.V>)
- 说明:获取map中的所有value创建数组
- 返回值类型:array
- 案例
SELECT MAP_VALUES(m) FROM (SELECT MAP('name', 'tom', 'age', '20') AS m) t;
+
| _c0 |
+
| ["tom","20"] |
+
ARRAY_CONTAINS(Array, value)
- 定义:
array_contains(Array<T>, value)
- 说明:判断一个元素在数组中存在与否
- 返回值类型:boolean
- 案例
SELECT ARRAY_CONTAINS(arr, 1) FROM (SELECT ARRAY(1, 2, 3) AS arr) t;
+
| _c0 |
+
| true |
+
SELECT ARRAY_CONTAINS(arr, 4) FROM (SELECT ARRAY(1, 2, 3) AS arr) t;
+
| _c0 |
+
| false |
+
SORT_ARRAY(Array)
- 定义:
sort_array(Array<T>)
- 说明:按照数组元素的自然顺序使用升序方式对数组进行排序
- 返回值类型:array
- 可用版本:hive-0.9.0+
- 案例
SELECT SORT_ARRAY(arr) FROM (SELECT ARRAY(3, 2, 1) AS arr) t;
+
| _c0 |
+
| [1,2,3] |
+
SELECT SORT_ARRAY(arr) FROM (SELECT ARRAY('1', '2', '11', '13') AS arr) t;
+
| _c0 |
+
| ["1","11","13","2"] |
+
CONCAT_WS(STRING sep, ARRAY)
- 定义:
concat_ws(string SEP, array<string>)
- 说明:将数组中的每个元素拼接成字符串,连接符为sep,数组元素类型必须为STRING,否则会报错
- 返回值类型:string
- 案例
SELECT CONCAT_WS("-", ARRAY('1', '2', '3'));
+--------+
| _c0 |
+--------+
| 1-2-3 |
+--------+