Avanzado 3 min de lectura

Cortex Analyst y la Capa Semántica

Implementa texto a SQL con Cortex Analyst. Aprende a diseñar un Semantic Model en YAML que describe tus datos en términos de negocio para consultas en lenguaje natural.

¿Qué es Cortex Analyst?

Cortex Analyst permite que usuarios de negocio hagan preguntas en lenguaje natural sobre datos estructurados y obtengan SQL generado automáticamente.

La clave es el Semantic Model: un archivo YAML que describe las tablas, columnas, métricas y relaciones en términos de negocio.

¿Por qué necesitas una Capa Semántica?

Sin una capa semántica, un LLM no sabe:

  • Que “ingresos” = SUM(precio * cantidad) en tu tabla ventas
  • Que “cliente activo” = clientes con compra en los últimos 90 días
  • Que la tabla dim_tiempo se une con hechos_ventas por fecha_id

El Semantic Model le da este contexto al LLM.

Estructura del Semantic Model

# semantic_model.yaml
name: modelo_ventas
description: "Modelo semántico para análisis de ventas"

tables:
  - name: ventas
    description: "Tabla de hechos de ventas transaccionales"
    base_table:
      database: mi_bd
      schema: analytics
      table: FCT_VENTAS

    dimensions:
      - name: producto
        synonyms: ["artículo", "item", "SKU"]
        description: "Nombre del producto vendido"
        expr: nombre_producto
        data_type: TEXT

      - name: region
        description: "Región geográfica de la venta"
        expr: region
        data_type: TEXT

      - name: fecha_venta
        description: "Fecha en que se realizó la venta"
        expr: fecha_venta
        data_type: DATE

    measures:
      - name: ingresos
        synonyms: ["ventas", "revenue", "total vendido"]
        description: "Suma del ingreso total de ventas"
        expr: SUM(precio_unitario * cantidad)
        data_type: NUMBER

      - name: unidades_vendidas
        synonyms: ["cantidad", "unidades"]
        description: "Total de unidades vendidas"
        expr: SUM(cantidad)
        data_type: NUMBER

      - name: ticket_promedio
        description: "Ingreso promedio por transacción"
        expr: AVG(precio_unitario * cantidad)
        data_type: NUMBER

    filters:
      - name: ventas_completadas
        description: "Solo ventas con estado completado"
        expr: estado = 'COMPLETADO'

Crear el Semantic Model en Snowflake

-- Subir el YAML a un stage
PUT file://semantic_model.yaml @mi_stage AUTO_COMPRESS=FALSE;

-- Crear el Cortex Analyst service
CREATE CORTEX ANALYST SERVICE mi_analista
  SEMANTIC_MODEL_FILE = '@mi_stage/semantic_model.yaml';

Hacer consultas en lenguaje natural

# Via Python (Snowpark)
import snowflake.snowpark as snowpark

response = session.sql("""
    SELECT SNOWFLAKE.CORTEX.ANALYST(
        'mi_analista',
        '¿Cuáles fueron los 5 productos con más ingresos en el último trimestre?'
    )
""").collect()

print(response[0][0])  # Muestra el SQL generado y el resultado
-- O directamente en SQL
SELECT SNOWFLAKE.CORTEX.ANALYST(
    'mi_analista',
    '¿Cómo fueron las ventas en México comparado con Colombia este año?'
);

Verified Query Representations (VQR)

Los VQR son pares de pregunta + SQL verificado manualmente. Le dicen a Cortex Analyst exactamente cómo responder preguntas comunes.

# En el semantic_model.yaml
verified_queries:
  - name: top_productos_mes
    question: "¿Cuáles son los 10 productos más vendidos este mes?"
    verified_at: "2026-01-15"
    sql: >
      SELECT nombre_producto, SUM(cantidad) AS unidades
      FROM analytics.fct_ventas
      WHERE DATE_TRUNC('month', fecha_venta) = DATE_TRUNC('month', CURRENT_DATE())
      GROUP BY 1
      ORDER BY 2 DESC
      LIMIT 10

Deployment con Streamlit

import streamlit as st
from snowflake.snowpark.context import get_active_session

session = get_active_session()

st.title("Asistente de Ventas")
pregunta = st.text_input("Haz una pregunta sobre las ventas:")

if pregunta:
    resultado = session.sql(f"""
        SELECT SNOWFLAKE.CORTEX.ANALYST('mi_analista', '{pregunta}')
    """).collect()[0][0]
    st.write(resultado)

Casos de uso reales

  • CFO asks: “¿Cuánto vendimos en LATAM el Q3?”
  • CMO asks: “¿Qué campaña tuvo mejor ROI este año?”
  • Operations: “¿Qué regiones están por debajo del objetivo?”

La capa semántica es lo que diferencia un chatbot de datos real de un simple wrapper de LLM.

#cortex-analyst #semantic-model #text-to-sql #nlp #capa-semantica