Saltar al contenido
Lakehouse LabLakehouse LabPreparación Databricks Data Engineer
Módulo 25 · Professional

FinOps

Contenido abierto

Puedes leer todo sin registrarte. Solo crearemos un perfil anónimo cuando decidas guardar tu progreso.

Professional

Compute, políticas, etiquetas y costes

Atribuye consumo, controla guardrails y optimiza coste sin degradar el valor del workload.

Lectura pública
Al terminar podrás
  • Consultar costes con system tables
  • Etiquetar y atribuir consumo
  • Elegir modos serverless y políticas
Ver fuentes y revisión

Metadatos editoriales

Última revisión
21 jul 2026
Nivel
Professional
Ruta relacionada
performance
Dominios blueprint
Cost optimization · System tables
Estado
Revisión editorial interna
Fuentes principales
Compute selection recommendations · Best practices for serverless compute
Reportar un error
01
Modelo mental

DBUs, SKUs y coste cloud

Elige serverless, SQL warehouse o compute clásico según APIs, latencia, control de infraestructura y patrón operativo.

Objetivo
Elige serverless, SQL warehouse o compute clásico según APIs, latencia, control de infraestructura y patrón operativo.
Duración estimada
17 min aprox.
Dificultad
Professional
Prerrequisitos
m24
Reportar un error en esta lección

Databricks recomienda serverless para la mayoría de notebooks, jobs y pipelines porque administra aprovisionamiento, escalado, Photon y actualizaciones. Un SQL warehouse serverless sirve BI y SQL; jobs serverless sirve tareas automatizadas sin configurar clúster. Compute clásico sigue siendo válido cuando una API, runtime, red o configuración especializada no está soportada en serverless.

La decisión se toma por requisito, no por preferencia histórica. Define SLA de arranque y ejecución, lenguaje, librerías, conectividad y observabilidad disponible. En serverless no hay Spark UI: se usa Query Profile. En clásico controlas familias y autoscaling, pero también capacidad, parches y tiempo ocioso. Evita all-purpose para producción automatizada salvo una excepción explícita.

Modelo mental

Elegir compute es elegir un contrato operativo, no una talla de máquina. Serverless entrega capacidad gestionada con arranque, escalado y actualizaciones abstraídos; un SQL warehouse ofrece un endpoint gobernado y concurrente para SQL y BI; el compute clásico expone familias de instancia, driver, workers, runtime y políticas para workloads que necesitan ese control. Las tres opciones ejecutan trabajo, pero difieren en APIs admitidas, aislamiento, latencia de preparación, responsabilidad de operación y forma de facturación. El punto de partida son las propiedades del workload: lenguaje, estado, duración, concurrencia, dependencias, red privada, previsibilidad y SLA. La preferencia personal por un tipo de clúster no es un requisito técnico.

Contrato de compute

Conjunto de capacidades, límites y responsabilidades operativas asociado a una modalidad de ejecución.

Evita elegir sólo por nombre o precio cuando una API, red o dependencia puede bloquear el workload.
SQL warehouse

Recurso de compute orientado a consultas SQL, BI y concurrencia mediante un endpoint administrado.

Aísla clientes del ciclo de vida del compute y ofrece controles específicos de cola y escalado.
Compute clásico

Compute con driver, workers, runtime y configuración de infraestructura explícitos.

Aporta control para requisitos especiales a cambio de mayor operación y riesgo de dimensionamiento.
JSONRegistro de decisión de compute
{
  "workload": "daily_customer_360",
  "candidate": "serverless_jobs",
  "requirements": {
    "startup_sla_minutes": 8,
    "languages": ["Python", "SQL"],
    "network": "managed_connector",
    "spark_ui_required": false
  },
  "fallback": "classic_jobs_compute",
  "review_after_runs": 20
}

La decisión incluye un fallback y una fecha de revisión; evita declarar serverless o clásico como dogma.

Puntos clave

  • Serverless es la opción por defecto para workloads compatibles.
  • SQL warehouse corresponde a SQL/BI; jobs serverless a automatización general compatible.
  • Compute clásico se justifica con una limitación concreta, no con costumbre.

Evita

  • Usar all-purpose compartido para un job crítico y mezclar su coste con trabajo interactivo.
  • Migrar a serverless sin revisar configuraciones Spark, sinks o dependencias no compatibles.

Recuerdo activo

¿Cuándo elegirías un SQL warehouse frente a jobs serverless?

Borrador privado · solo en este navegador
02
Implementación

system.billing.usage

Dimensiona compute clásico con el cuello de botella real: memoria por partición, CPU, I/O, paralelismo y capacidad del driver.

Objetivo
Dimensiona compute clásico con el cuello de botella real: memoria por partición, CPU, I/O, paralelismo y capacidad del driver.
Duración estimada
17 min aprox.
Dificultad
Professional
Prerrequisitos
m24
Reportar un error en esta lección

Más nodos pequeños y pocos nodos grandes pueden sumar cores y memoria similares, pero no se comportan igual. Joins y agregaciones con particiones grandes necesitan memoria por executor; workloads muy paralelos pueden aprovechar más workers. El driver planifica, recopila metadatos y recibe resultados de acciones como `collect()`, por lo que escalar workers no resuelve un driver sobrecargado.

Comienza con una familia general, autoscaling y límites observables. Revisa utilización de CPU, memoria, spill, I/O y duración por stage; cambia una variable cada vez. En AWS, Azure y GCP varían nombres, discos y mercados spot, pero el método es el mismo. Mantén el driver bajo demanda y usa spot/preemptible en workers sólo si el workload tolera interrupciones.

Modelo mental

Dimensionar compute clásico es equilibrar un sistema distribuido con dos escalas distintas: recursos por tarea y número de tareas simultáneas. La memoria que necesita una partición determina si cada executor puede completar su operador; el número de cores y executors determina cuánto paralelismo se materializa. El driver tiene otra función: planifica, coordina, recopila metadatos y puede colapsar aunque los workers estén ociosos si el código hace collect o crea un plan enorme. Una máquina mayor no sustituye un buen particionado, y más workers no arreglan una tarea indivisible. Se mide primero el cuello de botella con CPU, I/O, spill, GC, distribución de tareas y presión del driver.

Escalado horizontal

Aumento del número de workers o executors para disponer de más slots y throughput agregado.

Sólo acelera si el plan ofrece paralelismo y la etapa no depende de una tarea caliente o secuencial.
Escalado vertical

Uso de nodos con más CPU o memoria por proceso de ejecución.

Puede hacer caber particiones grandes, pero aumenta coste unitario y no corrige distribución deficiente.
Presión del driver

Carga de planificación, metadatos o resultados que consume memoria y CPU del proceso coordinador.

Un driver puede fallar aunque los executors tengan recursos; collect y planes enormes son señales distintas.
JSONRango de autoscaling para un job clásico
{
  "spark_version": "16.4.x-scala2.12",
  "runtime_engine": "PHOTON",
  "autoscale": {
    "min_workers": 2,
    "max_workers": 8
  },
  "autotermination_minutes": 20,
  "custom_tags": {
    "cost_center": "finance-data",
    "environment": "prod"
  }
}

Los node types son deliberadamente externos al ejemplo porque cambian por nube; selecciónalos después de perfilar CPU, memoria y disco.

Puntos clave

  • Dimensiona por recursos de la etapa crítica, no por volumen total de la tabla.
  • El driver y los workers tienen responsabilidades distintas.
  • Autoscaling no arregla skew ni un único task no paralelizable.

Evita

  • Elevar `max_workers` cuando una sola tarea sesgada domina la duración.
  • Usar spot/preemptible para el driver y exponer el job completo a una reclamación.

Recuerdo activo

Un job tiene CPU baja en casi todos los workers y una única tarea de 40 minutos. ¿Ayudará duplicar `max_workers`?

Borrador privado · solo en este navegador
03
Operación

Tags y chargeback

Equilibra coste y latencia en serverless mediante modos de rendimiento, entornos versionados y límites de microbatch.

Objetivo
Equilibra coste y latencia en serverless mediante modos de rendimiento, entornos versionados y límites de microbatch.
Duración estimada
17 min aprox.
Dificultad
Professional
Prerrequisitos
m24
Reportar un error en esta lección

Serverless jobs y pipelines ofrecen modo performance optimized para arranque rápido y modo standard para automatizaciones que toleran aproximadamente 4–6 minutos de inicio a cambio de menor coste. Los notebooks usan el modo interactivo adecuado. Serverless administra infraestructura y Photon, pero el ingeniero sigue controlando la forma de la consulta, paquetes, parámetros y cuánto dato procesa cada ejecución.

Los entornos serverless sustituyen la selección directa de Databricks Runtime y mantienen una API base estable. Fija versiones de paquetes y usa entornos/base environments, porque init scripts no están soportados. En streaming serverless, `Trigger.AvailableNow` procesa lo disponible; limita `maxFilesPerTrigger` o `maxBytesPerTrigger` para evitar microbatches impredecibles.

Modelo mental

Serverless mueve el control desde nodos individuales hacia objetivos de servicio. El ingeniero ya no elige cada instancia ni un init script arbitrario; expresa el tipo de workload, sus dependencias compatibles, paralelismo y límites, y evalúa latencia, coste y estabilidad como propiedades observadas. Los modos de rendimiento intercambian rapidez de provisión y respuesta por consumo, mientras los entornos versionados reducen variación de runtime. En streaming, el tamaño de microbatch conecta dos mundos: lotes grandes aprovechan throughput pero elevan latencia y estado temporal; lotes pequeños reaccionan antes pero pagan más overhead. La ausencia de clúster visible no elimina decisiones de diseño, sólo cambia las palancas permitidas.

Entorno serverless

Conjunto versionado de runtime y dependencias compatibles usado por el compute administrado.

Aporta reproducibilidad sin control de imagen completa y obliga a declarar dependencias de forma soportada.
Backlog

Trabajo disponible que aún no ha sido procesado por el servicio.

Guía escalado y muestra si el throughput sostenido alcanza la tasa de entrada.
Límite de microbatch

Restricción de datos procesados en cada disparo de un stream.

Equilibra latencia, throughput, estado, coste y capacidad de recuperación tras una interrupción.
PythonDependencias reproducibles para serverless
# requirements.txt
pydantic==2.11.7
requests==2.32.4
tenacity==9.1.2

# En el job, selecciona un entorno compatible y conserva
# este fichero versionado junto al código y sus pruebas.

No dependas de una versión transitiva no fijada; valida el entorno en test antes de promoverlo.

Puntos clave

  • Usa modo standard cuando el SLA admite más arranque y prima el coste.
  • Fija versiones de paquetes dentro del modelo de entorno serverless.
  • La infraestructura gestionada no elimina la necesidad de acotar cada workload.

Evita

  • Elegir performance optimized para miles de jobs batch cuyo SLA tolera el arranque standard.
  • Copiar init scripts de compute clásico a una migración serverless.

Recuerdo activo

¿Qué compensación introduce el modo standard de serverless jobs?

Borrador privado · solo en este navegador
04
Diagnóstico

Compute policies y budgets

Impone guardrails con compute policies y atribuye serverless mediante usage policies sin incluir información sensible en tags.

Objetivo
Impone guardrails con compute policies y atribuye serverless mediante usage policies sin incluir información sensible en tags.
Duración estimada
17 min aprox.
Dificultad
Professional
Prerrequisitos
m24
Reportar un error en esta lección

Las compute policies restringen la creación de compute clásico: pueden fijar runtime, modo de acceso, Photon, límites de workers, autotermination y tags. Las familias de políticas aportan bases mantenidas por Databricks. Una buena policy reduce opciones peligrosas y deja editables sólo parámetros que el equipo debe decidir; instalar librerías mediante policies es preferible a init scripts.

Serverless usage policies son objetos distintos que asignan tags de coste a notebooks, jobs, pipelines y otros workloads serverless. Sus tags aparecen en `system.billing.usage.custom_tags`. Los tags viajan a registros y pueden replicarse globalmente: usa centro de coste, producto y entorno, nunca correo, nombre de cliente o datos confidenciales. Recuerda que un pipeline disparado por un job conserva su propia policy.

Modelo mental

Una policy es una barandilla ejecutable: transforma estándares de coste, seguridad y soporte en opciones permitidas antes de que nazca el compute. No reemplaza RBAC ni decide quién puede leer datos; limita cómo se configura la infraestructura, por ejemplo runtime, familia, Photon, autoscaling, autotermination o tags. En serverless, una usage policy sirve para atribuir consumo según metadatos y contexto disponibles, no para insertar secretos en etiquetas. La buena gobernanza ofrece caminos aprobados para clases de workload, con defaults sensatos y límites explícitos. Una policy demasiado abierta no controla; una demasiado rígida provoca excepciones manuales y equipos que mezclan cargas incompatibles en un único recurso.

Compute policy

Conjunto de reglas que limita y predetermina atributos al crear compute clásico.

Previene configuraciones inseguras o costosas sin depender de revisión manual posterior.
Usage policy

Mecanismo de clasificación y atribución del consumo de productos serverless.

Permite FinOps cuando no existe un clúster propio al que adjuntar tags tradicionales.
Taxonomía de coste

Vocabulario controlado de dimensiones como centro, entorno, producto y clase de workload.

Hace que la atribución sea agregable y evita cientos de etiquetas equivalentes o sensibles.
JSONFragmento de compute policy con guardrails
{
  "autotermination_minutes": {
    "type": "range",
    "maxValue": 60,
    "defaultValue": 20
  },
  "autoscale.max_workers": {
    "type": "range",
    "maxValue": 12,
    "defaultValue": 4
  },
  "custom_tags.cost_center": {
    "type": "fixed",
    "value": "finance-data"
  }
}

Completa la policy con familia y reglas del workspace; prueba que usuarios previstos pueden crear compute y no pueden superar guardrails.

Puntos clave

  • Compute policies gobiernan configuración clásica; serverless usage policies atribuyen actividad serverless.
  • Fija y oculta guardrails, permite sólo decisiones necesarias.
  • Los tags no son un almacén seguro para datos personales o secretos.

Evita

  • Usar la misma etiqueta `Name` que Databricks aplica al clúster y romper atribución/terminación.
  • Incluir identificadores personales o secretos en tags de coste.

Recuerdo activo

¿Dónde aparecen los tags heredados de una serverless usage policy?

Borrador privado · solo en este navegador
05
Decisión de diseño

Standard frente a performance optimized

Construye FinOps con cantidades de uso, precios efectivos, correcciones y metadatos de workload, no con estimaciones de horas de clúster.

Objetivo
Construye FinOps con cantidades de uso, precios efectivos, correcciones y metadatos de workload, no con estimaciones de horas de clúster.
Duración estimada
17 min aprox.
Dificultad
Professional
Prerrequisitos
m24
Reportar un error en esta lección

`system.billing.usage` ofrece registros regionales de consumo con SKU, producto origen, metadatos de job/notebook/warehouse, identidad y tags. Para coste monetario se une con la tabla de precios por SKU y vigencia; las correcciones pueden emitir retracciones y restatements, así que agrega `usage_quantity` con su signo en lugar de descartar filas negativas.

Un dashboard útil separa coste, volumen y resultado: coste por ejecución, por millón de filas o por SLA cumplido. Segmenta serverless por `billing_origin_product` y `usage_metadata`, porque varias capacidades comparten SKU. Define presupuestos y alertas como detección temprana, no como mecanismo que detiene automáticamente todos los workloads.

Modelo mental

FinOps no intenta minimizar cada factura aislada; optimiza el coste de entregar valor con fiabilidad. En Databricks, los registros de uso son hechos temporales que deben unirse con precios efectivos, metadatos de identidad y recursos, y resultados del workload. Las horas de clúster son una aproximación pobre para serverless, autoscaling, tarifas cambiantes o correcciones. system.billing.usage incluye cantidades y metadatos, pero un registro puede ser una retracción o corrección y no todo consumo se atribuye igual. La unidad útil es coste por pipeline exitoso, tabla publicada, terabyte procesado o consulta con SLA. Esa normalización separa crecimiento sano del derroche y evita premiar jobs baratos que fallan.

Registro de corrección

Entrada de facturación que retracta o ajusta una cantidad publicada previamente.

Debe netearse correctamente para no duplicar uso ni mostrar ahorros ficticios.
Coste unitario

Importe dividido por una unidad de valor o trabajo comparable.

Distingue aumento de gasto por crecimiento de una regresión de eficiencia.
Cobertura de atribución

Porcentaje del coste asignado de forma trazable a propietario, producto o workload.

Expone cuánto del dashboard es accionable y cuánto permanece compartido o desconocido.
SQLUso diario por producto y centro de coste
SELECT
  usage_date,
  billing_origin_product,
  custom_tags['cost_center'] AS cost_center,
  sku_name,
  SUM(usage_quantity) AS usage_quantity
FROM system.billing.usage
WHERE usage_date >= current_date() - INTERVAL 30 DAYS
GROUP BY usage_date, billing_origin_product,
         custom_tags['cost_center'], sku_name
ORDER BY usage_date DESC, usage_quantity DESC;

Para moneda, une con `system.billing.list_prices` respetando SKU y periodo; este ejemplo evita fingir que DBU equivale directamente a coste.

Puntos clave

  • Suma registros de corrección con signo para obtener consumo neto.
  • Une uso y precios por SKU y periodo de vigencia.
  • Normaliza coste por unidad de negocio o trabajo terminado.

Evita

  • Multiplicar todas las DBU por un único precio sin considerar SKU ni vigencia contractual.
  • Ignorar correcciones negativas y sobreestimar consumo histórico.

Recuerdo activo

¿Por qué no conviene filtrar los registros con `usage_quantity < 0`?

Borrador privado · solo en este navegador
5 lecciones pendientes

Vista de lectura · sin ejecución

databricks-finops-system-tables

databricks-finops-system-tables · commit 7834d5d

README.md