Consulta de datos semiestructurados

Automatización de canalizaciones de datos en Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Carga de datos semiestructurados

carga de datos.png

1 * Snowflake Learning Material
Automatización de canalizaciones de datos en Snowflake

Gestionar distintas formas de datos

Transportista A JSON del transportista A

Transportista B

JSON del transportista B

Automatización de canalizaciones de datos en Snowflake

Ejemplo de transformación

Captura de pantalla 2026-05-11 a las 17:56.png

Automatización de canalizaciones de datos en Snowflake

Tipos de datos de Snowflake

Categoría Tipos Ejemplo
Numérico NUMBER, INT, FLOAT credits_used NUMBER(10,2)
Texto VARCHAR, STRING, TEXT carrier_name VARCHAR
Fecha / Hora DATE, TIME, TIMESTAMP dispatch_date DATE
Booleano BOOLEAN is_active BOOLEAN
Semiestructurado VARIANT, OBJECT, ARRAY event_payload VARIANT
Automatización de canalizaciones de datos en Snowflake

El tipo VARIANT

  • VARIANT guarda datos semiestructurados tal cual: sin esquema
  • Carga JSON, Parquet, Avro, ORC o XML directamente
  • La estructura se resuelve en el momento de la consulta, no al cargar (schema-on-read)
COPY INTO shipment_events
FROM @harbr_stage/events/
FILE_FORMAT = (TYPE = 'JSON');

Nube de palabras de VARIANT que muestra los tipos semiestructurados que contiene: JSON, ARRAY, OBJECT, AVRO, PARQUET, SEMI-STRUCTURED

Automatización de canalizaciones de datos en Snowflake

Navegar JSON

JSON de ejemplo

{
  "shipment_id": "SHP-001",
  "carrier": { "name": "FastFreight" },
  "stops": [
    { "location": "Rotterdam Port" },
    { "location": "Amsterdam Hub" }
  ]
}

Navegar JSON

Recorrer la estructura:

<column>:<level1_element>.<level2_element>

SELECT 
event:id::STRING AS shipment_id
, event:carrier.name::STRING AS carrier
, event:stops[0]:location::STRING 
AS first_stop 
FROM shipment_events;
Automatización de canalizaciones de datos en Snowflake

Convertir arrays en filas con FLATTEN

Flatten.png

Automatización de canalizaciones de datos en Snowflake

Usar LATERAL FLATTEN

SELECT 
  s.event_data:shipment_id::STRING AS shipment_id,
  f.value:location::STRING AS stop,
  f.value:arrived_at::TIMESTAMP AS arrived_at 
FROM shipment_events s,
  LATERAL FLATTEN(input => s.event_data:stops) f;

Flatten.png

Automatización de canalizaciones de datos en Snowflake

¡Vamos a practicar!

Automatización de canalizaciones de datos en Snowflake

Preparing Video For Download...