Odstraňte nepoužívané datové soubory pomocí vakuového procesu

Odeberte datové soubory, na které už neodkazuje tabulka, která je starší než prahová hodnota uchovávání, spuštěním VACUUM příkazu v tabulce. Pravidelné spouštění VACUUM je důležité pro náklady a dodržování předpisů z následujících důvodů:

  • Odstranění nepoužívaných datových souborů snižuje náklady na cloudové úložiště.
  • Datové soubory odebrané VACUUM můžou obsahovat záznamy, které byly změněny nebo odstraněny. Trvalé odebrání těchto souborů z cloudového úložiště zajistí, že tyto záznamy už nebudou přístupné.

Prediktivní optimalizace se automaticky spouští VACUUM ve spravovaných tabulkách katalogu Unity. Databricks doporučuje povolit prediktivní optimalizace pro všechny spravované tabulky Unity Catalog, aby se zjednodušila údržba dat a snížily náklady na úložiště. Viz prediktivní optimalizaci pro spravované tabulky v katalogu Unity .

Upozornění na vakuum

Výchozí prahová hodnota uchovávání datových souborů po spuštění VACUUM je 7 dnů. Pokud chcete toto chování změnit, přečtěte si Konfigurace uchovávání dat pro časové dotazy.

VACUUM může po odebrání všech souborů z nich ponechat prázdné adresáře. Následné VACUUM operace odstraňují tyto prázdné adresáře.

Některé funkce tabulky, jako jsou vektory odstranění, používají soubory metadat k označení dat jako odstraněných místo přepsání datových souborů. Slouží REORG TABLE ... APPLY (PURGE) k potvrzení těchto odstranění a přepsání datových souborů. Viz Odstranit pouze metadata k vynucení přepsání dat.

Important

  • V Databricks Runtime 13.3 LTS a novějších se VACUUM sémantika pro mělké klony spravovanými tabulkami Unity Catalog liší od ostatních tabulek. Viz Použijte VACUUM s mělkými klony v Katalogu Unity.
  • VACUUM odebere všechny soubory z adresářů, které nejsou spravované Azure Databricks, a ignoruje adresáře začínající na _ nebo .. Pokud ukládáte další metadata, jako jsou kontrolní body strukturovaného streamování v adresáři tabulky, použijte název adresáře, například _checkpoints.
  • Možnost dotazovat verze tabulek starší než doba uchovávání je ztracena po spuštění VACUUM.
  • Soubory protokolu se odstraní automaticky a asynchronně po operacích kontrolních bodů a nejsou řízeny VACUUM. I když je výchozí doba uchovávání souborů protokolu 30 dní, spuštění VACUUM v tabulce odebere datové soubory potřebné pro časovou cestu.
  • Pokud je ukládání do mezipaměti na disku povolené, cluster může obsahovat data ze souborů Parquet, které byly odstraněny pomocí VACUUM. Proto může být možné dotazovat data předchozích verzí tabulek, jejichž soubory byly odstraněny. Restartováním clusteru se odeberou data uložená v mezipaměti. Viz Konfigurace mezipaměti disku.

Příklad syntaxe pro vakuum

Pokud chcete odebrat soubory, které už verze starší než výchozí doba uchovávání dat nevyžadují, spusťte VACUUM bez dalších konfigurací:

VACUUM table_name

Pokud chcete zobrazit náhled seznamu souborů, které se mají odstranit, aniž byste je odebrali, spusťte VACUUM následující příkaz:DRY RUN

VACUUM table_name DRY RUN

Podrobnosti o syntaxi Spark SQL najdete v tématu VACUUM.

Podrobnosti o syntaxi Scala, Java a Python najdete v dokumentaci k rozhraní Delta Lake API.

Note

Ve verzi Databricks Runtime 18.0 a novější použijte deletedFileRetentionDuration vlastnost tabulky k řízení retence. Pro spravované tabulky ve službě Unity Catalog to platí pro Databricks Runtime 13.3 LTS a novější.

