Todos os produtos
Search
Central de documentação

Realtime Compute for Apache Flink:MULTI_KEYVALUE

Última atualização: Jun 27, 2026

A função de tabela MULTI_KEYVALUE extrai múltiplos valores de uma string formatada como chave-valor em uma única chamada. Ela divide a string em pares de chave-valor usando o delimitador especificado por split1. Em seguida, separa cada par em chave e valor com o delimitador definido em split2 e retorna os valores correspondentes às chaves solicitadas.

Há suporte para essa função no Realtime Compute for Apache Flink com Ververica Runtime (VVR) 3.0.0 ou posterior.

Sintaxe

MULTI_KEYVALUE(VARCHAR str, VARCHAR split1, VARCHAR split2, VARCHAR key_name1, VARCHAR key_name2, ...)

Como MULTI_KEYVALUE é uma função de tabela, invoque-a com um join lateral table:

SELECT c1, c2
FROM T1, lateral table(MULTI_KEYVALUE(str, split1, split2, key1, key2))
as T(c1, c2);

Parâmetros

Parâmetro

Tipo

Descrição

str

VARCHAR

String a ser analisada.

split1

VARCHAR

Delimitador dos pares de chave-valor. Se for NULL, espaços são utilizados. Quando o valor tem mais de um caractere, cada caractere é tratado individualmente como um delimitador válido.

split2

VARCHAR

Delimitador entre chave e valor. Caso seja NULL, espaços são usados. Se o valor exceder um caractere, cada caractere funciona independentemente como delimitador válido.

key_name1, key_name2, ...

VARCHAR

Chaves cujos valores devem ser retornados. Adicione quantos argumentos de chave forem necessários.

Quando usar KEYVALUE em vez disso

Aviso

No VVR 8.0.7 e versões anteriores, utilize a função escalar KEYVALUE no lugar de MULTI_KEYVALUE nas seguintes situações:

  • Todos os valores de split1, split2 e de cada argumento key_name são strings constantes.

  • Dentro de um namespace que executa uma versão específica do mecanismo, MULTI_KEYVALUE é chamado várias vezes com diferentes delimitadores split1 e split2, seja na mesma implantação ou em várias implantações. Ao analisar nomes de chave distintos do mesmo campo em chamadas repetidas, a função KEYVALUE permite que o Flink reutilize resultados intermediários de análise e aplique um mecanismo de análise binária, o que melhora a eficiência geral do processamento. Por ser uma função escalar, invoque KEYVALUE uma vez para cada chave.

Exemplo

Uso básico

Analise k1=v1;k2=v2 usando ; como delimitador de pares e = como delimitador de chave-valor:

-- Input: str = 'k1=v1;k2=v2', split1 = ';', split2 = '='
SELECT c1, c2
FROM T1, lateral table(MULTI_KEYVALUE(str, split1, split2, 'k1', 'k2'))
as T(c1, c2);
-- Output: c1 = 'v1', c2 = 'v2'

Referência de comportamento

A tabela a seguir ilustra como MULTI_KEYVALUE lida com diversas combinações de delimitadores e casos extremos. Todas as linhas utilizam a consulta mostrada acima na tabela T1.

Dados de teste (tabela T1)

str

split1

split2

key1

key2

k1=v1;k2=v2

;

=

k1

k2

NULL

;

=

k1

k2

k1:v1;k2:v2

;

:

k1

k3

k1:v1;k2:v2

;

=

k1

k2

k1:v1;k2:v2

,

:

k1

k2

k1:v1;k2=v2

;

:

k1

k2

k1:v1abck2:v2

abc

:

k1

k2

k1:v1;k2=v2

;

:=

k1

k2

k1:v1 k2:v2

NULL

:

k1

k2

k1 v1;k2 v2

;

NULL

k1

k2

Instrução de teste

SELECT c1, c2
FROM T1, lateral table(MULTI_KEYVALUE(str, split1, split2, key1, key2))
as T(c1, c2);

Resultados

c1

c2

v1

v2

NULL

NULL

v1

NULL

NULL

NULL

NULL

NULL

v1

NULL

v1

v2

v1

v2

v1

v2

v1

v2

Principais observações sobre os resultados:

  • Linha 2: como str é NULL, todos os valores de saída resultam em NULL.

  • Linha 3: a chave k3 não existe na string, portanto c2 retorna NULL.

  • Linha 4: o delimitador real é :, mas split2 está definido como =. Sem correspondência, ambas as saídas são NULL.

  • Linha 5: o delimitador de pares real é ;, porém split1 é ,. Não há correspondência, logo as duas saídas são NULL.

  • Linha 6: split2 = ':' corresponde a k1:v1, mas não a k2=v2. Assim, c1 = 'v1' e c2 = NULL.

  • Linha 7: como split1 = 'abc' possui mais de um caractere, a, b e c funcionam como delimitadores independentes, dividindo corretamente k1:v1abck2:v2.

  • Linha 8: dado que split2 = ':=' tem mais de um caractere, tanto : quanto = atuam como delimitadores válidos de chave-valor, encontrando correspondência em k1:v1 e k2=v2.

  • Linhas 9–10: delimitadores NULL assumem espaço como padrão.