半構造化データのクエリ

Snowflakeにおけるデータパイプラインの自動化

Emily Melhuish

Technical Curriculum Developer, Snowflake

半構造化データのロード

data loading.png

1 * Snowflake Learning Material
Snowflakeにおけるデータパイプラインの自動化

異なるデータ形式の管理

キャリア A キャリア A の JSON

キャリア B

キャリア B の JSON

Snowflakeにおけるデータパイプラインの自動化

変換の例

Screenshot 2026-05-11 at 5.56.34 pm.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 を直接ロード
  • データ構造はクエリ時に解決(スキーマオンリード)
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におけるデータパイプラインの自動化

演習に挑戦しましょう!

Snowflakeにおけるデータパイプラインの自動化

Preparing Video For Download...