Viz Konfigurace uchovávání dat pro časové dotazy.

Plný a lite režim

Important

Tato funkce je ve fázi Public Preview v Databricks Runtime 16.4 LTS a novějších.

Chcete-li zvýšit výkon a snížit náklady tím, že se vyhnete výpisu všech souborů v adresáři tabulky, zadejte do příkazu VACUUM klíčové slovo LITE, čímž spustíte alternativní režim VACUUM. To je užitečné pro velké tabulky, které vyžadují časté VACUUM operace.

LITE režim používá transakční protokol k identifikaci datových souborů, které již nejsou v rámci VACUUM prahové hodnoty uchovávání, a odebere tyto datové soubory z tabulky.

Note

Spuštění VACUUM v režimu LITE neodstraní žádné soubory, na které se v transakčním protokolu neodkazují. Například soubory vytvořené přerušenou transakcí.

K VACUUM v režimu LITE použijte následující syntaxi:

VACUUM table_name LITE

FULL režim je výchozí pro vakuum. Úplný režim můžete explicitně spustit pomocí následujícího příkazu:

VACUUM table_name FULL

Viz VACUUM.

Requirements

LITE režim má následující požadavek:

  • Musíte spustit alespoň jednu úspěšnou operaci VACUUM v rámci nakonfigurované prahové hodnoty uchovávání transakčního protokolu (ve výchozím nastavení 30 dnů).

Pokud tento požadavek není splněn, zobrazí se při pokusu o spuštění VACUUM v LITE režimu následující chybová zpráva. Chcete-li pokračovat, musíte spustit VACUUM v režimu FULL.

VACUUM <tableName> LITE cannot delete all eligible files as some files are not referenced by the log. Please run VACUUM FULL.

Vyčištění pouze mazání metadat k vynucení přepsání dat.

Příkaz REORG TABLE s APPLY (PURGE) syntaxí umožňuje přepisovat data pro použití měkkého odstranění. Měkké mazání nevymaže data ani datové soubory, ale místo toho používá metadata k označení, že se některé hodnoty dat změnily. Viz REORG TABLE.

Operace, které vytvářejí měkké odstranění, zahrnují následující:

  • Vyřazení sloupců s povoleným mapováním sloupců .
  • Jakékoliv úpravy dat, které mají povolené vektory odstranění.

Když jsou povolené obnovitelné odstranění, můžou stará data zůstat fyzicky přítomná v aktuálních souborech tabulky i po odstranění nebo aktualizaci dat. Pokud chcete tato data fyzicky odebrat z tabulky, proveďte následující kroky:

  1. Spusťte REORG TABLE ... APPLY (PURGE). Po tom už stará data v aktuálních souborech tabulky neexistují, ale stále se nacházejí ve starších souborech, které se používají pro časovou cestu.
  2. Spuštěním VACUUM odstraňte tyto starší soubory.

REORG TABLE po dokončení operace vytvoří novou verzi tabulky. Všechny verze tabulek v historii před touto transakcí odkazují na starší datové soubory. Koncepčně se to podobá příkazu OPTIMIZE, kde se datové soubory přepíší, i když data v aktuální verzi tabulky zůstávají konzistentní.

Important

Datové soubory se odstraní pouze v případech, kdy vypršela platnost souborů v souladu s VACUUM dobou uchovávání informací. To znamená, že VACUUM musí být provedeno s určitým zpožděním po REORG, aby bylo zajištěno, že platnost starších souborů již vypršela. Dobu VACUUM uchovávání je možné zkrátit, aby se zkrátila požadovaná doba čekání, a to za cenu snížení maximální historie, která se uchovává.

Doporučení velikosti clusteru pro vakuum

