Tengo un JSON que empieza con un array y no logro consultarlo.
JSON tiene este formato:
[
{"@id":1,
"field1":"qwerty",
"@field2":{"name":"my_name", "name2":"my_name_2"},
"field3":{"event":[{"event_type":"OP",...}]}
},
{"@id":2..
}
]
¿Alguna sugerencia sobre cómo consultar esto?
Si intento usar el aplanamiento lateral no sé qué tecla usar:
select
'???'.Value:@id::string as id
from tabl1
,lateral flatten (tabl1_GB_RECORD:???) as gb_record
¿Puedes compartir con nosotros qué has probado y qué intentas obtener de tus consultas?
- George Neto
26/03/2021 a las 22:48
Estoy intentando consultar los valores de @id, campo1. Intenté utilizar el aplanamiento lateral pero no funciona; probablemente lo esté haciendo mal.
- i_am_cris
26/03/2021 a las 22:58
------------------------------------
Su SQL estaba cerca pero no completo, lo siguiente le dará valores @id
with tbl1 (v) as (
select parse_json('
[
{"@id":1,
"field1":"qwerty",
"@field2":{"name":"my_name", "name2":"my_name_2"},
"field3":{"event":[{"event_type":"OP"}]}
},
{"@id":2
}
]')
)
select t.value:"@id" id from tbl1
, lateral flatten (input => v) as t
Resultado:
id
___
1
2
Avísame si tienes alguna otra pregunta
1
Gracias. No sabía nada de la "entrada". Funciona bien.
- i_am_cris
27 de marzo de 2021 a las 7:20
------------------------------------
Aprovechas el campo que deseas aplanar cuando el json comienza con una matriz. Algo parecido a esto:
WITH x AS (
SELECT parse_json('[
{"@id":1,
"field1":"qwerty",
"@field2":{"name":"my_name", "name2":"my_name_2"},
"field3":{"event":[{"event_type":"OP"}]}
},
{"@id":2,
"field1":"qwerty",
"@field2":{"name":"my_name", "name2":"my_name_2"},
"field3":{"event":[{"event_type":"OP"}]}
}
]') as json_data
)
SELECT y.value,
y.value:"@id"::number as id,
y.value:field1::string as field1,
y.value:"@field2"::variant as field2,
y.value:field3::variant as field3,
y.value:"@field2":name::varchar as name
FROM x,
LATERAL FLATTEN (input=>json_data) y;
4
Gracias. No sabía nada de la "entrada". Funciona bien.
- i_am_cris
27 de marzo de 2021 a las 7:20
¿Qué pasa si quiero seleccionar el "nombre" ¿De @field2?
- i_am_cris
27 de marzo de 2021 a las 9:28
@Cristian He modificado el código anterior para incluir la selección del "nombre" para ti.
– Mike Walton
27/03/2021 a las 16:04
¡Gracias @mike! Funciona perfecto. También agregué otra opción "aplanar más tarde". porque hay otra matriz. Todo funciona bien.
- i_am_cris
27/03/2021 a las 22:12