plataforma de datos en la nube copo de nieve: consulta de json que comienza con una matriz

CorePress2024-01-24  10

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

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare