ПРЕОБРАЗОВАНИЕ В DELTA
Область применения: Databricks SQL Databricks Runtime
Преобразует существующую таблицу Parquet в разностную таблицу на месте. Эта команда выводит список всех файлов в каталоге, создает журнал транзакций Delta Lake, который отслеживает эти файлы, и автоматически выводит схему данных, считывая нижние колонтитулы всех файлов Parquet. Процесс преобразования собирает статистику для повышения производительности запросов в преобразованной таблице Delta. Если указать имя таблицы, хранилище метаданных также обновляется, чтобы отразить, что таблица теперь является разностной таблицей.
Эта команда поддерживает преобразование таблиц Iceberg, базовый формат файлов которых — Parquet. В этом случае преобразователь создает журнал транзакций Delta Lake на основе собственного манифеста файла таблицы Iceberg, схемы и сведений о секционированиях.
Синтаксис
CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]
Параметры
-
При необходимости — полный идентификатор таблицы или путь к каталогу
parquet
файла илиiceberg
. Имя не должно включать темпоральную спецификацию. Для таблиц айсберга можно использовать только пути, так как преобразование управляемых таблиц айсберга не поддерживается. НЕТ СТАТИСТИКИ
Обход сбора статистики во время процесса преобразования и ускорение преобразования. После преобразования таблицы в Delta Lake можно использовать для
OPTIMIZE ZORDER BY
реорганизации макета данных и создания статистики.-
Секционирование созданной таблицы по указанным столбцам. Если
table_name
является путем,PARTITIONED BY
для секционированных данных требуется .table_name
Если является полным идентификатором таблицы,PARTITIONED BY
предложение является необязательным, а спецификация секции загружается из хранилища метаданных. При любом подходе процесс преобразования прерывается и создает исключение, если структура каталогов не соответствует предоставленной или загруженной спецификацииPARTITIONED BY
.Примечание
В Databricks Runtime 11.1 и ниже
PARTITIONED BY
является обязательным аргументом для всех секционированных данных.
Примеры
Примечание
Вам не нужно предоставлять сведения о секционированиях для таблиц Iceberg или таблиц, зарегистрированных в хранилище метаданных.
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
Предостережения
Любой файл, не отслеживаемый Delta Lake, невидим и может быть удален при запуске VACUUM
. Во время преобразования не следует обновлять или добавлять файлы данных. После преобразования таблицы убедитесь, что все операции записи проходят через Delta Lake.
Возможно, несколько внешних таблиц совместно используют один и тот же базовый каталог Parquet. В этом случае, если вы запускаете CONVERT
одну из внешних таблиц, вы не сможете получить доступ к другим внешним таблицам, так как их базовый каталог был преобразован из Parquet в Delta Lake. Для повторного выполнения запросов к этим внешним таблицам или записи в них также необходимо выполнить команду CONVERT
.
CONVERT
заполняет данные каталога, такие как схема и свойства таблицы, в журнал транзакций Delta Lake. Если базовый каталог уже преобразован в Delta Lake и его метаданные отличаются от метаданных каталога, convertMetastoreMetadataMismatchException
создается исключение .
Если при использовании Databricks Runtime требуется CONVERT
перезаписать существующие метаданные в журнале транзакций Delta Lake, задайте для конфигурации spark.databricks.delta.convert.metadataCheck.enabled
SQL значение false.
Отмена преобразования
Если вы выполнили такие операции Delta Lake, как DELETE
или OPTIMIZE
, которые могут изменить файлы данных:
- Выполните следующую команду для сборки мусора:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
<path-to-table>/_delta_log
Удалите каталог.