Todos los productos
Search
Centro de documentos

Realtime Compute for Apache Flink:MULTI_KEYVALUE

Última actualización: Sep 03, 2026

MULTI_KEYVALUE es una función de tabla que extrae varios valores de una cadena con formato de clave-valor en una sola llamada. Esta función divide la cadena en pares de clave-valor mediante el delimitador especificado por split1, separa cada par en una clave y un valor con el delimitador indicado por split2 y devuelve los valores correspondientes a las claves solicitadas.

Compatible con Realtime Compute for Apache Flink a partir de Ververica Runtime (VVR) 3.0.0.

Sintaxis

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

Dado que MULTI_KEYVALUE es una función de tabla, debe invocarse mediante una unión 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

Descripción

str

VARCHAR

La cadena que se va a analizar sintácticamente.

split1

VARCHAR

El delimitador de pares de clave-valor. Si es NULL, se utilizan espacios. Si el valor tiene más de un carácter, cada uno se considera un delimitador válido de forma independiente.

split2

VARCHAR

El delimitador entre clave y valor. Si es NULL, se utilizan espacios. Si el valor tiene más de un carácter, cada uno se considera un delimitador válido de forma independiente.

key_name1, key_name2, ...

VARCHAR

Las claves cuyos valores se desean obtener. Agregue tantos argumentos de clave como sean necesarios.

Cuándo utilizar KEYVALUE en su lugar

Aviso

En VVR 8.0.7 y versiones anteriores, utilice la función escalar KEYVALUE en lugar de MULTI_KEYVALUE en cualquiera de las siguientes situaciones:

  • Todos los valores de split1, split2 y cada argumento key_name son cadenas constantes.

  • Dentro de un espacio de nombres que ejecuta una versión específica del motor, MULTI_KEYVALUE se invoca varias veces con distintos delimitadores split1 y split2, ya sea en el mismo despliegue o en varios. Cuando KEYVALUE analiza diferentes nombres de clave del mismo campo en llamadas repetidas, Flink reutiliza los resultados intermedios del análisis y aplica un mecanismo de análisis binario, lo que mejora la eficiencia general del procesamiento. Dado que KEYVALUE es una función escalar, debe invocarse una vez por cada clave.

Ejemplo

Uso básico

Analice sintácticamente k1=v1;k2=v2 con ; como delimitador de pares y = como delimitador de clave-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'

Referencia de comportamiento

A continuación se muestra cómo MULTI_KEYVALUE maneja diversas combinaciones de delimitadores y casos límite. Todas las filas utilizan la consulta mostrada anteriormente sobre la tabla T1.

Datos de prueba (tabla 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

Instrucción de prueba

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

Observaciones clave sobre los resultados:

  • Fila 2: str es NULL, por lo que todos los valores de salida son NULL.

  • Fila 3: la clave k3 no existe en la cadena, así que c2 es NULL.

  • Fila 4: el delimitador real es :, pero split2 es =. Al no haber coincidencia, ambas salidas son NULL.

  • Fila 5: el delimitador real de pares es ;, pero split1 es ,. Al no haber coincidencia, ambas salidas son NULL.

  • Fila 6: split2 = ':' coincide con k1:v1, pero no con k2=v2. Por tanto, c1 = 'v1' y c2 = NULL.

  • Fila 7: split1 = 'abc' tiene más de un carácter, por lo que a, b y c se tratan como delimitadores independientes, lo que permite dividir correctamente k1:v1abck2:v2.

  • Fila 8: split2 = ':=' tiene más de un carácter, así que tanto : como = son delimitadores válidos de clave-valor, lo que permite coincidir con k1:v1 y k2=v2.

  • Filas 9–10: los delimitadores NULL toman el espacio como valor predeterminado.