tencent cloud

Data Lake Compute

集約関数

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-12-25 12:00:07

ARRAY

関数構文:
ARRAY(<e1> T, ..., <en> T)
対応エンジン:SparkSQL、Presto。
使用説明:指定された要素に基づいて配列を生成します
戻り値の型:array<T>。
例:
> SELECT array(1, 2, 3);
[1,2,3]

FILTER

関数構文:
FILTER(<expr> array<T>, <predicate> function(T[, integer])->boolean)
サポートエンジン:SparkSQL。
使用説明:与えられた述語を使用して入力配列をフィルタリングします。
戻り値の型:array<T>。
例:
> 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

関数構文:
TRANSFORM(<expr> array<T>, <func> function(T[, integer])->U)
サポートエンジン:SparkSQL
使用説明:funcを使用して配列内の要素を変換します。
戻り値の型:array<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

関数構文:
ZIP_WITH(<left> array<T>, <right> array<U>, <func> function(T, U)->R)
サポートエンジン:SparkSQL。
使用説明:2つの指定された配列を要素ごとに結合して単一の配列にするには関数を使用します。一方の配列が短い場合、関数を適用する前に、長い配列の長さに合わせるために末尾にnullを追加します。
戻り値の型:array<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

関数構文:
FORALL(<expr> array<T>, <pred> function(T)->boolean)
サポートエンジン:SparkSQL。
使用説明:配列内のすべての要素にテスト述語が適用されるかどうかを確認します。
戻り値の型: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

関数構文:
AGGREGATE(<expr> array<T>, <start> U, <merge> function(U, T)->U, <finish> function(U)->R)
サポートエンジン:SparkSQL。
使用説明:配列 expr の要素を集約します。
戻り値の型: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

関数構文:
EXISTS(<expr> array<T>, <pred> function(T)->boolean)
サポートエンジン:SparkSQL。
使用説明:述語が配列内の1つ以上の要素に適用されるかどうかをテストします。
戻り値の型: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

関数構文:
ARRAY_CONTAINS(<expr> array<T>, <value> T)
対応エンジン:SparkSQL、Presto。
使用説明:配列にvalueが含まれている場合、trueを返します。
戻り値の型:boolean。
例:
> SELECT array_contains(array(1, 2, 3), 2);
true

ARRAYS_OVERLAP

関数構文:
ARRAYS_OVERLAP(<a> array<T>, <b> array<U>)
対応エンジン:SparkSQL、Presto。
使用説明:a が b にも存在する非 null 要素を少なくとも1つ含む場合、true を返します。配列に共通要素がなく、両方が非空で、いずれかが null 要素を含む場合は null を返し、それ以外の場合は false を返します。
戻り値の型:boolean。
例:
> SELECT arrays_overlap(array(1, 2, 3), array(3, 4, 5));
true

ARRAY_INTERSECT

関数構文:
ARRAY_INTERSECT(<a> array<T>, <b> array<T>)
サポートエンジン:SparkSQL、Presto。
使用説明:a と b の交差部分の要素を重複なしで配列として返します。
戻り値の型:array<T>。
例:
> SELECT array_intersect(array(1, 2, 3), array(1, 3, 5));
[1,3]

ARRAY_JOIN

関数構文:
ARRAY_JOIN(<a> ARRAY<T>, <delimiter> string[, <nullReplacement> string])
対応エンジン:SparkSQL、Presto。
使用説明:指定された配列の要素を区切り文字とオプションの文字列で結合し、nullを置換します。nullReplacementの値が設定されていない場合、すべてのnull値はフィルタリングされます。
戻り値の型: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

関数構文:
ARRAY_POSITION(<a> array<T>, <element> T)
対応エンジン:SparkSQL、Presto。
使用説明:配列の最初の要素の(1から数える)インデックスを返します。
戻り値の型:integer。
例:
> SELECT array_position(array(3, 2, 1), 1);
3

