このトピックでは、配列関数と演算子の構文について説明します。 このトピックでは、関数と演算子の使用方法の例も示します。
次の表に、Simple Log Serviceでサポートされている配列関数と演算子を示します。
関数または演算子 | 構文 | 説明 | SQLでサポート | SPLでサポート |
[x] | 配列内のインデックスがxの要素を返します。 この演算子は、element_at関数に相当します。 | √ | × | |
array_agg( x) | xフィールドのすべての値で構成される配列を返します。 | √ | × | |
array_distinct( x) | 配列から重複要素を削除します。 | √ | √ | |
array_except( x, y) | 2つの配列の差を計算します。 | √ | √ | |
array_intersect( x, y) | 2つの配列の交差を計算します。 | √ | √ | |
array_join( x, delimiter) | 指定された区切り文字を使用して、配列の要素を文字列に連結します。 配列にnull要素が含まれている場合、null要素は無視されます。 重要 array_join関数は、最大1 KBのデータを返すことができます。 返されるデータのサイズが1 KBを超える場合、データは切り捨てられます。 | √ | √ | |
array_join( x、delimiter、null_replacement) | 指定された区切り文字を使用して、配列の要素を文字列に連結します。 配列にnull要素が含まれている場合、null要素はnull_replacementパラメーターの値に置き換えられます。 重要 array_join関数は、最大1 KBのデータを返すことができます。 返されるデータのサイズが1 KBを超える場合、データは切り捨てられます。 | √ | √ | |
array_max( x) | 配列内の最大値を返します。 | √ | √ | |
array_min( x) | 配列内の最小値を返します。 | √ | √ | |
array_position( x, element) | 配列内の指定された要素のインデックスを返します。 インデックスは1から始まります。 指定された要素が存在しない場合、関数は0を返します。 | √ | √ | |
array_remove( x, element) | 指定した要素を配列から削除します。 | √ | √ | |
array_sort( x) | 配列内の要素を昇順で並べ替えます。 配列にnull要素が含まれている場合、null要素は末尾に配置されます。 | √ | √ | |
array_transpose( x) | 行列を転置し、行列の要素で構成される新しい2次元配列を返します。 要素は同じインデックスを使用して配置されます。 | √ | × | |
array_union( x, y) | 2つの配列の和集合を計算します。 | √ | × | |
cardinality( x) | 配列内の要素数をカウントします。 | √ | √ | |
concat( x, y …) | 複数の配列を1つの配列に連結します。 | √ | × | |
contains( x, element) | 配列に指定された要素が含まれているかどうかをチェックします。 配列に指定された要素が含まれている場合、関数はtrueを返します。 | √ | × | |
element_at( x, y) | 配列内のインデックスがyの要素を返します。 | √ | × | |
フィルター (x、lambda_expression) | ラムダ式に基づいて配列内の要素をフィルタリングし、ラムダ式に一致する要素を返します。 | √ | √ | |
flatten( x) | 2次元配列を1次元配列に変換します。 | √ | × | |
reduce( x、lambda_expression) | ラムダ式に基づいて、配列内の要素の合計を返します。 | √ | √ | |
リバース (x) | 配列内の要素を反転します。 | √ | √ | |
シーケンス (x, y) | 指定した範囲内の要素の配列を返します。 要素は連続的で増分的です。 増分ステップは1で、デフォルト値です。 | √ | √ | |
シーケンス (x, y, step) | 指定した範囲内の要素の配列を返します。 要素は連続的で増分的です。 増分ステップはカスタム値です。 | √ | √ | |
シャッフル (x) | 配列内の要素をシャッフルします。 | √ | √ | |
slice( x、start、length) | 配列のサブセットを返します。 | √ | √ | |
transform( x, lambda_expression) | ラムダ式を使用して、配列内の各要素を変換します。 | √ | √ | |
zip( x, y ...) | 複数の配列を2次元配列にマージします。 入力配列で同じインデックスを持つ要素は、2次元配列で新しい配列を形成します。 | √ | √ | |
zip_with( x, y, lambda_expression) | ラムダ式を使用して、2つの配列を1つの配列にマージします。 | √ | × |
サブスクリプト演算子
添字演算子は、配列内のインデックスがxである要素を返します。 この演算子は、element_at関数に相当します。
構文
[x]
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は、配列内の要素のインデックスです。 インデックスは1から始まります。 このパラメーターの値はbigint型です。 |
戻り値のデータ型
指定された要素のデータ型。
例
numberフィールドの値の最初の要素を返します。
サンプルフィールド
number:[49,50,45,47,50]
クエリ文
* | SELECT cast(json_parse(number) as array(bigint)) [1]
クエリと分析結果
array_agg関数
array_agg関数は、xフィールドのすべての値で構成される配列を返します。
構文
array_agg (x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は任意のデータ型です。 |
戻り値のデータ型
配列型。
例
statusフィールドのすべての値で構成される配列を返します。
クエリ文
* | SELECT array_agg(status) AS array
クエリと分析結果
array_distinct関数
array_distinct関数は、配列から重複する要素を削除します。
構文
array_distinct(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
戻り値のデータ型
配列型。
例
numberフィールドの値から重複する要素を削除します。
サンプルフィールド
number:[49,50,45,47,50]
クエリ文
*| SELECT array_distinct(cast(json_parse(number) as array(bigint)))
クエリと分析結果
array_except関数
array_except関数は、2つの配列の差を計算します。
構文
array_except(x, y)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
y | このパラメーターの値は配列型です。 |
戻り値のデータ型
配列型。
例
[1,2,3,4,5] 配列と [1,3,5,7] 配列の差を計算します。
クエリ文
* | SELECT array_except(array[1,2,3,4,5],array[1,3,5,7])
クエリと分析結果
array_intersect関数
array_intersect関数は、2つの配列の交差を計算します。
構文
array_intersect(x, y)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
y | このパラメーターの値は配列型です。 |
戻り値のデータ型
配列型。
例
[1,2,3,4,5] と [1,3,5,7] の配列の交差を計算します。
クエリ文
* | SELECT array_intersect(array[1,2,3,4,5],array[1,3,5,7])
クエリと分析結果
array_join関数
array_join関数は、指定された区切り文字を使用して、配列の要素を文字列に連結します。
構文
次の構文を使用する場合、関数は指定された区切り文字を使用して配列の要素を文字列に連結します。 配列にnull要素が含まれている場合、null要素は無視されます。
array_join(x, delimiter)
次の構文を使用する場合、関数は指定された区切り文字を使用して配列の要素を文字列に連結します。 配列にnull要素が含まれている場合、null要素はnull_replacementパラメーターの値に置き換えられます。
array_join(x, delimiter,null_replacement)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は任意の配列型です。 |
区切り文字 | このパラメーターの値は、要素を連結するために使用される区切り文字です。 このパラメーターには文字列を指定できます。 |
null_置換 | このパラメーターの値は、null要素を置き換えるために使用される文字列です。 |
戻り値のデータ型
varcharタイプ。
例
[null、'Log' 、'Service'] 配列の要素をスペースを使用して文字列に連結し、null要素をAlicloudに置き換えます。
クエリ文
* | SELECT array_join(array[null,'Log','Service'],' ','Alicloud')
クエリと分析結果
array_max関数
array_max関数は、配列の最大値を返します。
構文
array_max(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 重要 配列にnull要素が含まれている場合、関数はnullを返します。 |
戻り値のデータ型
パラメーター値の要素のデータ型と同じです。
例
配列の最大値を返します。
サンプルフィールド
number:[49,50,45,47,50]
クエリ文
*| SELECT array_max(try_cast(json_parse(number) as array(bigint))) AS max_number
クエリと分析結果
array_min関数
array_min関数は、配列の最小値を返します。
構文
array_min(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 重要 配列にnull要素が含まれている場合、関数はnullを返します。 |
戻り値のデータ型
パラメーター値の要素のデータ型と同じです。
例
配列内の最小値を返します。
サンプルフィールド
number:[49,50,45,47,50]
クエリ文
*| SELECT array_min(try_cast(json_parse(number) as array(bigint))) AS min_number
クエリと分析結果
array_position関数
array_position関数は、配列内の指定された要素のインデックスを返します。 インデックスは1から始まります。 指定された要素が存在しない場合、関数は0を返します。
構文
array_position(x, element)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
要素 | このパラメーターの値は、配列内の要素です。 説明 要素がnullの場合、関数はnullを返します。 |
戻り値のデータ型
bigint型。
例
[49,45,47] 配列で45のインデックスを返します。
クエリ文
* | SELECT array_position(array[49,45,47],45)
クエリと分析結果
array_remove関数
array_remove関数は、指定された要素を配列から削除します。
構文
array_remove(x, element)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
要素 | このパラメーターの値は、配列内の要素です。 説明 要素がnullの場合、関数はnullを返します。 |
戻り値のデータ型
配列型。
例
[49,45,47] 配列から45を削除します。
クエリ文
* | SELECT array_remove(array[49,45,47],45)
クエリと分析結果
array_sort関数
array_sort関数は、配列内の要素を昇順でソートします。 配列にnull要素が含まれている場合、null要素は末尾に配置されます。
構文
array_sort(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
戻り値のデータ型
配列型。
例
['b', 'd', null, 'c', 'a'] 配列の要素を昇順に並べ替えます。
クエリ文
* | SELECT array_sort(array['b','d',null,'c','a'])
クエリと分析結果
array_transpose関数
array_transpose関数は、行列を転置し、行列の要素で構成される新しい2次元配列を返します。 要素は同じインデックスを使用して配置されます。
構文
array_transpose(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は、配列 (double) 型です。 |
戻り値のデータ型
配列 (ダブル) タイプ。
例
異なる2次元配列で同じインデックスを使用して配置された要素から2次元配列を作成します。 たとえば、[0,1、2,3] 、[10,19、18,17] 、および [9,8、7] の配列では、インデックス1を使用して、0、10、および9が配置されます。 このようにして、新しいアレイ [0.0、10.0、9.0] が形成される。
クエリ文
* | SELECT array_transpose(array[array[0,1,2,3],array[10,19,18,17],array[9,8,7]])
クエリと分析結果
array_union関数
array_union関数は、2つの配列の和集合を計算します。
構文
array_union(x, y)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
y | このパラメーターの値は配列型です。 |
戻り値のデータ型
配列型。
例
[1,2,3,4,5] と [1,3,5,7] の配列の和集合を計算します。
クエリ文
* | SELECT array_union(array[1,2,3,4,5],array[1,3,5,7])
クエリと分析結果
cardinality関数
カーディナリティ関数は、配列内の要素の数をカウントします。
構文
cardinality(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
戻り値のデータ型
bigint型。
例
numberフィールドの値の要素数を数えます。
サンプルフィールド
number:[49,50,45,47,50]
クエリ文
*| SELECT cardinality(cast(json_parse(number) as array(bigint)))
クエリと分析結果
concat関数
concat関数は、複数の配列を1つの配列に連結します。
構文
concat(x, y…)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
y | このパラメーターの値は配列型です。 |
戻り値のデータ型
配列型。
例
['red' 、'blue'] と ['yellow' 、'green'] の配列を1つの配列に連結します。
クエリ文
* | SELECT concat(array['red','blue'],array['yellow','green'])
クエリと分析結果
contains 関数
contains関数は、配列に指定された要素が含まれているかどうかをチェックします。 配列に指定された要素が含まれている場合、関数はtrueを返します。
構文
contains(x, element)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
要素 | このパラメーターの値は、配列内の要素です。 |
戻り値のデータ型
ブール型。
例
regionフィールドの値にcn-beijingが含まれているかどうかを確認します。
サンプルフィールド
region:["cn-hangzhou","cn-shanghai","cn-beijing"]
クエリ文
*| SELECT contains(cast(json_parse(region) as array(varchar)),'cn-beijing')
クエリと分析結果
element_at関数
element_at関数は、配列内のインデックスがyである要素を返します。
構文
element_at(x, y)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
y | このパラメーターの値は、配列内の要素のインデックスです。 インデックスは1から始まります。 このパラメーターの値はbigint型です。 |
戻り値のデータ型
任意のデータ型。
例
numberフィールドの値の2番目の要素を返します。
サンプルフィールド
number:[49,50,45,47,50]
クエリ文
* | SELECT element_at(cast(json_parse(number) AS array(varchar)), 2)
クエリと分析結果
フィルター関数
filter関数は、ラムダ式に基づいて配列内の要素をフィルタリングし、ラムダ式に一致する要素を返します。
構文
filter(x, lambda_expression)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
ラムダ_式 | このパラメーターの値はラムダ式です。 詳細は、「Lambda式」をご参照ください。 |
戻り値のデータ型
配列型。
例
x -> x > 0
ラムダ式を使用して、[5,-6,null,7] 配列の0より大きい要素を返します。
クエリ文
* | SELECT filter(array[5,-6,null,7],x -> x > 0)
クエリと分析結果
フラット関数
flatten関数は、2次元配列を1次元配列に変換します。
構文
flatten(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
戻り値のデータ型
配列型。
例
2次元配列 [array[1,2、3,4] 、array[5,2、2,4] を1次元配列に変換します。
クエリ文
* | SELECT flatten(array[array[1,2,3,4],array[5,2,2,4]])
クエリと分析結果
reduce関数
reduce関数は、ラムダ式に基づいて配列内の要素の合計を返します。
構文
reduce(x, lambda_expression)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
ラムダ_式 | このパラメーターの値は、初期値、使用するラムダ式、およびラムダ式結果の処理方法の組み合わせです。 詳細は、「Lambda式」をご参照ください。 |
戻り値のデータ型
bigint型。
例
[5,20,50] 配列の要素の合計を返します。
クエリ文
* | SELECT reduce(array[5,20,50],0,(s, x) -> s + x, s -> s)
クエリと分析結果
逆関数
逆関数は、配列内の要素を逆にします。
構文
reverse(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
戻り値のデータ型
配列型。
例
[1,2,3,4,5] 配列の要素を逆にします。
クエリ文
* | SELECT reverse(array[1,2,3,4,5])
クエリと分析結果
シーケンス関数
シーケンス関数は、指定された範囲内の要素の配列を返します。 要素は連続的で増分的です。
構文
次の構文を使用する場合は、デフォルトの増分ステップ (1) を使用する必要があります。
sequence(x, y)
次の構文を使用する場合は、カスタムの増分ステップを指定できます。
sequence(x, y, step)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は、bigint型またはtimestamp型です。 UNIXのタイムスタンプと日時式がサポートされています。 |
y | このパラメーターの値は、bigint型またはtimestamp型です。 UNIXのタイムスタンプと日時式がサポートされています。 |
ステップ | このパラメーターの値は増分ステップです。 xパラメーターとyパラメーターの値が日付と時刻の式の場合、stepパラメーターの値は次のいずれかの形式になります。
|
戻り値のデータ型
配列型。
例
例1: 0から10までの偶数を返します。
クエリ文
* | SELECT sequence(0,10,2)
クエリと分析結果
例2: 2017年10月23日から2021年8月12日までの日付を1年の増分ステップで返します。
クエリ文
ww* | SELECT sequence(from_unixtime(1508737026),from_unixtime(1628734085),interval '1' year to month )
クエリと分析結果
例3: 60秒の増分ステップでUNIXタイムスタンプを1628733298から1628734085に返します。
クエリ文
* | SELECT sequence(1628733298,1628734085,60)
クエリと分析結果
シャッフル関数
シャッフル関数は、配列内の要素をシャッフルします。
構文
shuffle(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
戻り値のデータ型
配列型。
例
[1,2,3,4,5] 配列の要素をシャッフルします。
クエリ文
*| SELECT shuffle(array[1,2,3,4,5])
クエリと分析結果
スライス関数
slice関数は、配列のサブセットを返します。
構文
slice(x, start, length)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
start | このパラメーターの値は、Simple Log Serviceが要素の抽出を開始するインデックスです。
|
長さ | このパラメーターの値は、取得するサブセット内の要素の数です。 |
戻り値のデータ型
配列型。
例
3番目の要素から [1,2,4,5,6,7,7] 配列のサブセットを返します。 サブセットは2つの要素からなる。
クエリ文
* | SELECT slice(array[1,2,4,5,6,7,7],3,2)
クエリと分析結果
変換関数
変換関数は、ラムダ式を使用して配列内の各要素を変換します。
構文
transform(x, lambda_expression)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
ラムダ_式 | このパラメーターの値はラムダ式です。 詳細は、「Lambda式」をご参照ください。 |
戻り値のデータ型
配列型。
例
[5,6] 配列の各要素に1を追加し、新しい配列を返します。
クエリ文
* | SELECT transform(array[5,6],x -> x + 1)
クエリと分析結果
zip関数
zip関数は、複数の配列を2次元配列にマージします。 入力配列で同じインデックスを持つ要素は、2次元配列で新しい配列を形成します。
構文
zip(x, y...)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
y | このパラメーターの値は配列型です。 |
戻り値のデータ型
配列型。
例
[1、2,3] 、['1b' 、null、'3b'] 、および [1、2,3] の配列を2次元配列にマージします。
クエリ文
* | SELECT zip(array[1,2,3], array['1b',null,'3b'],array[1,2,3])
クエリと分析結果
zip_with関数
zip_with関数は、ラムダ式を使用して2つの配列を1つの配列にマージします。
構文
zip_with(x, y, lambda_expression)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
y | このパラメーターの値は配列型です。 |
ラムダ_式 | このパラメーターの値はラムダ式です。 詳細は、「Lambda式」をご参照ください。 |
戻り値のデータ型
配列型。
例
(x, y) -> x + y
のラムダ式を使用して、[1,2] および [3,4] 配列に要素を追加し、新しい配列を返します。
クエリ文
SELECT zip_with(array[1,2], array[3,4],(x,y) -> x + y)
クエリと分析結果