Automatyczne usuwanie wierszy z automatycznym czasem wygaśnięcia

Automatyczny czas życia (Auto-TTL) automatycznie usuwa wiersze z tabel zarządzanych w Unity Catalog po upływie skonfigurowanego okresu na podstawie wartości w kolumnie sygnatury czasowej. Okres wygaśnięcia można zdefiniować w dniach i określić kolumnę znacznika czasu do porównania. Databricks uruchamia operacje DELETE, PURGE i VACUUM w tle, aby usunąć wygasłe wiersze i usunąć je z pamięci masowej.

Poniżej znajdują się dwa przykłady użycia automatycznego parametru time-to-live:

  • Możesz usunąć dane starsze niż 1 rok, aby utrzymać niskie koszty magazynowania. Wygasanie wierszy 1 rok po utworzeniu przez określenie 365-dniowego okresu wygaśnięcia w created_at kolumnie znacznika czasu.
  • Możesz usunąć dane oznaczone do usunięcia przez inny proces biznesowy. Ustaw wygaśnięcie wierszy po 20 dniach od przetworzenia żądania usunięcia, określając okres ważności wynoszący 20 dni w niestandardowej kolumnie znacznika czasu del_request_approved.

Important

Dokładny czas usuwania nie jest gwarantowany i może się różnić w zależności od obciążenia systemu. Aby zweryfikować usunięcie, wykonaj zapytanie do tabeli systemowej optymalizacji predykcyjnej lub uruchom DESCRIBE HISTORY na tabeli. Zobacz Tabele systemowe.

Czas buforu między wygaśnięciem wiersza a trwałym usunięciem może wynosić do 6 dni oraz wartość właściwości tabeli przechowywania danych, która domyślnie wynosi 7 dni. Aby uzyskać informacje na temat konfigurowania automatycznego czasu wygaśnięcia do usunięcia w określonym przedziale czasu, zobacz Obliczanie wartości konfiguracji dla docelowego okresu wygaśnięcia i Konfigurowanie przechowywania danych dla zapytań dotyczących podróży czasowych.

Automatyczny czas życia jest dostępny dla tabel Delta Lake zarządzanych przez Unity Catalog, tabel Apache Iceberg i tabel strumieniowych z potokami Lakeflow.

Requirements

  • Należy włączyć optymalizację predykcyjną. Zobacz Optymalizację predykcyjną dla tabel zarządzanych w Unity Catalog.
    • Wyłączenie optymalizacji predykcyjnej w tabeli z włączonym automatycznym mechanizmem czasu wygaśnięcia powoduje, że automatyczny mechanizm czasu wygaśnięcia nie działa.
  • Musisz mieć MODIFY uprawnienia do tabeli, aby ustawić lub usunąć zasady automatycznego czasu wygaśnięcia. Zobacz Podstawowe uprawnienia tabeli.
  • Środowisko Databricks Runtime w wersji 17.3 lub nowszej.
    • Databricks Runtime 17.2 i starsze wersje mogą odczytywać dane z tabel i zapisywać je w tabelach z automatycznie ustawianym czasem wygaśnięcia.

Włącz automatyczny czas życia (TTL)

Włącz automatyczny czas wygaśnięcia zależnie od tabeli źródłowej:

Tabele zarządzane przez Delta Lake i Apache Iceberg

Aby ustawić automatyczną politykę czasu do życia na nowej tabeli, określ nieujemną liczbę całkowitą dla <expiration_days> oraz kolumnę o typie DATE, TIMESTAMP, lub TIMESTAMP_NTZ dla <time_column_name>.

Kolumna czasu obsługuje zagnieżdżone pola, takie jak pola w STRUCT. Określ ścieżkę pola za pomocą notacji kropek, takiej jak payload.ts.

Aby stworzyć tabelę z automatyczną polityką czasu do życia:

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

Aby ustawić zasady automatycznego czasu wygaśnięcia dla istniejącej tabeli:

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

Na przykład, aby usunąć wiersze po upływie 30 dni od ich created_at znacznika czasu:

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

Tabele strumieniowe w potokach Lakeflow

Aby ustawić automatyczną politykę czasu życia (TTL) dla nowej tabeli strumieniowej w potoku przetwarzania, określ dwie wartości. Podaj nieujemną liczbę całkowitą dla <expiration_days> oraz kolumnę typu DATE, TIMESTAMP lub TIMESTAMP_NTZ dla <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)

Zmiana tabeli przesyłania strumieniowego w celu używania automatycznego czasu wygaśnięcia przy użyciu języka SQL nie jest obsługiwana. Aby zmodyfikować automatyczne ustawienie czasu życia (TTL) w istniejącej tabeli strumieniowej, zaktualizuj kod potoku i opublikuj go ponownie.

Przesyłanie strumieniowe odczytów z tabel z automatycznym czasem wygaśnięcia