ARRAY_SORT

関数構文:
ARRAY_SORT(<a> array<T>[, <func> function(T, T)->integer])
対応エンジン:SparkSQL、Presto。
使用説明:入力配列をソートします。funcを省略した場合、昇順でソートされます。
戻り値の型:array<T>。
例:
> 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

関数構文:
ARRAY_EXCEPT(<a> array<T>, <b> array<T>)
対応エンジン:SparkSQL、Presto。
使用説明:a にあって b にはない要素を重複なしで配列として返します。
戻り値の型:array<T>。
例:
> SELECT array_except(array(1, 2, 3), array(1, 3, 5));
[2]

ARRAY_UNION

関数構文:
ARRAY_UNION(<a> array<T>, <b> array<T>)
対応エンジン:SparkSQL、Presto。
使用説明:a と b の和集合の要素を重複なしで配列として返します。
戻り値の型:array<T>。
例:
> SELECT array_union(array(1, 2, 3), array(1, 3, 5));
[1,2,3,5]

NAMED_STRUCT

関数構文:
NAMED_STRUCT(name1 K, val1 V, ...)
サポートエンジン:SparkSQL。
使用説明:指定されたフィールド名と値を使用してstructを作成します。
戻り値の型:struct。
例:
> SELECT named_struct("a", 1, "b", 2, "c", 3);
{"a":1,"b":2,"c":3}

STRUCT

関数構文:
STRUCT(<col1> T1, <col2> T2, ...)
対応エンジン:SparkSQL、Presto。
使用方法:指定されたフィールド名と値を使用してstructを作成します。
戻り値の型:struct。
例:
> 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

関数構文:
SLICE(<a> array<T>, <start> integer, <length> integer)
対応エンジン:SparkSQL、Presto。
使用説明:配列aのインデックスstart(配列のインデックスは1から始まり、startが負の場合は末尾から開始)から、指定された長さlengthのサブセットを返します。
戻り値の型:array<T>。
例:
> SELECT slice(array(1, 2, 3, 4), 2, 2);
[2,3]
> SELECT slice(array(1, 2, 3, 4), -2, 2);
[3,4]

ARRAYS_ZIP

関数構文:
ARRAYS_ZIP(<a1> array<T>, ...)
サポートエンジン:SparkSQL。
使用説明:結合された配列を返します。要素はstruct型で、N番目のstructには各入力配列のN番目の値が含まれます。
戻り値の型:array<struct<string, 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

関数構文:
SORT_ARRAY(<a> array<T>[, ascendingOrder boolean])
対応エンジン:SparkSQL、Presto。
使用方法:入力配列を昇順または降順でソートします。double/float型の場合、NaNは非NaN要素より大きいと見なされます。Null要素は、昇順の場合は返される配列の先頭に、降順の場合は末尾に配置されます。
戻り値の型:array<T>。
例:
> SELECT sort_array(array('b', 'd', null, 'c', 'a'), true);
[null,"a","b","c","d"]

SHUFFLE

関数構文:
SHUFFLE(<a> array<T>)
対応エンジン:SparkSQL、Presto。
使用説明:指定された配列のランダムな順列を返します。
戻り値の型: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

関数構文:
ARRAY_MAX(<a> array<T>)
対応エンジン:SparkSQL、Presto。
使用説明:配列内の最大値を返します。double/float型の場合、NaNは非NaN要素より大きいと見なされます。空要素はスキップします。
戻り値の型:array<T>。
例:
> SELECT array_max(array(1, 20, null, 3));
20

ARRAY_MIN

関数構文:
ARRAY_MIN(<a> array<T>)
対応エンジン:SparkSQL、Presto。
使用説明:配列内の最小値を返します。double/float型の場合、NaNは非NaN要素より大きいと見なされます。空要素はスキップします。
戻り値の型:array<T>。
例:
> SELECT array_min(array(1, 20, null, 3));
1

FLATTEN

