Eliminación automática de filas con período de vida automático

El TTL automático elimina automáticamente las filas de las tablas administradas de Unity Catalog después de un período de tiempo configurable, en función del valor de una columna de marca temporal. Defina un período de expiración en días y especifique una columna de marca de tiempo para la comparación. Databricks ejecuta operaciones de DELETE, PURGE y VACUUM en segundo plano para eliminar las filas expiradas y borrarlas del almacenamiento.

A continuación se muestran dos ejemplos de cómo usar el período de vida automático:

  • Es posible que quiera quitar datos de más de 1 año para mantener bajos los costos de almacenamiento. Expire las filas 1 año después de la creación especificando un período de expiración de 365 días en una created_at columna de marca de tiempo.
  • Es posible que quiera quitar los datos marcados para su eliminación por otro proceso empresarial. Expire las filas 20 días después de procesar una solicitud de eliminación especificando un período de expiración de 20 días en una columna de marca de tiempo personalizada del_request_approved .

Importante

No se garantiza el tiempo exacto de eliminación y puede variar en función de la carga del sistema. Para comprobar la eliminación, consulte la tabla del sistema de optimización predictiva o ejecute DESCRIBE HISTORY en la tabla. Consulte Tablas del sistema.

El tiempo de espera entre la expiración de la fila y la eliminación permanente puede ser de hasta 6 días más el valor de la propiedad de retención de datos de la tabla, cuyo valor predeterminado es de 7 días. Para obtener información sobre cómo configurar el TTL automático para que la eliminación se realice dentro de un plazo específico, consulte Calcular los valores de configuración para un período de expiración objetivo y Configurar la retención de datos para las consultas de desplazamiento temporal.

El período de vida automático está disponible para las tablas de Delta Lake administradas por el catálogo de Unity, las tablas de Apache Iceberg y las tablas de streaming con canalizaciones de Lakeflow.

Requirements

  • Debe activar la optimización predictiva. Consulte Optimización predictiva para tablas administradas de Unity Catalog.
    • Desactivar la optimización predictiva en una tabla con el tiempo de vida automático habilitado impide que se ejecute el período de vida automático.
  • Debe tener permisos de MODIFY en una tabla para establecer o eliminar una política de período de vida automático. Consulte Permisos de tabla básicos.
  • Databricks Runtime 17.3 y versiones posteriores.
    • Databricks Runtime 17.2 y versiones posteriores pueden leer y escribir en tablas con tiempo de vida automático.

Activar el tiempo de vida automático

Active el período de vida automático de forma diferente en función de la tabla de origen:

Tablas administradas de Delta Lake y Apache Iceberg

Para establecer una directiva de período de vida automático en una nueva tabla, especifique un entero no negativo para <expiration_days> y una columna con un tipo de DATE, TIMESTAMPo TIMESTAMP_NTZ para <time_column_name>:

CREATE TABLE table_name DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>;

Para establecer una política de tiempo de vida (TTL) automática en una tabla existente:

ALTER TABLE table_name DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>;

Por ejemplo, para eliminar las filas 30 días después de su marca de tiempo de created_at:

ALTER TABLE my_catalog.my_schema.my_table DELETE ROWS 30 DAYS AFTER created_at;

Tablas de streaming con canalizaciones de Lakeflow

Para establecer una política de período de vida automático en una nueva tabla de streaming de una canalización, especifique dos valores. Proporcione un entero no negativo para <expiration_days> y una columna de tipo DATE, TIMESTAMPo TIMESTAMP_NTZ para <time_column_name>:

SQL

CREATE STREAMING TABLE table_name
DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>
AS SELECT * FROM STREAM(source);

Python

from pyspark import pipelines as dp

@dp.table(
  auto_ttl={"timestamp_column": <time_column_name>, "expire_in_days": <expiration_days>}
)
def function_name():
  return (query)

No se admite la modificación de una tabla de streaming para usar el período de vida automático mediante SQL. Para modificar el período de vida automático en una tabla de streaming existente, actualice el código de canalización y vuelva a publicarlo.

Lecturas de streaming de tablas con período de vida automático

Si usa Structured Streaming, canalizaciones de Lakeflow o tablas de streaming para leer desde una tabla con el tiempo de vida automático habilitado, establezca skipChangeCommits en la lectura de streaming. Las operaciones de eliminación de período de vida automático aparecen a medida que cambian los datos. Sin esta configuración, se produce un error en la lectura de streaming cuando el período de vida automático elimina filas.

Consulte los siguientes ejemplos:

Transmisión Estructurada

# Source table with auto time-to-live
spark.sql("ALTER TABLE source_table DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>")

# Structured Streaming read
spark.readStream.format("delta").option("skipChangeCommits", "true").table("source_table")

