Conheça a sintaxe e o uso das funções e operadores de map no SLS.
O SLS oferece suporte às seguintes funções e operadores de map.
Para usar strings em instruções analíticas, coloque-as entre aspas simples (''). Strings sem aspas ou entre aspas duplas ("") indicam nomes de campos ou colunas. Por exemplo:
'status'
indica a string status, enquanto
status
ou
"status"
indica o campo de log status.
|
Nome da função |
Sintaxe |
Descrição |
SQL |
SPL |
|
[x] |
Retorna o valor de uma chave específica em um map. |
√ |
× |
|
|
cardinality(x) |
Retorna a cardinalidade (tamanho) de um map. |
√ |
× |
|
|
element_at(x, key) |
Retorna o valor de uma chave específica em um map. |
√ |
√ |
|
|
histogram(x) |
Agrupa resultados de consulta e análise em um map. |
√ |
× |
|
|
histogram_u(x) |
Agrupa resultados em formato de múltiplas linhas e colunas. |
√ |
× |
|
|
map() |
Retorna um map vazio. |
√ |
√ |
|
|
map(x, y) |
Crie um map a partir de dois arrays. |
√ |
√ |
|
|
map_agg(x, y) |
Crie um map com x como chave e y como valor. Se y tiver múltiplos valores, um será selecionado aleatoriamente. |
√ |
× |
|
|
map_concat(x, y...) |
Mescla vários maps em um único map. |
√ |
√ |
|
|
map_filter(x, lambda_expression) |
Filtra entradas de um map com base em uma expressão lambda. |
√ |
√ |
|
|
map_keys(x) |
Extrai todas as chaves de um map e as retorna como um array. |
√ |
√ |
|
|
map_values(x) |
Extrai todos os valores de um map e os retorna como um array. |
√ |
√ |
|
|
multimap_agg(x, y) |
Crie um map com x como chave e y como array de valores. Se y tiver múltiplos valores, todos serão coletados. |
√ |
× |
Operador de subscrito
O operador de subscrito retorna o valor de uma chave específica em um map.
Syntax
[x]
Parameters
|
Parâmetro |
Descrição |
|
x |
A chave a ser acessada. Deve ser do tipo varchar. |
Return value type
O tipo de dados do resultado corresponde ao tipo de valor do map.
Examples
Nos logs de transformação de dados do SLS, o campo etl_context é do tipo map. Use o operador de subscrito para obter o valor de project em etl_context.
-
Campo de exemplo
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" } -
Instrução de consulta e análise
* | SELECT try_cast(json_parse(etl_context) AS map(varchar, varchar))['project'] A coluna
_col0retornadatalab-148****6461-cn-chengdu, que é o valor de project extraído de etl_context.
Função cardinality
A função cardinality retorna a cardinalidade (tamanho) de um map.
Syntax
cardinality(x)
Parameters
|
Parâmetro |
Descrição |
|
x |
O map de entrada. |
Return value type
bigint
Examples
Conte solicitações por método com histogram e, em seguida, conte os métodos únicos com cardinality.
-
Instrução de consulta e análise
* | SELECT histogram(request_method) AS request_method, cardinality(histogram(request_method)) AS "kinds" Resultados da consulta e análise: A coluna
request_methodretorna{"DELETE":5,"POST":7,"GET":41,"PUT":4}, e a colunakindsretorna4, indicando quatro métodos de solicitação.
Função element_at
A função element_at retorna o valor de uma chave específica em um map.
Syntax
element_at(x, key)
Parameters
|
Parâmetro |
Descrição |
|
x |
O parâmetro deve ser um map. |
|
key |
Uma chave no map. |
Return value type
O tipo de dados do resultado corresponde ao tipo de valor do map.
Examples
Conte solicitações por método com histogram e obtenha a contagem de DELETE com element_at.
-
Instrução de consulta e análise
* | SELECT histogram(request_method) AS request_method, element_at(histogram(request_method),'DELETE') AS "count" Resultados da consulta e análise: A coluna request_method retorna
{"HEAD":686,"DELETE":13619,"POST":34365,"GET":138097,"PUT":34056}, e a coluna count retorna13619(a contagem de solicitações DELETE).
Função histogram
A função histogram agrupa resultados como um map JSON, semelhante a * | SELECT count(*) GROUP BY x.
Syntax
histogram(x)
Parameters
|
Parâmetro |
Descrição |
|
x |
O parâmetro pode ser de qualquer tipo de dados. |
Return value type
map
Examples
Conte solicitações por método com histogram.
-
Instrução de consulta e análise
* | SELECT histogram(request_method) AS request_method O resultado é
{"HEAD":30,"DELETE":564,"POST":1382,"GET":5420,"PUT":1334}. GET apresenta a maior contagem, com 5.420.
Função histogram_u
A função histogram_u agrupa dados e retorna os resultados em formato de múltiplas linhas e colunas.
Syntax
histogram_u(x)
Parameters
|
Parâmetro |
Descrição |
|
x |
O parâmetro pode ser de qualquer tipo de dados. |
Return value type
bigint
Examples
Conte solicitações por método com histogram_u e exiba os resultados como um gráfico de colunas.
-
Instrução de consulta e análise
*|SELECT histogram_u(request_method) as request_method Resultados da consulta e análise

