このトピックでは、map関数と演算子の構文について説明します。 このトピックでは、関数と演算子の使用方法の例も示します。
次の表に、Simple Log Serviceでサポートされているマップ関数と演算子を示します。
関数 | 構文 | 説明 | SQLでサポート | SPLでサポート |
[x] | マップからキーの値を返します。 | √ | × | |
cardinality( x) | マップのサイズを返します。 | √ | × | |
element_at( x, key) | マップからキーの値を返します。 | √ | √ | |
ヒストグラム (x) | クエリと分析の結果をグループ化し、JSON形式でデータを返します。 | √ | × | |
histogram_u( x) | クエリと分析の結果をグループ化し、複数の行と複数の列のデータを返します。 | √ | × | |
map() | 空のマップを返します。 | √ | √ | |
マップ (x, y) | 2つの配列を使用して作成されたマップを返します。 | √ | √ | |
map_agg( x, y) | xとyを使用して作成されたマップを返します。 xはマップ内のキーです。 yはマップ内のキーの値です。 yが複数の値を持つ場合、ランダムな値がキーの値として抽出されます。 | √ | × | |
map_concat( x, y ...) | 複数のマップの和集合を返します。 | √ | √ | |
map_filter( x, lambda_expression) | ラムダ式に基づいてマップ内の要素をフィルタリングします。 | √ | √ | |
map_keys( x) | マップ内のすべてのキーで構成される配列を返します。 | √ | √ | |
map_values( x) | マップ内のすべての値で構成される配列を返します。 | √ | √ | |
multimap_agg( x, y) | xとyを使用して作成されたマルチマップを返します。 xはマルチマップのキーです。 yは、マルチマップ内のキーの値です。 値は配列型です。 yが複数の値を持つ場合、すべての値がキーの値として抽出されます。 | √ | × |
サブスクリプト演算子
下付きの演算子は、マップからキーの値を返します。
構文
[x]
パラメーター
パラメーター | 説明 |
x | このパラメーターの値はvarchar型です。 |
戻り値のデータ型
任意のデータ型。
例
データ変換ジョブによって変換されるログでは、etl_contextフィールドの値はmap型です。 添字演算子を使用して、etl_contextフィールドの値からprojectキーの値を取得できます。
サンプルフィールド
etl_context: { project:"datalab-148****6461-cn-chengdu" logstore:"internal-etl-log" consumer_group:"etl-83****4d1965" consumer:"etl-b2d40ed****c8d6-291294" shard_id:"0" }
クエリ文
* | SELECT try_cast(json_parse(etl_context) AS map(varchar, varchar))['project']
クエリと分析結果
cardinality関数
cardinality関数は、マップのサイズを返します。
構文
cardinality(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値はmap型です。 |
戻り値のデータ型
bigint型。
例
各リクエストメソッドのリクエスト数を取得するには、histogram関数を使用します。 次に、cardinality関数を使用してリクエストメソッドの数を取得します。
クエリ文
* | SELECT histogram(request_method) AS request_method, cardinality(histogram(request_method)) AS "kinds"
クエリと分析結果
element_at関数
element_at関数は、マップからキーの値を返します。
構文
element_at(x, key)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値はmap型です。 |
キー | このパラメーターの値は、マップ内のキーです。 |
戻り値のデータ型
任意のデータ型。
例
各リクエストメソッドのリクエスト数を取得するには、histogram関数を使用します。 次に、element_at関数を使用してDELETEフィールドの値を取得します。
クエリ文
* | SELECT histogram(request_method) AS request_method, element_at(histogram(request_method),'DELETE') AS "count"
クエリと分析結果
ヒストグラム関数
ヒストグラム関数は、クエリと分析の結果をグループ化し、JSON形式のデータを返します。 この関数は、* | SELECT count(*) GROUP BY x
に相当します。
構文
histogram(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は任意のデータ型です。 |
戻り値のデータ型
マップタイプ。
例
各リクエストメソッドのリクエスト数を取得するには、histogram関数を使用します。
クエリ文
* | SELECT histogram(request_method) AS request_method
クエリと分析結果
histogram_u関数
histogram_u関数は、クエリと分析の結果をグループ化し、複数の行と複数の列のデータを返します。
構文
histogram_u(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は任意のデータ型です。 |
戻り値のデータ型
bigint型。
例
histogram_u関数を使用して、各リクエストメソッドのリクエスト数を取得し、その数を縦棒グラフに表示します。
クエリ文
*|SELECT histogram_u(request_method) as request_method
クエリと分析結果
マップ関数
map関数は空のマップを返すか、2つの配列を使用して作成されたマップを返します。
構文
map関数の次の構文は、空のマップを返します。
map()
次のmap関数の構文は、2つの配列を使用して作成されたマップを返します。
map(x,y)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は配列型です。 |
y | このパラメーターの値は配列型です。 |
戻り値のデータ型
マップタイプ。
例
例1: classフィールドはクラスを指定します。 numberフィールドは、クラスの学生の数を指定します。 2つのフィールドの値は配列型です。 map関数を使用して、2つのフィールドの値に基づいてマップを作成します。 返された結果では、各クラスはクラス内の学生の数にマッピングされます。
サンプルフィールド
class:["class01","class02","class03","class04","class05"] number:[49,50,45,47,50]
クエリ文
* | SELECT map(try_cast(json_parse(class) AS array(varchar)) ,try_cast(json_parse(number) AS array(bigint)))
クエリと分析結果
例2: 空のマップを返します。
クエリ文
*| SELECT map()
クエリと分析結果
map_agg関数
map_agg関数は、xとyを使用して作成されたマップを返します。 xはマップ内のキーです。 yはマップ内のキーの値です。 yが複数の値を持つ場合、ランダムな値がキーの値として抽出されます。
構文
map_agg(x, y)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は任意のデータ型です。 |
y | このパラメーターの値は任意のデータ型です。 |
戻り値のデータ型
マップタイプ。
例
request_methodフィールドとrequest_timeフィールドの値を抽出し、抽出した値を使用してマップを作成します。 request_methodフィールドの値は、マップのキーです。 request_timeフィールドの値は、マップ内のキーの値です。
サンプルフィールド
request_method:POST request_time:80
クエリ文
* | SELECT map_agg(request_method,request_time)
クエリと分析結果
map_concat関数
map_concat関数は、複数のマップの和集合を返します。
構文
map_concat(x, y)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値はmap型です。 |
y | パラメータは、マップデータ型とすることができる。 |
戻り値のデータ型
マップタイプ。
例
データ変換ジョブによって変換されるログでは、etl_contextフィールドとprogressフィールドの値はマップ型です。 map_concat関数を使用して、フィールド値の和集合を取得できます。
サンプルフィールド
etl_context: { project:"datalab-148****6461-cn-chengdu" logstore:"internal-etl-log" consumer_group:"etl-83****4d1965" consumer:"etl-b2d40ed****c8d6-291294" shard_id:"0" } progress: { accept:3 dropped:0 delivered:3 failed:0 }
クエリ文
* | SELECT map_concat( cast ( json_parse(etl_context) AS map(varchar, varchar) ), cast (json_parse(progress) AS map(varchar, varchar)) )
クエリと分析結果
map_filter関数
map_filter関数は、ラムダ式に基づいてマップ内の要素をフィルタリングします。
構文
map_filter(x, lambda_expression)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値はmap型です。 |
lambda_expression_expression | ラムダ式。 詳細は、「Lambda式」をご参照ください。 |
戻り値のデータ型
マップタイプ。
例
ラムダ式 (k, v) -> v is not null
を使用して、2つの配列のnull値を含まないマップを作成します。
クエリ文
* | SELECT map_filter(map(array[10, 20, 30], array['a', NULL, 'c']), (k, v) -> v is not null)
クエリと分析結果
map_keys関数
map_keys関数は、マップ内のすべてのキーで構成される配列を返します。
構文
map_keys(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値はmap型です。 |
戻り値のデータ型
配列型。
例
データ変換ジョブによって変換されるログでは、etl_contextフィールドの値はmap型です。 map_keys関数を使用して、etl_contextフィールドの値からすべてのキーを取得できます。
サンプルフィールド
etl_context: { project:"datalab-148****6461-cn-chengdu" logstore:"internal-etl-log" consumer_group:"etl-83****4d1965" consumer:"etl-b2d40ed****c8d6-291294" shard_id:"0" }
クエリ文
* | SELECT map_keys(try_cast(json_parse(etl_context) AS map(varchar, varchar)))
クエリと分析結果
map_values関数
map_values関数は、マップ内のすべての値で構成される配列を返します。
構文
map_values(x)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値はmap型です。 |
戻り値のデータ型
配列型。
例
データ変換ジョブによって変換されるログでは、etl_contextフィールドの値はmap型です。 map_values関数を使用して、etl_contextフィールドの値からすべてのキーの値を取得できます。
サンプルフィールド
etl_context: { project:"datalab-148****6461-cn-chengdu" logstore:"internal-etl-log" consumer_group:"etl-83****4d1965" consumer:"etl-b2d40ed****c8d6-291294" shard_id:"0" }
クエリ文
* | SELECT map_values(try_cast(json_parse(etl_context) AS map(varchar, varchar)))
クエリと分析結果
multimap_agg関数
multimap_agg関数は、xとyを使用して作成されたマルチマップを返します。 xはマルチマップのキーです。 yは、マルチマップ内のキーの値です。 値は配列型です。 yが複数の値を持つ場合、すべての値がキーの値として抽出されます。
構文
multimap_agg(x, y)
パラメーター
パラメーター | 説明 |
x | このパラメーターの値は任意のデータ型です。 |
y | このパラメーターの値は任意のデータ型です。 |
戻り値のデータ型
マップタイプ。
例
request_methodおよびrequest_timeフィールドのすべての値を抽出し、抽出した値を使用してマルチマップを作成します。 request_methodフィールドの値は、マルチマップのキーです。 request_timeフィールドの値は、マルチマップのキーの値です。 キーの値は配列型です。
サンプルフィールド
request_method:POST request_time:80
クエリ文
* | SELECT multimap_agg(request_method,request_time)
クエリと分析結果