Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:MULTI_KEYVALUE

Dernière mise à jour :Aug 09, 2026

MULTI_KEYVALUE est une fonction de table qui extrait plusieurs valeurs d'une chaîne au format clé-valeur en un seul appel. Elle fractionne la chaîne en paires clé-valeur selon le délimiteur indiqué par split1, sépare chaque paire en clé et valeur selon le délimiteur indiqué par split2, puis renvoie les valeurs des clés demandées.

Fonction prise en charge dans Realtime Compute for Apache Flink avec Ververica Runtime (VVR) 3.0.0 ou version ultérieure.

Syntaxe

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

Comme MULTI_KEYVALUE est une fonction de table, utilisez une jointure lateral table pour l'appeler :

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

Paramètres

Paramètre Type Description
str VARCHAR Chaîne à analyser.
split1 VARCHAR Délimiteur des paires clé-valeur. Si la valeur est NULL, des espaces sont utilisés. Si la chaîne contient plusieurs caractères, chacun est traité indépendamment comme un délimiteur valide.
split2 VARCHAR Délimiteur entre la clé et la valeur. Si la valeur est NULL, des espaces sont utilisés. Si la chaîne contient plusieurs caractères, chacun est traité indépendamment comme un délimiteur valide.
key_name1, key_name2, ... VARCHAR Clés dont les valeurs doivent être renvoyées. Ajoutez autant d'arguments de clé que nécessaire.

Quand utiliser KEYVALUE à la place

Avertissement

Dans VVR 8.0.7 et versions antérieures, privilégiez la fonction scalaire KEYVALUE à MULTI_KEYVALUE dans les cas suivants :

  • Les arguments split1, split2 et tous les arguments key_name sont des constantes.

  • Au sein d'un namespace exécutant une version spécifique du moteur, MULTI_KEYVALUE est appelée plusieurs fois avec des délimiteurs split1 et split2 différents, que ce soit dans le même déploiement ou sur plusieurs déploiements. Lorsque KEYVALUE analyse différents noms de clés à partir du même champ lors d'appels répétés, Flink réutilise les résultats d'analyse intermédiaires et applique un mécanisme d'analyse binaire, ce qui améliore l'efficacité globale du traitement. Comme KEYVALUE est une fonction scalaire, appelez-la une fois par clé.

Exemple

Utilisation de base

Analysez la chaîne k1=v1;k2=v2 en utilisant ; comme délimiteur de paire et = comme délimiteur clé-valeur :

-- 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'

Référence des comportements

Le tableau suivant illustre la gestion par MULTI_KEYVALUE de diverses combinaisons de délimiteurs et de cas limites. Toutes les lignes utilisent la requête présentée ci-dessus appliquée à la table T1.

Données de test (table 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

Instruction de test

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

Résultats

c1 c2
v1 v2
NULL NULL
v1 NULL
NULL NULL
NULL NULL
v1 NULL
v1 v2
v1 v2
v1 v2
v1 v2

Observations clés tirées des résultats :

  • Ligne 2 : str vaut NULL ; toutes les valeurs de sortie sont donc NULL.

  • Ligne 3 : la clé k3 est absente de la chaîne ; par conséquent, c2 vaut NULL.

  • Ligne 4 : le délimiteur réel est :, mais split2 est défini sur = ; aucune correspondance n'est trouvée et les deux sorties sont NULL.

  • Ligne 5 : le délimiteur de paire réel est ;, alors que split1 vaut , ; aucune correspondance n'est trouvée et les deux sorties sont NULL.

  • Ligne 6 : split2 = ':' correspond à k1:v1 mais pas à k2=v2 ; ainsi, c1 = 'v1' et c2 = NULL.

  • Ligne 7 : split1 = 'abc' contient plusieurs caractères, si bien que a, b et c sont chacun traités comme des délimiteurs indépendants, ce qui permet de scinder correctement k1:v1abck2:v2.

  • Ligne 8 : split2 = ':=' contient plusieurs caractères, de sorte que : et = sont tous deux considérés comme des délimiteurs clé-valeur valides, permettant de faire correspondre k1:v1 et k2=v2.

  • Lignes 9 à 10 : les délimiteurs NULL prennent par défaut la valeur espace.