Запити до напівструктурованих даних

Автоматизація конвеєрів даних у Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Завантаження напівструктурованих даних

завантаження даних.png

1 * Навчальні матеріали Snowflake
Автоматизація конвеєрів даних у Snowflake

Керування різними формами даних

Carrier A JSON перевізника A

Carrier B

JSON перевізника B

Автоматизація конвеєрів даних у Snowflake

Приклад трансформації

Знімок екрана 2026-05-11 о 17:56.png

Автоматизація конвеєрів даних у Snowflake

Типи даних Snowflake

Категорія Типи Приклад
Числові NUMBER, INT, FLOAT credits_used NUMBER(10,2)
Текстові VARCHAR, STRING, TEXT carrier_name VARCHAR
Дата/час DATE, TIME, TIMESTAMP dispatch_date DATE
Булеві BOOLEAN is_active BOOLEAN
Напівструктуровані VARIANT, OBJECT, ARRAY event_payload VARIANT
Автоматизація конвеєрів даних у Snowflake

Тип VARIANT

  • VARIANT зберігає напівструктуровані дані як є: схема не потрібна
  • Завантажуйте JSON, Parquet, Avro, ORC або XML напряму
  • Структуру визначають під час запиту, не під час завантаження (schema-on-read)
COPY INTO shipment_events
FROM @harbr_stage/events/
FILE_FORMAT = (TYPE = 'JSON');

Хмаринка слів VARIANT із типами напівструктурованих даних: JSON, ARRAY, OBJECT, AVRO, PARQUET, SEMI-STRUCTURED

Автоматизація конвеєрів даних у Snowflake

Навігація в JSON

Приклад JSON

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

Навігація в JSON

Прохід по структурі:

<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;
Автоматизація конвеєрів даних у Snowflake

Перетворення масивів у рядки з FLATTEN

Flatten.png

Автоматизація конвеєрів даних у Snowflake

Використання 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

Автоматизація конвеєрів даних у Snowflake

Aймо практикуватися!

Автоматизація конвеєрів даних у Snowflake

Preparing Video For Download...