ARRAY(<e1> T, ..., <en> T)
> SELECT array(1, 2, 3);[1,2,3]
FILTER(<expr> array<T>, <predicate> function(T[, integer])->boolean)
> SELECT `filter`(array(1, 2, 3), x -> x % 2 == 1);[1,3]> SELECT `filter`(array(0, 2, 3), (x, i) -> x > i);[2,3]> SELECT `filter`(array(0, null, 2, 3, null), x -> x IS NOT NULL);[0,2,3]
TRANSFORM(<expr> array<T>, <func> function(T[, integer])->U)
> SELECT transform(array(1, 2, 3), x -> x + 1);[2,3,4]> SELECT transform(array(1, 2, 3), (x, i) -> x + i);[1,3,5]
ZIP_WITH(<left> array<T>, <right> array<U>, <func> function(T, U)->R)
> SELECT zip_with(array(1, 2, 3), array('a', 'b', 'c'), (x, y) -> (y, x));[{"y":"a","x":1},{"y":"b","x":2},{"y":"c","x":3}]> SELECT zip_with(array(1, 2), array(3, 4), (x, y) -> x + y);[4,6]> SELECT zip_with(array('a', 'b', 'c'), array('d', 'e', 'f'), (x, y) -> concat(x, y));["ad","be","cf"]
FORALL(<expr> array<T>, <pred> function(T)->boolean)
> SELECT forall(array(1, 2, 3), x -> x % 2 == 0);false> SELECT forall(array(2, 4, 8), x -> x % 2 == 0);true> SELECT forall(array(1, null, 3), x -> x % 2 == 0);false> SELECT forall(array(2, null, 8), x -> x % 2 == 0);NULL
AGGREGATE(<expr> array<T>, <start> U, <merge> function(U, T)->U, <finish> function(U)->R)
> SELECT aggregate(array(1, 2, 3), 0, (acc, x) -> acc + x);6> SELECT aggregate(array(1, 2, 3), 0, (acc, x) -> acc + x, acc -> acc * 10);60
EXISTS(<expr> array<T>, <pred> function(T)->boolean)
> SELECT exists(array(1, 2, 3), x -> x % 2 == 0);true> SELECT exists(array(1, 2, 3), x -> x % 2 == 10);false> SELECT exists(array(1, null, 3), x -> x % 2 == 0);NULL> SELECT exists(array(0, null, 2, 3, null), x -> x IS NULL);true> SELECT exists(array(1, 2, 3), x -> x IS NULL);false
ARRAY_CONTAINS(<expr> array<T>, <value> T)
> SELECT array_contains(array(1, 2, 3), 2);true
ARRAYS_OVERLAP(<a> array<T>, <b> array<U>)
> SELECT arrays_overlap(array(1, 2, 3), array(3, 4, 5));true
ARRAY_INTERSECT(<a> array<T>, <b> array<T>)
> SELECT array_intersect(array(1, 2, 3), array(1, 3, 5));[1,3]
ARRAY_JOIN(<a> ARRAY<T>, <delimiter> string[, <nullReplacement> string])
> SELECT array_join(array('hello', 'world'), ' ');hello world> SELECT array_join(array('hello', null ,'world'), ' ');hello world> SELECT array_join(array('hello', null ,'world'), ' ', ',');hello , world
ARRAY_POSITION(<a> array<T>, <element> T)
> SELECT array_position(array(3, 2, 1), 1);3
ARRAY_SORT(<a> array<T>[, <func> function(T, T)->integer])
> SELECT array_sort(array(5, 6, 1), (left, right) -> case when left < right then -1 when left > right then 1 else 0 end);[1,5,6]> SELECT array_sort(array('bc', 'ab', 'dc'), (left, right) -> case when left is null and right is null then 0 when left is null then -1 when right is null then 1 when left < right then 1 when left > right then -1 else 0 end);["dc","bc","ab"]> SELECT array_sort(array('b', 'd', null, 'c', 'a'));["a","b","c","d",null]
ARRAY_EXCEPT(<a> array<T>, <b> array<T>)
> SELECT array_except(array(1, 2, 3), array(1, 3, 5));[2]
ARRAY_UNION(<a> array<T>, <b> array<T>)
> SELECT array_union(array(1, 2, 3), array(1, 3, 5));[1,2,3,5]
NAMED_STRUCT(name1 K, val1 V, ...)
> SELECT named_struct("a", 1, "b", 2, "c", 3);{"a":1,"b":2,"c":3}
STRUCT(<col1> T1, <col2> T2, ...)
> SELECT struct('a', 'b', 'c');{"col1":"a","col2":"b","col3":"c"}> SELECT struct('a', 'b', 'c', 1, 2);{"col1":"a","col2":"b","col3":"c","col4":1,"col5":2}
SLICE(<a> array<T>, <start> integer, <length> integer)
> SELECT slice(array(1, 2, 3, 4), 2, 2);[2,3]> SELECT slice(array(1, 2, 3, 4), -2, 2);[3,4]
ARRAYS_ZIP(<a1> array<T>, ...)
> SELECT arrays_zip(array(1, 2, 3), array(2, 3, 4));[{"0":1,"1":2},{"0":2,"1":3},{"0":3,"1":4}]> SELECT arrays_zip(array(1, 2), array(2, 3), array(3, 4));[{"0":1,"1":2,"2":3},{"0":2,"1":3,"2":4}]
SORT_ARRAY(<a> array<T>[, ascendingOrder boolean])
> SELECT sort_array(array('b', 'd', null, 'c', 'a'), true);[null,"a","b","c","d"]
SHUFFLE(<a> array<T>)
> SELECT shuffle(array(1, 20, 3, 5));[3,1,5,20]> SELECT shuffle(array(1, 20, null, 3));[20,null,3,1]
ARRAY_MAX(<a> array<T>)
> SELECT array_max(array(1, 20, null, 3));20
ARRAY_MIN(<a> array<T>)
> SELECT array_min(array(1, 20, null, 3));1
FLATTEN(<aa> array<array<T>>
> SELECT flatten(array(array(1, 2), array(3, 4)));[1,2,3,4]
SEQUENCE(<start> integer|date|timestamp, end integer|date|timestamp[, step integer|interval])
与start相同> SELECT sequence(1, 5);[1,2,3,4,5]> SELECT sequence(5, 1);[5,4,3,2,1]> SELECT sequence(to_date('2018-01-01'), to_date('2018-03-01'), interval 1 month);[2018-01-01,2018-02-01,2018-03-01]> SELECT sequence(to_date('2018-01-01'), to_date('2018-03-01'), interval '0-1' year to month);[2018-01-01,2018-02-01,2018-03-01]
ARRAY_REPEAT(<element> T, <count> integer)
> SELECT array_repeat('123', 2);["123","123"]
ARRAY_REMOVE(<a> array<T>, <element> T)
> SELECT array_remove(array(1, 2, 3, null, 3), 3);[1,2,null]
ARRAY_DISTINCT(<a> array<T>)
> SELECT array_distinct(array(1, 2, 3, null, 3));[1,2,3,null]
ELEMENT_AT(<a> array<T>, <index> integer)ELEMENT_AT(<m> map<K, V>, <key> K)
> SELECT element_at(array(1, 2, 3), 2);2> SELECT element_at(map(1, 'a', 2, 'b'), 2);b
MAP(<k1> K, <v1> V, ...)
> SELECT map(1.0, '2', 3.0, '4');{1.0:"2",3.0:"4"}
MAP_FROM_ARRAYS(<keys> array<K>, <values> array<V>)
> SELECT map_from_arrays(array(1.0, 3.0), array('2', '4'));{1.0:"2",3.0:"4"}
MAP_KEYS(<m> map<K, V>)
> SELECT map_keys(map(1, 'a', 2, 'b'));[1,2]
MAP_VALUES(<m> map<K, V>)
> SELECT map_values(map(1, 'a', 2, 'b'));["a","b"]
MAP_ENTRIES(<m> map<K, V>)
> SELECT map_entries(map(1, 'a', 2, 'b'));[{"key":1,"value":"a"},{"key":2,"value":"b"}]
MAP_FROM_ENTRIES(<entries> array<struct<K, V>>)
> SELECT map_from_entries(array(struct(1, 'a'), struct(2, 'b')));{1:"a",2:"b"}
MAP_CONCAT(map1 map<K, V>, ...)
> SELECT map_concat(map(1, 'a', 2, 'b'), map(3, 'c'));{1:"a",2:"b",3:"c"}
MAP_FILTER(<m> map<K, V>, <func> function(K, V)->boolean)
> SELECT map_filter(map(1, 0, 2, 2, 3, -1), (k, v) -> k > v);{1:0,3:-1}
MAP_ZIP_WITH(<map1> map<K, V1>, <map2> map<K, V2>, <func> function(K, V1, V2)->R)
> SELECT map_zip_with(map(1, 'a', 2, 'b'), map(1, 'x', 2, 'y'), (k, v1, v2) -> concat(v1, v2));{1:"ax",2:"by"}
TRANSFORM_KEYS(<m> map<K, V>, <func> function(K, V)->R)
> SELECT transform_keys(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> k + 1);{2:1,3:2,4:3}> SELECT transform_keys(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> k + v);{2:1,4:2,6:3}
TRANSFORM_VALUES(<m> map<K, V>, <func> function(K, V)->R)
> SELECT transform_values(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> v + 1);{1:2,2:3,3:4}> SELECT transform_values(map_from_arrays(array(1, 2, 3), array(1, 2, 3)), (k, v) -> k + v);{1:2,2:4,3:6}
SIZE(<expr> array<T>|map<K, V>)
> SELECT size(array('b', 'd', 'c', 'a'));4> SELECT size(map('a', 1, 'b', 2));2> SELECT size(NULL);-1
CARDINALITY(<expr> array<T>|map<K, V>)
> SELECT cardinality(array('b', 'd', 'c', 'a'));4> SELECT cardinality(map('a', 1, 'b', 2));2> SELECT cardinality(NULL);-1
ANY_MATCH(<expr> array<T>, x -> lambda(x))FORALL(<expr> array<T>, x -> lambda(x))
> SELECT any_match(array(1, 2, 3), x -> x % 2 == 0);false> SELECT any_match(array(2, 4, 8), x -> x % 2 == 0);true> SELECT any_match(array(1, null, 3), x -> x % 2 == 0);NULL
文档反馈