CONVERT TO DELTA
Platí pro: , kontrola Databricks SQL 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
-
Volitelně buď kvalifikovaný identifikátor tabulky , nebo cesta k
parquet
adresáři souboru neboiceberg
. 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.-
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í VACUUM
se 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:
- Pro uvolňování paměti spusťte následující příkaz:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
<path-to-table>/_delta_log
Odstraňte adresář.