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 ]
Параметры
-
Это либо идентификатор таблицы, который необязательно указывать, либо путь к каталогу с файлом
parquet
илиiceberg
. Имя не должно содержать временную спецификацию. Для таблиц Iceberg можно использовать только пути, так как преобразование управляемых таблиц Iceberg не поддерживается. NO STATISTICS
Обходить сбор статистики в процессе преобразования и быстрее завершать преобразование. После преобразования таблицы в 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.