Jeśli używasz Structured Streaming, potoków Lakeflow lub tabel strumieniowych do odczytu z tabeli z włączonym automatycznym okresem ważności (TTL), ustaw opcję skipChangeCommits dla odczytu strumieniowego. Operacje automatycznego usuwania po upływie czasu życia (TTL) są widoczne jako zmiany danych. Bez tego ustawienia odczyt strumieniowy kończy się niepowodzeniem, gdy automatyczny czas życia (TTL) usuwa wiersze.

Zobacz następujące przykłady:

Przesyłanie strumieniowe ze strukturą

# 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")

Potoki danych 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")

Streamingowe tabele

-- 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);

Sprawdź, czy automatyczny czas życia (TTL) jest włączony

Użyj DESCRIBE TABLE EXTENDED, aby potwierdzić, że skonfigurowano automatyczny czas życia (TTL). Jeśli właściwości autottl.expireInDays i autottl.timestampColumn są ustawione, automatyczny czas wygaśnięcia jest włączony.

Ustawienia automatycznego czasu życia pojawiają się w wierszu Właściwości tabeli:

DESCRIBE TABLE EXTENDED table_name;

Możesz też użyć polecenia SHOW TBLPROPERTIES, aby wyświetlić właściwości automatycznego czasu życia:

SHOW TBLPROPERTIES table_name;

Wyłącz automatyczny czas życia (TTL)

Aby usunąć zasadę automatycznego czasu życia (TTL) z zarządzanej tabeli Delta Lake lub Apache Iceberg:

ALTER TABLE table_name DROP ROW DELETION;

Aby usunąć zasady automatycznego czasu wygaśnięcia w tabeli przesyłania strumieniowego, ustaw wartość na auto_ttlNone w kodzie potoku i opublikuj ponownie:

from pyspark import pipelines as dp

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

Cykl życia danych

Automatyczny czas życia (TTL) może pomóc zautomatyzować zarządzanie cyklem życia danych w tabelach z wymaganiami dotyczącymi retencji danych zależnej od czasu.

Automatyczny okres ważności (TTL) ma wieloetapowy cykl życia danych. Po wygaśnięciu wiersza optymalizacja predykcyjna asynchronicznie uruchamia polecenia DELETE i VACUUM. Jeśli wektory usuwania są włączone dla tabeli, optymalizacja predykcyjna jest również wykonywana PURGE przed VACUUM, aby przepisać pliki danych i usunąć usunięte wiersze. Zobacz Purge: usunięcia dotyczące tylko metadanych w celu wymuszenia ponownego zapisu danych.

Dokładny czas usuwania nie jest gwarantowany i może się różnić w zależności od obciążenia systemu. Aby uzyskać informacje na temat sprawdzania, czy dane zostały usunięte, zobacz Tabele systemowe.

Aby poprawnie skonfigurować automatyczny czas życia (TTL) zgodnie z wymaganiami dotyczącymi przechowywania danych, zapoznaj się z poniższymi krokami:

Etapie Czas trwania Description
Okres wygaśnięcia Użytkownik określa to podczas włączania automatycznego czasu życia. Liczba dni po wartości kolumny czasu, gdy wiersz kwalifikuje się do usunięcia. Ustaw tę opcję po włączeniu automatycznego czasu wygaśnięcia.
Czas buforu Do 3 dni na każde polecenie (DELETE, VACUUM) Opóźnienie między tym, kiedy wiersze kwalifikują się do usunięcia, a kiedy optymalizacja predykcyjna je usuwa. Opóźnienia mogą wystąpić między wygaśnięciem wiersza a każdą asynchroniczną komendą, DELETE i VACUUM. Każde opóźnienie jest zwykle mniejsze niż 3 dni, maksymalnie 6 dni.
Czas przechowywania danych Użytkownik definiuje za pomocą właściwości tabeli. Czas, przez jaki usunięte wiersze pozostają w pamięci masowej i są dostępne za pomocą funkcji Time Travel. W przypadku tabel Delta Lake skonfiguruj przy użyciu delta.deletedFileRetentionDuration. W przypadku tabel Apache Iceberg skonfiguruj za pomocą polecenia iceberg.deletedFileRetentionDuration. Jeśli właściwość nie jest ustawiona, wartość domyślna to 7 dni. Zobacz Konfigurowanie przechowywania danych dla zapytań dotyczących podróży w czasie.

Po trwałym usunięciu za pomocą VACUUM usunięte wiersze nie są już dostępne za pomocą funkcji time travel. Zobacz Usuwanie nieużywanych plików danych za pomocą próżni.

Oto wizualna oś czasu cyklu życia danych, w której wiersz z wartością t kolumny czasowej przechodzi przez cztery fazy, zanim jego pliki zostaną fizycznie usunięte przez VACUUM:

Schemat cyklu życia danych dla automatycznego okresu ważności (TTL), przedstawiający okres wygaśnięcia, czas buforowy, okres przechowywania danych oraz etapy trwałego usuwania na osi czasu obejmującej jeden dzień.

Obliczanie wartości konfiguracji dla docelowego okresu wygaśnięcia

Important

Automatyczny czas życia (TTL) usuwa dane asynchronicznie. Zobacz Cykl życia danych.

Aby skonfigurować optymalizację predykcyjną tak, aby usuwała wiersze z pamięci masowej w docelowej liczbie dni, odejmij od wartości docelowej maksymalny czas buforowania (6 dni) oraz okres przechowywania usuniętych plików:

target_expiration_days = target_days - 6 - deletedFileRetentionDuration

Aby na przykład usuwać wiersze po 30 dniach przy domyślnym 7-dniowym okresie przechowywania, ustaw expiration_days na 17 DAYS:

target_expiration_days = 30 - 6 - 7 = 17 days

Aby usunąć wiersze starsze niż 90 dni przy 30-dniowym okresie przechowywania, ustaw expiration_days na 54 DAYS:

target_expiration_days = 90 - 6 - 30 = 54 days

Monitor automatycznego czasu życia

Za pomocą tabel systemowych można weryfikować automatyczne zdarzenia na żywo, monitorować koszty i ustawiać alerty dotyczące niepowodzeń.

Tabele systemowe

Sprawdź zdarzenia automatyczne na żywo za pomocą tabeli systemu optymalizacji predykcyjnej. Optymalizacja predykcyjna uruchamia DELETE, aby usunąć wygasłe wiersze, VACUUM, aby usunąć je z pamięci masowej, oraz opcjonalnie PURGE dla tabel z włączonymi wektorami usuwania, aby utworzyć nowe pliki bez usuniętych wierszy.

Uruchom następujące zapytanie, aby przejrzeć operacje automatycznego czasu wygaśnięcia (TTL) we wszystkich tabelach z ostatnich 7 dni:

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;

Ustawianie alertu dotyczącego automatycznych niepowodzeń czasu wygaśnięcia

Aby otrzymywać powiadomienia, gdy automatyczne operacje na żywo kończą się niepowodzeniem, utwórz alert SQL usługi Databricks z zapytaniem sprawdzającym nieudane operacje w tabeli systemu optymalizacji predykcyjnej. Zobacz Alert SQL usługi Databricks , aby uzyskać instrukcje dotyczące tworzenia alertów i dokumentacji tabel systemowych , aby zapoznać się z przykładami zapytań.

Oszacuj koszty automatycznego czasu życia (TTL)

Użyj następującego zapytania, aby sprawdzić, ile jednostek DBU zużyły operacje automatycznego czasu życia (TTL) w ciągu ostatnich 30 dni:

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;

Przeglądanie operacji w określonej tabeli

Użyj DESCRIBE HISTORY polecenia , aby wyświetlić ostatnie operacje uruchamiane w określonej tabeli:

DESCRIBE HISTORY table_name;

Limitations

Następujące ograniczenia dotyczą automatycznego czasu życia (TTL):

Important

Dokładny czas usuwania nie jest gwarantowany i może się różnić w zależności od obciążenia systemu. Aby uzyskać informacje na temat sprawdzania, czy dane zostały usunięte, zobacz Tabele systemowe.

  • Automatyczny czas życia (TTL) nie jest obsługiwany dla widoków zmaterializowanych.
  • Składnia ALTER TABLE i ALTER STREAMING TABLE nie jest obsługiwana do modyfikowania automatycznego czasu wygaśnięcia (TTL) w tabelach strumieniowych. Aby dodać lub zmienić zasady automatycznego czasu na żywo w istniejącej tabeli przesyłania strumieniowego, zaktualizuj auto_ttl parametr w kodzie potoku i ponownie opublikuj potok.
  • Zmiana nazwy kolumn nie jest obsługiwana w przypadku kolumn czasowych zdefiniowanych w zasadach automatycznego czasu wygaśnięcia. Jeśli mapowanie kolumn jest włączone, to ograniczenie nadal ma zastosowanie. Zobacz Zmień nazwę i usuń kolumny za pomocą mapowania kolumn Delta Lake.
  • W rzadkich przypadkach automatyczne operacje TTL mogą powodować konflikty transakcji. Aby zmniejszyć ryzyko konfliktów transakcji, użyj klastrowania dynamicznego, które ogranicza konflikty wynikające ze współbieżności na poziomie wierszy. Zobacz Używaj płynnego grupowania dla tabel.
  • Jeśli obliczenia bezserwerowe nie mogą uzyskać dostępu do usługi ADLS z powodu prywatnego łącza, automatyczne operacje związane z czasem życia (TTL) mogą zakończyć się niepowodzeniem. Zobacz komunikat o błędzie usługi Private Link