ПРЕОБРАЗОВАНИЕ В 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 ]

Параметры

  • table_name

    При необходимости — полный идентификатор таблицы или путь к каталогу 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 , которые могут изменить файлы данных:

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