JSON_TUPLE es una función con valor de tabla que extrae varios valores de una cadena JSON en una sola pasada. A diferencia de las funciones escalares como GET_JSON_OBJECT o JSON_VALUE, que devuelven un solo valor por llamada, JSON_TUPLE acepta uno o más argumentos de ruta y genera una fila de salida por cada argumento. Utilícela con una unión LATERAL TABLE para expandir esas filas en su conjunto de resultados.
Requisito de versión
Ververica Runtime (VVR) 3.0.0+
Sintaxis
JSON_TUPLE(str, path1, path2, ..., pathN)
Parámetros
|
Parámetro |
Tipo |
Obligatorio |
Descripción |
|
|
VARCHAR |
Sí |
Cadena JSON de la cual se extraen los valores. |
|
|
VARCHAR |
Sí |
Una o más rutas de clave que identifican los valores a extraer de |
Notas de uso
La sintaxis de ruta no sigue la notación estándar de JSONPath; omita el
$inicial requerido por dicho estándar.Los argumentos de ruta pueden ser literales de cadena (
'myKey') o referencias a columnas que se resuelvan como VARCHAR en tiempo de ejecución.Si no se encuentra una ruta en el JSON de entrada, la columna de salida correspondiente será NULL.
Si
stres NULL, el comportamiento depende de la versión de VVR. Consulte Cambio de comportamiento en el manejo de valores NULL.
Ejemplos
-
Datos de muestra
Tabla T1. T1
d (VARCHAR)
s (VARCHAR)
{"qwe":"asd","qwe2":"asd2","qwe3":"asd3"}qwe3
{"qwe":"asd4","qwe2":"asd5","qwe3":"asd3"}qwe2
-
Ejemplo
La consulta a continuación extrae dos valores por fila de la columna
d: el valor de la clave literal'qwe'y el valor de la clave especificada en la columnas(referencia a columna). Como hay dos argumentos de ruta,JSON_TUPLEproduce dos filas de salida por cada fila de entrada.SELECT d, v FROM T1, lateral table(JSON_TUPLE(d, 'qwe', s)) AS T(v); -
Salida
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
Manejo de valores NULL: cambio de comportamiento
El comportamiento de JSON_TUPLE cuando str es NULL cambió entre versiones de VVR. Si su trabajo se desarrolló antes de VVR 11.0 y depende del comportamiento anterior, revise la comparación a continuación.
Comparación de comportamientos
Considere la consulta a continuación, where el argumento str es 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)
|
Versión de VVR |
Resultado |
Contenido |
|
Anterior a VVR 11.0 (comportamiento heredado) |
Cuatro filas en total (dos por fila de entrada, una por argumento de ruta) |
Cada fila contiene una columna NULL |
|
VVR 11.0+ (nuevo comportamiento) |
Cero filas (conjunto vacío) |
Ninguna |