复杂类型函数
map,struct,named_struct,array
| 操作符 | 返回类型 | 描述 |
| map(key1, value1, key2, value2, …) |
map类型 |
创建键值对 |
说明:
通过指定的键/值对,创建一个map类型。所指定的所有key必须有公共类型,所有的value也必须有公共类型,得到的map的key类型即所有key的公共类型。map(int,string,double,string)得到的类型是map<double,string>,而map(int,string,boolean,string)是不合法的,因为在这里Int和Boolean是没有公共类型的。
举例:
select map(1,2,'3',4) from src limit 1;
Result: {"1":2,"3":4}
| 操作符 | 返回类型 | 描述 |
| struct(val1, val2, val3, …) |
struct类型 |
创建struct结构体 |
说明:
val[1-n]是相同类型的变量,或者是有公共类型的。得到的是val[1-n]的公共类型的struct结构体。
举例:
select struct(1,2,3) from src limit 1;
Result: {"col1":1,"col2":2,"col3":3}
| 操作符 | 返回类型 | 描述 |
| named_struct(name1, val1, name2, val2, ...) |
struct类型 |
创建自定义字段名称的struct结构体 |
说明:
val[1-n]是相同类型的变量,或者是有公共类型的,name[1-n]是字符类型。得到的是以name[1-n]为名字,以val[1-n]为对应值的的struct结构体,每个名字有自己的类型。比如named_struct('name1',1,'name2','1')得到的是
举例:
select named_struct('name1',100,'name2','200') from src limit 1;
Result: {"name1":100,"name2":"200"}
| 操作符 | 返回类型 | 描述 |
| array(val1, val2, …) |
Array类型 |
创建键值对 |
说明:
通过指定的元素,创建一个数组。Array的类型是所有元素的公共类型。
举例:
select array(1,'1',1.1) from src limit 1;
Result: ["1","1","1.1"]
| 操作符 | 返回类型 | 描述 |
| A[n] |
数组的类型 |
返回数组的第n个元素 |
说明:
只要子查询返回了至少一列的值,返回true,反之返回false。
举例:
select array(1,2,3)[0] from src ;
Result: 1
| 操作符 | 返回类型 | 描述 |
| M[key] |
Map元素中的类型 |
返回map中对应key的value |
说明:
返回关键值对应的值,例如mapM为 {‘f’ -> ‘foo’, ‘b’ -> ‘bar’, ‘all’ -> ‘foobar’},则M['all'] 返回’foobar’。
举例:
select map('k1',100,'k2',200)['k1'] from src ;
Result: 100
| 操作符 | 返回类型 | 描述 |
| S.x |
Struct的类型 |
返回Struct的第x个元素 |
说明:
返回结构x字符串在结构S中的存储位置。如 foobar {int foo, int bar} foobar.foo的领域中存储的整数。
举例:
select named_struct('name1',100,'name2','200').name1 from src limit 1;
Result: 100
| 操作符 | 返回类型 | 描述 |
| size(Map<K.V>) ; size(Array<T>) |
Int |
返回元素数量 |
说明:
返回数组或者map中的元素数量。
举例:
select size(array('Inceptor','Hyperbase','Streaming')) from src;
Result: 3