関数構文:
FLATTEN(<aa> array<array<T>>
対応エンジン:SparkSQL、Presto。
使用説明:二次元配列を一次元配列に変換します。
戻り値の型:array<T>。
例:
> SELECT flatten(array(array(1, 2), array(3, 4)));
[1,2,3,4]

SEQUENCE

関数構文:
SEQUENCE(<start> integer|date|timestamp, end integer|date|timestamp[, step integer|interval])
サポートエンジン:SparkSQL、Presto
使用説明:startからend(endを含む)までの配列を生成し、段階的に増加させます。返される要素の型はstartとendの型と同じです。 startとstopの式は同じ型に解決されなければなりません。開始および停止式がdateまたはtimestamp型に解決される場合、stepはinterval、year-month interval、またはday-time interval型に解決されなければなりません。それ以外の場合は、startとendと同じ型に解決されます。
戻り値の型: 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

関数構文:
ARRAY_REPEAT(<element> T, <count> integer)
サポートエンジン:SparkSQL、Presto。
使用説明:count 個の element を含む配列を返します。
戻り値の型:array<T>。
例:
> SELECT array_repeat('123', 2);
["123","123"]

ARRAY_REMOVE

関数構文:
ARRAY_REMOVE(<a> array<T>, <element> T)
サポートエンジン:SparkSQL、Presto。
使用説明:配列から指定された要素と等しいすべての要素を削除します。
戻り値の型:array<T>。
例:
> SELECT array_remove(array(1, 2, 3, null, 3), 3);
[1,2,null]

ARRAY_DISTINCT

関数構文:
ARRAY_DISTINCT(<a> array<T>)
サポートエンジン:SparkSQL、Presto。
使用説明:配列から重複する値を削除します。
戻り値の型:array<T>。
例:
> SELECT array_distinct(array(1, 2, 3, null, 3));
[1,2,3,null]

ELEMENT_AT

関数構文:
ELEMENT_AT(<a> array<T>, <index> integer)
ELEMENT_AT(<m> map<K, V>, <key> K)
サポートエンジン:SparkSQL、Presto
使用説明:指定された(1から数える)インデックスの配列要素を返すか、指定されたキーの値を返します。
戻り値の型:T,V
例:
> SELECT element_at(array(1, 2, 3), 2);
2
> SELECT element_at(map(1, 'a', 2, 'b'), 2);
b

MAP

関数構文:
MAP(<k1> K, <v1> V, ...)
サポートエンジン:SparkSQL、Presto。
使用説明:指定された要素に基づいてマップを生成します。
戻り値の型:MAP<K, V>。
例:
> SELECT map(1.0, '2', 3.0, '4');
{1.0:"2",3.0:"4"}

MAP_FROM_ARRAYS

関数構文:
MAP_FROM_ARRAYS(<keys> array<K>, <values> array<V>)
サポートエンジン:SparkSQL、Presto。
使用説明:指定された key/value 配列のペアを使用してマップを作成します。keys 内のすべての要素は null であってはなりません。
戻り値の型:map<K, V>。
例:
> SELECT map_from_arrays(array(1.0, 3.0), array('2', '4'));
{1.0:"2",3.0:"4"}

MAP_KEYS

関数構文:
MAP_KEYS(<m> map<K, V>)
サポートエンジン:SparkSQL、Presto。
使用説明:mapキーを含む順不同の配列を返します。
戻り値の型:array<K>。
例:
> SELECT map_keys(map(1, 'a', 2, 'b'));
[1,2]

MAP_VALUES

関数構文:
MAP_VALUES(<m> map<K, V>)
サポートエンジン:SparkSQL、Presto。
使用説明:map値を含む順不同の配列を返します。
戻り値の型:array<V>。
例:
> SELECT map_values(map(1, 'a', 2, 'b'));
["a","b"]

MAP_ENTRIES

関数構文:
MAP_ENTRIES(<m> map<K, V>)
サポートエンジン:SparkSQL、Presto。
使用説明:指定されたmap内のすべての項目を含む順不同の配列を返します。
戻り値の型:array<struct<K, V>>。
例:
> SELECT map_entries(map(1, 'a', 2, 'b'));
[{"key":1,"value":"a"},{"key":2,"value":"b"}]

MAP_FROM_ENTRIES

関数構文:
MAP_FROM_ENTRIES(<entries> array<struct<K, V>>)
サポートエンジン:SparkSQL、Presto。
使用説明:与えられたエントリ配列から作成されたマップを返します。
戻り値の型:map<K, V>。
例:
> SELECT map_from_entries(array(struct(1, 'a'), struct(2, 'b')));
{1:"a",2:"b"}

MAP_CONCAT

関数構文:
MAP_CONCAT(map1 map<K, V>, ...)
サポートエンジン:SparkSQL、Presto。
使用説明:指定されたすべてのマッピングの和集合を返します。
戻り値の型:map<K, V>。
例:
> SELECT map_concat(map(1, 'a', 2, 'b'), map(3, 'c'));
{1:"a",2:"b",3:"c"}

MAP_FILTER

関数構文:
MAP_FILTER(<m> map<K, V>, <func> function(K, V)->boolean)
サポートエンジン:SparkSQL。
使用説明:funcを使用してmのエントリをフィルタリングします。
戻り値の型:map<K, V>。
例:
> SELECT map_filter(map(1, 0, 2, 2, 3, -1), (k, v) -> k > v);
{1:0,3:-1}

MAP_ZIP_WITH

関数構文:
MAP_ZIP_WITH(<map1> map<K, V1>, <map2> map<K, V2>, <func> function(K, V1, V2)->R)
サポートエンジン:SparkSQL。
使用説明:funcを使用して、2つの指定されたマッピングを単一のマッピングに結合します。1つのマッピングにのみ表示されるキーの場合、値はNULLに設定されます。入力マッピングに重複キーが含まれている場合、重複キーの最初のエントリのみがfuncに渡されます。
戻り値の型:MAP<K, 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

関数構文:
TRANSFORM_KEYS(<m> map<K, V>, <func> function(K, V)->R)
サポートエンジン:SparkSQL。
使用説明:func を使用して map のキーを変換します。
戻り値の型:map<R, V>。
例:
> 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

関数構文:
TRANSFORM_VALUES(<m> map<K, V>, <func> function(K, V)->R)
サポートエンジン:SparkSQL。
使用説明:funcを使用してmap内のvaluesを変換します。
戻り値の型:map<K, 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

関数構文:
SIZE(<expr> array<T>|map<K, V>)
サポートエンジン:SparkSQL、Presto。
使用説明:配列またはマップのサイズを返します。
戻り値の型:integer。
例:
> SELECT size(array('b', 'd', 'c', 'a'));
4
> SELECT size(map('a', 1, 'b', 2));
2
> SELECT size(NULL);
-1

CARDINALITY

関数構文:
CARDINALITY(<expr> array<T>|map<K, V>)
サポートエンジン:SparkSQL、Presto。
使用説明:配列またはマップのサイズを返します。
戻り値の型:integer。
例:
> SELECT cardinality(array('b', 'd', 'c', 'a'));
4
> SELECT cardinality(map('a', 1, 'b', 2));
2
> SELECT cardinality(NULL);
-1

ANY_MATCH / FORALL

関数構文:
ANY_MATCH(<expr> array<T>, x -> lambda(x))
FORALL(<expr> array<T>, x -> lambda(x))
サポートエンジン:SparkSQL。
使用説明:配列の各要素に対して、順番にlambda式を実行し、1つでもtrueが返された場合に関数はtrueを返し、それ以外の場合はfalseを返します。
配列にNULLの要素がある場合、NULLを返します。
戻り値の型:boolean
例:
> 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


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック