Query sui dati semi-strutturati

Automazione delle pipeline di dati in Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Caricamento di dati semi-strutturati

caricamento dati.png

1 * Snowflake Learning Material
Automazione delle pipeline di dati in Snowflake

Gestire forme di dati diverse

Vettore A JSON vettore A

Vettore B

JSON vettore B

Automazione delle pipeline di dati in Snowflake

Esempio di trasformazione

Screenshot 2026-05-11 at 5.56.34 pm.png

Automazione delle pipeline di dati in Snowflake

Tipi di dati Snowflake

Categoria Tipi Esempio
Numerico NUMBER, INT, FLOAT credits_used NUMBER(10,2)
Testo VARCHAR, STRING, TEXT carrier_name VARCHAR
Data / Ora DATE, TIME, TIMESTAMP dispatch_date DATE
Booleano BOOLEAN is_active BOOLEAN
Semi-strutturato VARIANT, OBJECT, ARRAY event_payload VARIANT
Automazione delle pipeline di dati in Snowflake

Il tipo VARIANT

  • VARIANT archivia dati semi-strutturati così come sono: nessuno schema richiesto
  • Carica direttamente JSON, Parquet, Avro, ORC o XML
  • La struttura si risolve al momento della query, non del caricamento (schema-on-read)
COPY INTO shipment_events
FROM @harbr_stage/events/
FILE_FORMAT = (TYPE = 'JSON');

Nuvola di parole VARIANT che mostra tutti i tipi di dati semi-strutturati supportati da VARIANT: JSON, ARRAY, OBJECT, AVRO, PARQUET, SEMI-STRUCTURED

Automazione delle pipeline di dati in Snowflake

Navigare nel JSON

Esempio JSON

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

Navigare nel JSON

Attraversare la struttura:

<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;
Automazione delle pipeline di dati in Snowflake

Convertire array in righe con FLATTEN

Flatten.png

Automazione delle pipeline di dati in Snowflake

Uso di 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

Automazione delle pipeline di dati in Snowflake

Ayo berlatih!

Automazione delle pipeline di dati in Snowflake

Preparing Video For Download...