¿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 tablaventas - Que “cliente activo” = clientes con compra en los últimos 90 días
- Que la tabla
dim_tiempose une conhechos_ventasporfecha_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.