Pokud chcete vybrat správnou velikost VACUUMclusteru, zvažte, že k operaci dochází ve dvou fázích:

  1. Úloha začíná paralelním výpisem souborů ve zdrojovém adresáři pomocí všech dostupných uzlů exekutoru. Úloha porovná tento seznam se všemi soubory aktuálně odkazovanými v transakčním protokolu a identifikuje soubory k odstranění. Řidič během této doby sedí nečinně.
  2. Ovladač vydává příkazy pro odstranění jednotlivých souborů identifikovaných k odstranění. Vzhledem k tomu, že odstranění souboru je operace určená jen pro ovladače, všechny operace probíhají v jednom uzlu, zatímco pracovní uzly jsou nečinné.

Pro optimalizaci nákladů a výkonu Databricks doporučuje následující, zejména pro dlouhotrvající úlohy údržby:

  • Spustit údržbu vakua na clusteru s nastaveným automatickým škálováním pro 1 až 4 pracovní jednotky, kde každá pracovní jednotka má 8 jader.
  • Vyberte ovladač s 8 až 32 jádry. Zvětšete velikost ovladače, abyste se vyhnuli chybám způsobeným nedostatkem paměti (OOM).

Pokud VACUUM operace pravidelně odstraňují více než 10 tisíc souborů nebo trvá déle než 30 minut zpracování, můžete chtít zvětšit velikost ovladače nebo počet pracovníků.

Pokud zjistíte, že při identifikaci souborů, které se mají odebrat, dochází ke zpomalení, přidejte další pracovní uzly. Pokud během spouštění příkazů pro odstranění dojde ke zpomalení, zkuste zvětšit velikost ovladače.

Databricks doporučuje pravidelně spouštět VACUUM na všech tabulkách, aby se snížily nadbytečné náklady na cloudové úložiště dat. Výchozí prahová hodnota uchovávání pro vakuum je 7 dní. Když nastavíte vyšší prahovou hodnotu, získáte přístup k větší historii tabulky, ale zvýšíte počet uložených datových souborů a v důsledku toho zvýšíte náklady na úložiště od poskytovatele cloudu.

Vakuové prahové hodnoty a prahové hodnoty s nízkou retencí

Warning

Databricks důrazně doporučuje nastavit interval uchovávání nejméně 7 dnů. Pokud máte úlohy, které běží několik dní, můžou dlouhotrvající úlohy zapisovat soubory, které ještě nejsou potvrzené. Pokud je doba uchovávání příliš krátká, může VACUUM tyto nepotvrzené soubory odstranit před dokončením úlohy.

Existuje bezpečnostní kontrola, která vám brání ve spuštění nebezpečného VACUUM příkazu. Pokud jste si jistí, že v této tabulce nejsou spuštěné žádné operace, které by trvalo déle, než je interval uchovávání informací, který plánujete zadat, vypněte tuto bezpečnostní kontrolu nastavením konfigurace Sparku retentionDurationCheck na false:

Delta

SET spark.databricks.delta.retentionDurationCheck.enabled = false

Iceberg

SET spark.databricks.iceberg.retentionDurationCheck.enabled = false

Informace o auditu

VACUUM potvrdí informace o auditu do transakčního protokolu. Dotazování událostí auditu pomocí DESCRIBE HISTORY.

Ve výchozím nastavení je protokolování auditu povolené na všech platformách pro spravované tabulky Katalogu Unity. Řízení protokolování vakuového auditu pomocí konfigurace Sparku vacuum.logging :

Delta

SET spark.databricks.delta.vacuum.logging.enabled = true

Iceberg

SET spark.databricks.iceberg.vacuum.logging.enabled = true

Pokud chcete tuto konfiguraci použít pro celý pracovní prostor, použijte zásady clusteru a přidejte do kódu JSON zásad následující:

Delta

{
  "spark_conf.spark.databricks.delta.vacuum.logging.enabled": {
    "type": "fixed",
    "value": "true"
  }
}

Iceberg

{
  "spark_conf.spark.databricks.iceberg.vacuum.logging.enabled": {
    "type": "fixed",
    "value": "true"
  }
}

Viz Vytvoření a správa zásad výpočetních prostředků.

Note

Protokolování auditu je také ve výchozím nastavení povolené pro externí tabulky.