CRESTONE


Tutorial

Cómo usar variables dinámicas de fecha en CRESTONE

CRESTONE Blog  •  Tutorial  •  Tiempo de lectura: 6 min

Ilustración de variables dinámicas de fecha en CRESTONE

Uno de los patrones más comunes en integración de datos es filtrar los registros a extraer por fecha: "dame solo los documentos creados hoy", "dame los movimientos de los últimos 7 días", "dame todo desde el primer día del mes". Escribir esa fecha de forma fija en la configuración del Node significa que hay que actualizarla manualmente en cada ejecución. Eso no es automatización: es trabajo manual disfrazado.

CRESTONE resuelve esto con variables dinámicas de fecha que se evalúan en tiempo de ejecución. Esta guía explica cómo usarlas.

Las variables dinámicas de fecha de CRESTONE usan expresiones Python evaluadas en el momento de ejecutar el Job. Esto significa que cada vez que el Job corre, la variable calcula su valor de forma automática, sin intervención manual.

Dónde se usan las variables de fecha

Las variables dinámicas se usan en el campo WHERE Filter del Node. Este campo acepta condiciones SQL estándar de SAP donde podés referenciar variables entre dobles llaves:

-- Ejemplo: extraer documentos creados hoy
ERDAT = {{ today() }}

-- Ejemplo: extraer documentos de los últimos 7 días
ERDAT >= {{ today() - timedelta(days=7) }}

-- Ejemplo: extraer desde el primer día del mes actual
ERDAT >= {{ today().replace(day=1) }}

Variables y expresiones disponibles

CRESTONE expone las siguientes funciones de fecha dentro de las expresiones {{ }}:

  • today(): retorna la fecha del día de ejecución en formato YYYYMMDD (el formato de fecha estándar de SAP). Equivale a datetime.today().
  • timedelta(days=N): permite sumar o restar días. Combinado con today() permite definir ventanas de tiempo relativas.
  • replace(day=1, month=1): método de datetime para modificar componentes de la fecha. Útil para el primer día del mes o del año.
  • now(): retorna el timestamp completo con hora, minuto y segundo. Para campos de tipo TIMESTAMP en SAP.
-- Primer día del mes pasado
BUDAT >= {{ (today().replace(day=1) - timedelta(days=1)).replace(day=1) }}

-- Último día del mes pasado
BUDAT <= {{ today().replace(day=1) - timedelta(days=1) }}

-- Rango: últimas 24 horas (con timestamp)
CPUDT >= {{ now() - timedelta(hours=24) }}

Caso de uso: carga diaria de documentos de venta

Supongamos que queremos extraer diariamente los pedidos de venta creados en SAP el día anterior (ayer) y cargarlos en Snowflake para que el equipo comercial los tenga disponibles cada mañana.

Configuración del Node:

  • Table: VBAK (cabeceras de pedidos de venta).
  • Fields: VBELN, ERDAT, AUART, KUNNR, NETWR, WAERK.
  • WHERE Filter: ERDAT = {{ today() - timedelta(days=1) }}
  • Load Mode: Append (agrega los nuevos registros sin borrar los anteriores).

Con el Job configurado en schedule diario a las 6:00 AM, cada mañana CRESTONE extrae automáticamente los pedidos del día anterior y los carga en Snowflake. Sin intervención manual, sin fechas hardcodeadas.

Usar Append en lugar de Full Load es fundamental cuando se trabaja con variables de fecha: cada ejecución agrega solo los registros del período filtrado, manteniendo el histórico acumulado en Snowflake sin duplicados.

Caso de uso: carga semanal de movimientos de stock

Para extraer los movimientos de stock (tabla MSEG) de la semana que acaba de cerrar:

-- Lunes de la semana pasada
BUDAT >= {{ today() - timedelta(days=today().weekday()+7) }}

-- Domingo de la semana pasada
BUDAT <= {{ today() - timedelta(days=today().weekday()+1) }}

Con el Job programado para ejecutarse los lunes a las 5:00 AM, siempre se extraerá exactamente la semana anterior, independientemente de cuándo se creó el Job.

Errores comunes y cómo evitarlos

  • Formato de fecha incorrecto: SAP usa el formato YYYYMMDD (sin guiones ni barras). La función today() de CRESTONE ya retorna el valor en ese formato; no es necesario formatearlo manualmente.
  • Campos de tipo TIMESTAMP: algunos campos SAP son TIMESTAMP y esperan fecha + hora. Usá now() en lugar de today() para esos casos.
  • Zona horaria: CRESTONE evalúa las variables en la zona horaria configurada en el workspace. Verificá que coincida con la zona horaria de tu sistema SAP para evitar desfasajes en filtros de fecha.
  • Load Mode Full Load con filtro de fecha: si combinás Full Load con filtro de fecha, CRESTONE sobreescribirá la tabla de destino con solo los registros del período filtrado. Usá Append para acumular histórico.
Las variables dinámicas de fecha son la base de cualquier pipeline de datos bien diseñado. Eliminar las fechas fijas de las configuraciones es el primer paso para tener un pipeline que se sostiene solo.

Próximo artículo

Próxima entrega: cómo configurar Delta Extraction con extractores estándar de SAP para extraer solo los cambios desde la última ejecución, sin depender de filtros de fecha.

— Equipo CRESTONE  |  Seidor Analytics