Função map
A função map retorna um map vazio ou cria um map a partir de dois arrays.
Syntax
-
Retorna um map vazio.
map() -
Crie um map a partir de dois arrays.
map(x,y)
Parameters
|
Parâmetro |
Descrição |
|
x |
O parâmetro deve ser um array. |
|
y |
O parâmetro deve ser um array. |
Return value type
map
Examples
-
Exemplo 1: Os campos class e number são arrays. Use a função map para criar um mapeamento chave-valor entre cada turma e sua quantidade de alunos.
-
Campos de exemplo
class:["class01","class02","class03","class04","class05"] number:[49,50,45,47,50] -
Instrução de consulta e análise
* | SELECT map(try_cast(json_parse(class) AS array(varchar)) ,try_cast(json_parse(number) AS array(bigint))) Os resultados da consulta e análise são
{"class01":49,"class03":45,"class02":50,"class05":50,"class04":47}.
-
-
Exemplo 2: Retorne um map vazio.
-
Instrução de consulta e análise
*| SELECT map() O resultado é
{}, um map vazio.
-
Função map_agg
A função map_agg mapeia x e y em um map, onde x é a chave e y é o valor. Se existirem múltiplos valores para y, um valor será selecionado aleatoriamente.
Syntax
map_agg(x, y)
Parameters
|
Parâmetro |
Descrição |
|
x |
O parâmetro pode ser de qualquer tipo de dados. |
|
y |
O parâmetro pode ser de qualquer tipo de dados. |
Return value type
map
Examples
Mapeie request_method (chave) e request_time (valor) em um map.
-
Campos de exemplo
request_method:POST request_time:80 -
Instrução de consulta e análise
* | SELECT map_agg(request_method,request_time) Os resultados da consulta e análise são
{"HEAD":47.0,"DELETE":26.0,"POST":80.0,"GET":51.0,"PUT":49.0}.
Função map_concat
A função map_concat mescla vários maps em um único map.
Syntax
map_concat(x, y)
Parameters
|
Parâmetro |
Descrição |
|
x |
O parâmetro deve ser um map. |
|
y |
O parâmetro deve ser um map. |
Return value type
map
Examples
Nos logs de transformação de dados do SLS, tanto etl_context quanto progress são do tipo map. Use map_concat para mesclá-los.
-
Campos de exemplo
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 } -
Instrução de consulta e análise
* | SELECT map_concat( cast ( json_parse(etl_context) AS map(varchar, varchar) ), cast (json_parse(progress) AS map(varchar, varchar)) ) -
Resultados da consulta e análise
null {"consumer_group":"etl-83d5****071d1911974d1965","shard_id":"1","dropped":"0","project":"atalab-14****66461-cn-chengdu","delivered":"2","failed":"0","logstore":"internal-etl-log","consumer":"etl-b****510a8ee7a9532c8d6-291294","accept":"2"}
Função map_filter
A função map_filter filtra um map com base em uma expressão lambda.
Syntax
map_filter(x, lambda_expression)
Parameters
|
Parâmetro |
Descrição |
|
x |
O parâmetro deve ser um map. |
|
lambda_expression |
A expressão lambda. Expressões lambda. |
Return value type
map
Examples
Mapeie dois arrays em um novo map, filtrando valores nulos. A expressão (k, v) -> v is not null é uma expressão lambda.
-
Instrução de consulta e análise
* | SELECT map_filter(map(array[10, 20, 30], array['a', NULL, 'c']), (k, v) -> v is not null) Os resultados da consulta e análise são
{"10":"a","30":"c"}.
Função map_keys
A função map_keys extrai todas as chaves de um map e as retorna como um array.
Syntax
map_keys(x)
Parameters
|
Parâmetro |
Descrição |
|
x |
O parâmetro deve ser um map. |
Return value type
array
Examples
Nos logs de transformação de dados do SLS, o campo etl_context é do tipo map. Use map_keys para extrair todas as chaves de etl_context.
-
Campo de exemplo
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" } -
Instrução de consulta e análise
* | SELECT map_keys(try_cast(json_parse(etl_context) AS map(varchar, varchar))) O resultado da consulta e análise é
["consumer","consumer_group","logstore","project","shard_id"].
Função map_values
A função map_values extrai todos os valores de um map e os retorna como um array.
Syntax
map_values(x)
Parameters
|
Parâmetro |
Descrição |
|
x |
O parâmetro deve ser um map. |
Return value type
array
Examples
Nos logs de transformação de dados do SLS, o campo etl_context é do tipo map. Use map_values para extrair todos os valores de etl_context.
-
Campo de exemplo
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" } -
Instrução de consulta e análise
* | SELECT map_values(try_cast(json_parse(etl_context) AS map(varchar, varchar))) O resultado é um array com todos os valores em
etl_context:["datalab-148****6461-cn-chengdu", "internal-etl-log", "etl-83****4d1965", "etl-b2d40ed****c8d6-291294", "0"].
Função multimap_agg
A função multimap_agg mapeia x e y em um map. Nesse map, x é a chave e y é o valor, representado como um array. Se existirem múltiplos valores de y para a mesma chave, todos serão coletados no array.
Syntax
multimap_agg(x, y)
Parameters
|
Parâmetro |
Descrição |
|
x |
O parâmetro pode ser de qualquer tipo de dados. |
|
y |
O parâmetro pode ser de qualquer tipo de dados. |
Return value type
map
Examples
Mapeie request_method (chave) para request_time (array de valores) usando multimap_agg.
-
Campos de exemplo
request_method:POST request_time:80 -
Instrução de consulta e análise
* | SELECT multimap_agg(request_method,request_time) O resultado mapeia cada método HTTP para um array de valores de
request_time. Por exemplo, DELETE mapeia para [28.0, 80.0, 21.0, 54.0, ...], POST mapeia para [77.0, 27.0, 52.0, 25.0, ...], e assim por diante.