Consulta de dados semiestruturados

Automação de Pipelines de Dados no Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Carregando dados semiestruturados

carregamento de dados.png

1 * Snowflake Learning Material
Automação de Pipelines de Dados no Snowflake

Gerenciando formatos de dados diferentes

Transportadora A JSON da Transportadora A

Transportadora B

JSON da Transportadora B

Automação de Pipelines de Dados no Snowflake

Exemplo de transformação

Captura de tela 2026-05-11 às 17:56.png

Automação de Pipelines de Dados no Snowflake

Tipos de dados do Snowflake

Categoria Tipos Exemplo
Numérico NUMBER, INT, FLOAT credits_used NUMBER(10,2)
Texto VARCHAR, STRING, TEXT carrier_name VARCHAR
Data / Hora DATE, TIME, TIMESTAMP dispatch_date DATE
Booleano BOOLEAN is_active BOOLEAN
Semiestruturado VARIANT, OBJECT, ARRAY event_payload VARIANT
Automação de Pipelines de Dados no Snowflake

O tipo VARIANT

  • VARIANT armazena dados semiestruturados como estão: sem schema obrigatório
  • Carregue JSON, Parquet, Avro, ORC ou XML direto
  • A estrutura é resolvida na consulta, não no carregamento (schema-on-read)
COPY INTO shipment_events
FROM @harbr_stage/events/
FILE_FORMAT = (TYPE = 'JSON');

Nuvem de palavras do VARIANT mostrando todos os tipos semiestruturados que ele comporta: JSON, ARRAY, OBJECT, AVRO, PARQUET, SEMI-STRUCTURED

Automação de Pipelines de Dados no Snowflake

Navegando em JSON

JSON de exemplo

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

Navegando em JSON

Percorrendo a estrutura:

<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;
Automação de Pipelines de Dados no Snowflake

Transformando arrays em linhas com FLATTEN

Flatten.png

Automação de Pipelines de Dados no Snowflake

Usando 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

Automação de Pipelines de Dados no Snowflake

Vamos praticar!

Automação de Pipelines de Dados no Snowflake

Preparing Video For Download...