Поделиться через


CONVERT TO DELTA;

Область применения: флажок Databricks SQL флажок Databricks Runtime

Преобразует на месте таблицу Parquet в таблицу Delta. Эта команда выводит список всех файлов в каталоге, создает журнал транзакций Delta Lake, в котором ведется отслеживание этих файлов, и автоматически определяет схему данных, считывая нижние колонтитулы всех файлов Parquet. В процессе преобразования выполняется сбор статистических данных для повышения производительности запросов в преобразованной разностной таблице. Если указать имя таблицы, в хранилище метаданных также будет отражено, что теперь используется разностная таблица.

Эта команда поддерживает преобразование таблиц Iceberg, которые имеют базовый формат Parquet. В этом случае преобразователь создает журнал транзакций Delta Lake на основе манифеста файла, схемы и сведений о секционировании в таблице Iceberg.

Синтаксис

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

Параметры

  • table_name

    Это либо идентификатор таблицы, который необязательно указывать, либо путь к каталогу с файлом parquet или iceberg. Имя не должно содержать временную спецификацию. Для таблиц Iceberg можно использовать только пути, так как преобразование управляемых таблиц Iceberg не поддерживается.

  • NO STATISTICS

    Обходить сбор статистики в процессе преобразования и быстрее завершать преобразование. После преобразования таблицы в Delta Lake можно использовать OPTIMIZE ZORDER BY для реорганизации макета данных и формирования статистики.

  • PARTITIONED 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, которые могут изменить файлы данных:

  1. Выполните следующую команду для сборки мусора:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
  1. Удалите каталог <path-to-table>/_delta_log.