CONVERT TO DELTA

Platí pro:zaškrtnutá možnost Ano , kontrola Databricks SQL označená ano Databricks Runtime

Převede existující tabulku Parquet na tabulku Delta na místě. Tento příkaz vypíše všechny soubory v adresáři, vytvoří transakční protokol Delta Lake, který tyto soubory sleduje, a automaticky odvodí datové schéma čtením zápatí všech souborů Parquet. Proces převodu shromažďuje statistiky za účelem zlepšení výkonu dotazů u převedené tabulky Delta. Pokud zadáte název tabulky, metastore se také aktualizuje tak, aby odrážel, že tabulka je nyní tabulka Delta.

Tento příkaz podporuje převod tabulek Iceberg, jejichž podkladový formát souboru je Parquet. V tomto případě převaděč generuje transakční protokol Delta Lake na základě nativního manifestu souboru tabulky Iceberg, schématu a informací o dělení.

Syntaxe

CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]

Parametry

  • Table_name

    Volitelně buď kvalifikovaný identifikátor tabulky , nebo cesta k parquet adresáři souboru nebo iceberg . Název nesmí obsahovat dočasnou specifikaci. V případě tabulek Ledových kr můžete použít pouze cesty, protože převod spravovaných tabulek ledu se nepodporuje.

  • ŽÁDNÁ STATISTIKA

    Obejití shromažďování statistik během procesu převodu a rychlejší dokončení převodu. Po převodu tabulky na Delta Lake můžete pomocí příkazu OPTIMIZE ZORDER BY přeuspořádat rozložení dat a vygenerovat statistiky.

  • DĚLENÍ PODLE

    Rozdělte vytvořenou tabulku podle zadaných sloupců. Pokud table_name je cesta, PARTITIONED BY je pro dělená data vyžadována hodnota . table_name Pokud je kvalifikovaný identifikátor tabulky, PARTITIONED BY klauzule je volitelná a specifikace oddílu se načte z metastoru. V obou přístupech proces převodu přeruší a vyvolá výjimku, pokud adresářová struktura neodpovídá zadané nebo načtené PARTITIONED BY specifikaci.

    Poznámka

    Ve verzi Databricks Runtime 11.1 a nižší PARTITIONED BY je povinný argument pro všechna dělená data.

Příklady

Poznámka

Pro tabulky Iceberg nebo tabulky zaregistrované v metastoru nemusíte zadávat informace o dělení.

CONVERT TO DELTA database_name.table_name; -- only for Parquet tables

CONVERT TO DELTA parquet.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`
  PARTITIONED BY (date DATE); -- if the table is partitioned

CONVERT TO DELTA iceberg.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`; -- uses Iceberg manifest for metadata

Upozornění

Všechny soubory, které Delta Lake nesleduje, jsou neviditelné a při spuštění VACUUMse dají odstranit. Během procesu převodu byste se měli vyhnout aktualizaci nebo připojení datových souborů. Po převodu tabulky se ujistěte, že všechny zápisy procházejí přes Delta Lake.

Je možné, že více externích tabulek sdílí stejný základní adresář Parquet. Pokud v takovém případě spustíte příkaz CONVERT na jedné z externích tabulek, nebudete mít přístup k ostatním externím tabulkám, protože jejich základní adresář byl převeden z Parquetu na Delta Lake. Pokud se chcete do těchto externích tabulek znovu dotazovat nebo do nich zapisovat, musíte na nich také spustit příkaz CONVERT .

CONVERT naplní informace katalogu, jako jsou vlastnosti schématu a tabulky, do transakčního protokolu Delta Lake. Pokud už byl podkladový adresář převeden na Delta Lake a jeho metadata se liší od metadat katalogu, convertMetastoreMetadataMismatchException vyvolá se událost .

Pokud chcete CONVERT při používání Databricks Runtime přepsat existující metadata v transakčním protokolu Delta Lake, nastavte konfiguraci spark.databricks.delta.convert.metadataCheck.enabled SQL na false.

Vrácení převodu zpět

Pokud jste provedli operace Delta Lake, jako DELETE je nebo OPTIMIZE , které mohou změnit datové soubory:

  1. Pro uvolňování paměti spusťte následující příkaz:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
  1. <path-to-table>/_delta_log Odstraňte adresář.