基于Tunnel SDK如何上传复杂类型数据到MaxCompute?首先介绍一下MaxCompute复杂数据类型:
复杂数据类型
MaxCompute采用基于ODPS2.0的SQL引擎,丰富了对复杂数据类型类型的支持。MaxCompute支持ARRAY, MAP, STRUCT类型,并且可以任意嵌套使用并提供了配套的内建函数。
类型 | 定义方法 | 构造方法 |
---|---|---|
ARRAY | array;array> | array(1, 2, 3); array(array(1, 2); array(3, 4)) |
MAP | map;map> | map(“k1”, “v1”, “k2”, “v2”);map(1S, array(‘a’, ‘b’), 2S, array(‘x’, ‘y)) |
STRUCT | struct;struct< field1:bigint, field2:array, field3:map> | named_struct(‘x’, 1, ‘y’, 2);named_struct(‘field1’, 100L, ‘field2’, array(1, 2), ‘field3’, map(1, 100, 2, 200) |
复杂类型构造与操作函数
返回类型 | 签名 | 注释 |
---|---|---|
MAP | map(K key1, V value1, K key2, V value2, ...) | 使用给定key/value对建立map, 所有key类型一致,必须是基本类型,所有value类型一致,可为任意类型 |
ARRAY | map_keys(Map m) | 将参数中的map的所有key作为数组返回,输入NULL,返回NULL |
ARRAY | map_values(MAP m) | 将参数中的map的所有value作为数组返回,输入NULL,返回NULL |
int | size(MAP) | 取得给定MAP元素数目 |
TABLE | explode(MAP) | 表生成函数,将给定MAP展开,每个key/value一行,每行两列分别对应key和value |
ARRAY | array(T value1, T value2, ...) | 使用给定value构造ARRAY,所有value类型一致 |
int | size(ARRAY) | 取得给定ARRAY元素数目 |
boolean | array_contains(ARRAY a, value v) | 检测给定ARRAY a中是否包含v |
ARRAY | sort_array(ARRAY) | 对给定数组排序 |
ARRAY | collect_list(T col) | 聚合函数,在给定group内,将col指定的表达式聚合为一个数组 |
ARRAY | collect_set(T col) | 聚合函数,在给定group内,将col指定的表达式聚合为一个无重复元素的集合数组 |
TABLE | explode(ARRAY) | 表生成函数,将给定ARRAY展开, |