Skip to main content
Data LoadJSONSnowflakeSQLUnstructured Data

Cómo usar FLATTEN en Snowflake para cargar datos JSON

By noviembre 17, 2023septiembre 8th, 2026No Comments

Hoy en día, gran parte de los datos que llegan a las plataformas analíticas no están completamente estructurados. APIs, logs, eventos y aplicaciones modernas suelen generar datos en formato JSON.

Aunque Snowflake soporta datos semiestructurados mediante el tipo VARIANT, trabajar con estructuras anidadas puede resultar complejo si queremos analizarlas de forma tabular.

Aquí es donde la función FLATTEN se vuelve esencial.

El reto de los datos JSON anidados

Un documento JSON puede tener estructuras como:

{

  «order_id»: 1001,

  «customer»: «John»,

  «items»: [

    {«product»: «Laptop», «price»: 1200},

    {«product»: «Mouse», «price»: 50}

  ]

}

Si almacenamos este JSON en Snowflake, el campo items contiene un array de objetos.

El problema es que los arrays no son directamente analizables en formato tabular.

Necesitamos transformarlos.

Cómo funciona FLATTEN

La función FLATTEN permite expandir arrays o estructuras anidadas en múltiples filas.

Esto convierte datos jerárquicos en formato relacional.

Ejemplo:

SELECT

    order_data:order_id AS order_id,

    item.value:product AS product,

    item.value:price AS price

FROM orders,

LATERAL FLATTEN(input => order_data:items) item;

Resultado:

order_id

product

price

1001

Laptop

1200

1001

Mouse

50

Cada elemento del array se convierte en una fila.

¿Qué es LATERAL FLATTEN?

La sintaxis completa suele incluir:

LATERAL FLATTEN(…)

Esto permite:

  • Iterar sobre arrays
  • Expandir estructuras
  • Generar filas adicionales

LATERAL indica que la función depende de la fila actual.

Columnas generadas por FLATTEN

FLATTEN genera varias columnas útiles:

Columna

Descripción

VALUE

Elemento actual del array

INDEX

Posición dentro del array

KEY

Nombre del campo

PATH

Ruta dentro del JSON

SEQ

Identificador interno

Estas columnas ayudan a navegar estructuras complejas.

Ejemplo práctico completo

Supongamos que tenemos una tabla:

CREATE TABLE raw_orders (

    data VARIANT

);

Consulta para expandir items:

SELECT

    data:order_id::INTEGER AS order_id,

    item.value:product::STRING AS product,

    item.value:price::FLOAT AS price

FROM raw_orders,

LATERAL FLATTEN(input => data:items) item;

Observa el uso de:

  • ::INTEGER
  • ::STRING
  • ::FLOAT

Esto convierte tipos correctamente.

FLATTEN con múltiples niveles

JSON complejos pueden tener arrays dentro de arrays.

Ejemplo:

{

  «order_id»: 1001,

  «items»: [

    {

      «product»: «Laptop»,

      «discounts»: [

        {«type»: «promo», «amount»: 50}

      ]

    }

  ]

}

Podemos aplicar FLATTEN múltiples veces.

Ejemplo:

SELECT

    order_data:order_id AS order_id,

    item.value:product AS product,

    discount.value:type AS discount_type

FROM orders,

LATERAL FLATTEN(input => order_data:items) item,

LATERAL FLATTEN(input => item.value:discounts) discount;

Esto permite navegar estructuras profundamente anidadas.

Uso en pipelines de ingestión

FLATTEN suele utilizarse en etapas de transformación:

  1. Ingesta de JSON bruto
  2. Expansión de estructuras
  3. Normalización en tablas
  4. Modelado analítico

Esto convierte datos semiestructurados en datasets utilizables.

Ventajas de trabajar con JSON en Snowflake

Snowflake permite:

  • Almacenar JSON sin esquema previo
  • Consultar datos directamente
  • Extraer campos específicos
  • Transformar datos gradualmente

Esto facilita ingestión rápida de datos externos.

Buenas prácticas

  • Convertir tipos explícitamente (::STRING, ::NUMBER)
  • Documentar rutas JSON
  • Evitar consultas excesivamente complejas
  • Crear tablas transformadas si el JSON es muy grande
  • Validar estructura antes de procesar

Errores comunes

  • Olvidar LATERAL
  • No convertir tipos correctamente
  • Usar rutas JSON incorrectas
  • Ignorar arrays vacíos
  • No optimizar consultas posteriores

Trabajar con JSON requiere precisión.

Conclusión

La función FLATTEN en Snowflake permite transformar estructuras JSON anidadas en formato tabular, facilitando su análisis y procesamiento. En entornos donde los datos provienen de APIs, eventos o sistemas modernos, dominar esta función es fundamental para convertir datos semiestructurados en datasets analíticos.

En arquitecturas modernas de datos, FLATTEN se convierte en una herramienta clave para integrar fuentes flexibles dentro de modelos analíticos estructurados.

 

Leave a Reply