Canalizaciones de Lakeflow

from pyspark import pipelines as dp

# Source table with auto time-to-live
spark.sql("ALTER TABLE source_table DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>")

# Lakeflow pipelines streaming read
@dp.table
def my_table():
  return spark.readStream.format("delta").option("skipChangeCommits", "true").table("source_table")

Tablas de streaming

-- Source table with auto time-to-live
ALTER TABLE source_table DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>;

-- Lakeflow pipelines streaming read
CREATE OR REFRESH STREAMING TABLE my_table AS
SELECT * FROM STREAM(source_table) OPTIONS (skipChangeCommits);

Comprobación de que el período de vida automático está habilitado

Use DESCRIBE TABLE EXTENDED para confirmar que el período de vida automático está configurado. Si se establecen las propiedades autottl.expireInDays y autottl.timestampColumn, se habilita el tiempo de vida automático.

La configuración automática del tiempo de vida aparece en la fila Propiedades de la tabla:

DESCRIBE TABLE EXTENDED table_name;

Como alternativa, use SHOW TBLPROPERTIES para ver las propiedades de período de vida automático:

SHOW TBLPROPERTIES table_name;

Desactivar el tiempo de vida automático

Para eliminar una política de tiempo de vida automática de una tabla de Delta Lake o Apache Iceberg administrada:

ALTER TABLE table_name DROP ROW DELETION;

Para eliminar una política de tiempo de vida automática en una tabla de streaming, establezca auto_ttl en None en el código de la canalización y vuelva a publicar:

from pyspark import pipelines as dp

@dp.table(
  auto_ttl=None
)
def function_name():
  return (query)

Ciclo de vida de los datos

El período de vida automático puede ayudar a automatizar la administración del ciclo de vida de los datos para las tablas con requisitos de retención basados en el tiempo.

El tiempo de vida automático tiene un ciclo de vida de datos de varias etapas. Una vez que una fila ha caducado, la optimización predictiva ejecuta de forma asíncrona los comandos DELETE y VACUUM. Si los vectores de eliminación están habilitados en la tabla, la optimización predictiva también se ejecuta PURGE antes de VACUUM volver a escribir los archivos de datos y quitar las filas eliminadas. Consulte Purga de eliminaciones de solo metadatos para forzar la reescritura de datos.

No se garantiza el tiempo exacto de eliminación y puede variar en función de la carga del sistema. Para obtener información sobre cómo comprobar que se han eliminado los datos, consulte Tablas del sistema.

Para configurar el período de vida automático correctamente para los requisitos de retención de datos, revise las fases siguientes:

Stage Duración Descripción
Período de expiración El usuario define al activar el período de vida automático. Número de días después del valor de la columna de tiempo cuando una fila es apta para su eliminación. Establézcalo cuando active el período de vida automático.
Tiempo de espera Hasta 3 días por comando (DELETE, VACUUM) Retraso entre cuándo las filas son aptas para su eliminación y cuando la optimización predictiva las elimina. Los retrasos pueden producirse entre la expiración de filas y cada comando asincrónico, DELETE y VACUUM. Cada retraso suele ser inferior a 3 días, hasta un total de 6 días.
Duración de retención de datos El usuario define mediante una propiedad de tabla. El período de tiempo durante el que las filas eliminadas permanecen en el almacenamiento y son accesibles por viaje en el tiempo. Para las tablas de Delta Lake, configure con delta.deletedFileRetentionDuration. En el caso de las tablas de Apache Iceberg, configure con iceberg.deletedFileRetentionDuration. Si no se establece la propiedad, el valor predeterminado es 7 días. Vea Configuración de la retención de datos para las consultas de historial temporal.

Después de la eliminación permanente mediante VACUUM, ya no se puede acceder a las filas eliminadas a través de los viajes en el tiempo. Consulte Eliminar archivos de datos sin usar con el comando vacuum.

Aquí se muestra una cronología visual del ciclo de vida de los datos, en la que una fila con un valor en la columna de tiempo de t pasa por cuatro fases antes de que sus archivos se eliminen físicamente mediante VACUUM:

Diagrama del ciclo de vida de los datos de período de vida automático que muestra el periodo de expiración, el tiempo de búfer, el periodo de retención de datos y las fases de eliminación permanente a lo largo de una cronología diaria.

Cálculo de valores de configuración para un período de expiración de destino

Importante

El período de vida automático elimina los datos de forma asincrónica. Consulte Ciclo de vida de los datos.

Para configurar la optimización predictiva para eliminar filas del almacenamiento en un número objetivo de días, resta de tu objetivo el tiempo máximo de búfer (6 días) y la duración de retención de los archivos eliminados:

