Abfragen halbstrukturierter Daten

Automatisierung von Datenpipelines in Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Laden halbstrukturierter Daten

Datenladen.png

1 * Snowflake Lernmaterial
Automatisierung von Datenpipelines in Snowflake

Unterschiedliche Datenschemata handhaben

Carrier A Carrier A JSON

Carrier B

Carrier B JSON

Automatisierung von Datenpipelines in Snowflake

Transformationsbeispiel

Screenshot 2026-05-11 at 5.56.34 pm.png

Automatisierung von Datenpipelines in Snowflake

Snowflake-Datentypen

Kategorie Typen Beispiel
Numerisch NUMBER, INT, FLOAT credits_used NUMBER(10,2)
Text VARCHAR, STRING, TEXT carrier_name VARCHAR
Datum/Zeit DATE, TIME, TIMESTAMP dispatch_date DATE
Boolean BOOLEAN is_active BOOLEAN
Halbstrukturiert VARIANT, OBJECT, ARRAY event_payload VARIANT
Automatisierung von Datenpipelines in Snowflake

Der Typ VARIANT

  • VARIANT speichert halbstrukturierte Daten unverändert: kein Schema nötig
  • JSON, Parquet, Avro, ORC oder XML direkt laden
  • Struktur wird zur Abfragezeit aufgelöst, nicht beim Laden (Schema-on-Read)
COPY INTO shipment_events
FROM @harbr_stage/events/
FILE_FORMAT = (TYPE = 'JSON');

VARIANT-Wortwolke mit allen von VARIANT gehaltenen halbstrukturierten Typen: JSON, ARRAY, OBJECT, AVRO, PARQUET, SEMI-STRUCTURED

Automatisierung von Datenpipelines in Snowflake

JSON navigieren

Beispiel-JSON

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

JSON navigieren

Struktur durchlaufen:

<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;
Automatisierung von Datenpipelines in Snowflake

Arrays mit FLATTEN in Zeilen umwandeln

Flatten.png

Automatisierung von Datenpipelines in Snowflake

LATERAL FLATTEN verwenden

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

Automatisierung von Datenpipelines in Snowflake

Lass uns üben!

Automatisierung von Datenpipelines in Snowflake

Preparing Video For Download...