JSON_TUPLE est une fonction tabulaire qui extrait plusieurs valeurs d'une chaîne JSON en un seul passage. Contrairement aux fonctions scalaires telles que GET_JSON_OBJECT ou JSON_VALUE, qui renvoient une seule valeur par appel, JSON_TUPLE accepte un ou plusieurs arguments de chemin et génère une ligne de sortie par argument. Utilisez cette fonction avec une jointure LATERAL TABLE pour intégrer ces lignes à votre ensemble de résultats.
Prérequis de version
Ververica Runtime (VVR) 3.0.0+
Syntaxe
JSON_TUPLE(str, path1, path2, ..., pathN)
Paramètres
|
Paramètre |
Type |
Obligatoire |
Description |
|
|
VARCHAR |
Oui |
La chaîne JSON à partir de laquelle extraire les valeurs. |
|
|
VARCHAR |
Oui |
Un ou plusieurs chemins de clé identifiant les valeurs à extraire de |
Notes d'utilisation
La syntaxe de chemin ne suit pas la notation standard JSONPath : omettez le caractère
$initial requis par la norme JSONPath.Les arguments de chemin peuvent être des littéraux de chaîne (
'myKey') ou des références de colonne résolues en VARCHAR au moment de l'exécution.Si un chemin est introuvable dans le code JSON d'entrée, la colonne de sortie correspondante prend la valeur NULL.
Si
stra la valeur NULL, le comportement dépend de la version de VVR. Consultez la section Modification du comportement de gestion des valeurs NULL.
Exemples
-
Données d'exemple
Table T1. T1
d (VARCHAR)
s (VARCHAR)
{"qwe":"asd","qwe2":"asd2","qwe3":"asd3"}qwe3
{"qwe":"asd4","qwe2":"asd5","qwe3":"asd3"}qwe2
-
Exemple
La requête suivante extrait deux valeurs par ligne depuis la colonne
d: la valeur associée à la clé littérale'qwe'et la valeur associée à la clé nommée par la colonnes(référence de colonne). Comme il y a deux arguments de chemin,JSON_TUPLEgénère deux lignes de sortie pour chaque ligne d'entrée.SELECT d, v FROM T1, lateral table(JSON_TUPLE(d, 'qwe', s)) AS T(v); -
Résultat
d (VARCHAR)
v (VARCHAR)
{"qwe":"asd","qwe2":"asd2","qwe3":"asd3"}asd
{"qwe":"asd","qwe2":"asd2","qwe3":"asd3"}asd3
{"qwe":"asd4","qwe2":"asd5","qwe3":"asd3"}asd4
{"qwe":"asd4","qwe2":"asd5","qwe3":"asd3"}asd5
Gestion des valeurs NULL : modification du comportement
Le comportement de JSON_TUPLE lorsque str est NULL a évolué entre les versions de VVR. Si votre job a été développé avant VVR 11.0 et repose sur l'ancien comportement, examinez la comparaison ci-dessous.
Comparaison des comportements
Prenons la requête suivante, où l'argument str est NULL :
SELECT * FROM (VALUES (1), (2)) AS v(x)
, LATERAL TABLE(
json_tuple(CAST(NULL AS STRING), 'a', 'b')
) AS T;
-- Each input row returns two rows with NULL. Total: 4 rows — (1,null), (1,null), (2,null), (2,null)
|
Version VVR |
Résultat |
Contenu |
|
Avant VVR 11.0 (ancien comportement) |
Quatre lignes au total (deux par ligne d'entrée, une par argument de chemin) |
Chaque ligne contient une colonne NULL |
|
VVR 11.0+ (nouveau comportement) |
Zéro ligne (ensemble vide) |
Aucun |