target_expiration_days = target_days - 6 - deletedFileRetentionDuration

Por ejemplo, para eliminar filas en 30 días con el período de retención predeterminado de 7 días, establezca expiration_days en 17 DAYS:

target_expiration_days = 30 - 6 - 7 = 17 days

Para eliminar filas antes de 90 días con un período de retención de 30 días, establezca expiration_days en 54 DAYS:

target_expiration_days = 90 - 6 - 30 = 54 days

Monitorear el tiempo de vida (TTL) automático

Con las tablas del sistema, puede comprobar los eventos de período de vida automático, supervisar los costes y establecer alertas de errores.

Tablas del sistema

Compruebe los eventos de período de vida automático con la tabla del sistema de optimización predictiva. La optimización predictiva se ejecuta DELETE para quitar filas expiradas, VACUUM para eliminarlas del almacenamiento y, opcionalmente PURGE , para las tablas con vectores de eliminación habilitados para crear nuevos archivos sin filas eliminadas.

Ejecute la siguiente consulta para revisar las operaciones de período de vida automático en todas las tablas en los últimos 7 días:

WITH tables_with_deletes AS (
  SELECT DISTINCT catalog_name, schema_name, table_name
  FROM system.storage.predictive_optimization_operations_history
  WHERE
    operation_type = 'DELETE'
    AND timestampdiff(day, start_time, now()) < 7
)
SELECT hist.*
FROM system.storage.predictive_optimization_operations_history AS hist
INNER JOIN tables_with_deletes AS t
  ON hist.catalog_name = t.catalog_name
  AND hist.schema_name = t.schema_name
  AND hist.table_name = t.table_name
WHERE
  hist.operation_type IN ('DELETE', 'PURGE', 'VACUUM')
  AND timestampdiff(day, hist.start_time, now()) < 7
ORDER BY hist.start_time DESC;

Establecer una alerta para errores de período de vida automático

Para recibir notificaciones cuando se produzca un error en las operaciones de período de vida automático, cree una alerta de SQL de Databricks con una consulta que compruebe si hay operaciones con errores en la tabla del sistema de optimización predictiva. Consulte Alertas sql de Databricks para obtener instrucciones sobre cómo crear alertas y documentación de tablas del sistema para ver ejemplos de consultas.

Estimar los costes del período de vida automático

Utilice la siguiente consulta para ver cuántas DBU consumieron las operaciones de período de vida automático en los últimos 30 días:

WITH tables_with_deletes AS (
  SELECT DISTINCT table_name
  FROM system.storage.predictive_optimization_operations_history
  WHERE
    operation_type = 'DELETE'
    AND timestampdiff(day, start_time, now()) < 30
)
SELECT SUM(usage_quantity) AS total_estimated_dbu
FROM system.storage.predictive_optimization_operations_history AS hist
INNER JOIN tables_with_deletes AS t
  ON hist.table_name = t.table_name
WHERE
  hist.operation_type IN ('DELETE', 'PURGE', 'VACUUM')
  AND hist.usage_unit = 'ESTIMATED_DBU'
  AND timestampdiff(day, hist.start_time, now()) < 30;

Revisión de las operaciones en una tabla específica

Use DESCRIBE HISTORY para ver las operaciones recientes que se ejecutan en una tabla específica:

DESCRIBE HISTORY table_name;

Limitations

Las siguientes limitaciones se aplican al período de vida automático:

Importante

No se garantiza el tiempo exacto de eliminación y puede variar en función de la carga del sistema. Para obtener información sobre cómo comprobar que se han eliminado los datos, consulte Tablas del sistema.

  • No se admite el período de vida automático en las vistas materializadas.
  • La sintaxis de ALTER TABLE y ALTER STREAMING TABLE no se admite para modificar el período de vida automático en tablas de streaming. Para agregar o cambiar una política de período de vida automático en una tabla de streaming existente, actualice el parámetro auto_ttl en el código de la canalización y vuelva a publicar la canalización.
  • No se admite cambiar el nombre de las columnas de tiempo definidas en una política de período de vida automática. Si la asignación de columnas está habilitada, esta limitación sigue aplicándose. Consulte Renombrar y eliminar columnas con el mapeo de columnas de Delta Lake.
  • En casos excepcionales, las operaciones de período de vida automático pueden provocar conflictos en las transacciones. Para reducir el riesgo de conflictos de transacciones, use la agrupación en clústeres líquidos, lo que reduce los conflictos con la simultaneidad de nivel de fila. Consulte Uso de clústeres líquidos para tablas.
  • Si el proceso sin servidor no puede acceder a ADLS debido a un vínculo privado, las operaciones de período de vida automático podrían fallar. Consulte el mensaje de error private link.