Переименование и удаление столбцов с помощью сопоставления столбцов Delta Lake

Внимание

Эта функция предоставляется в режиме общедоступной предварительной версии.

Azure Databricks поддерживает сопоставление столбцов для таблиц Delta Lake, что позволяет изменять только метаданные, чтобы пометить столбцы как удаленные или переименованные без перезаписи файлов данных. Кроме того, пользователи могут называть столбцы таблицы Delta с помощью символов, которые не разрешены Parquet, например пробелы, чтобы пользователи могли напрямую получать данные CSV или JSON в Delta без необходимости переименовать столбцы из-за предыдущих ограничений символов.

Внимание

Включение сопоставления столбцов также позволяет создавать префиксы случайных файлов, что позволяет просматривать данные с помощью секционирования в стиле Hive. См. стратегии секционирования delta Lake и Parquet.

Включение сопоставления столбцов в таблицах может нарушить подчиненные операции, которые зависят от канала данных изменений Delta. Сведения об ограничениях канала изменений для таблиц с включенным сопоставлением столбцов.

Включение сопоставления столбцов в таблицах может нарушить потоковую потоковую передачу чтения из таблицы Delta в качестве источника, в том числе в разностных динамических таблицах. См. раздел Потоковая передача с сопоставлением столбцов и изменениями схемы.

Включение сопоставления столбцов Delta Lake

Внимание

Включение сопоставления столбцов для таблицы обновляет версию таблицы Delta. Это обновление протокола является необратимым. Таблицы с включенным сопоставлением столбцов можно читать только в Databricks Runtime 10.4 LTS и выше.

Для сопоставления столбцов требуются следующие протоколы Delta:

  • Читатель версии 2 или выше.
  • Запись версии 5 или более поздней.

Для таблицы Delta с необходимыми версиями протокола можно включить сопоставление столбцов, установив для nameпараметра delta.columnMapping.mode значение .

Для обновления версии таблицы и включения сопоставления столбцов можно использовать следующую команду:

  ALTER TABLE <table-name> SET TBLPROPERTIES (
    'delta.minReaderVersion' = '2',
    'delta.minWriterVersion' = '5',
    'delta.columnMapping.mode' = 'name'
  )

Примечание.

После включения сопоставления столбцов невозможно отключить. Если вы попытаетесь установить 'delta.columnMapping.mode' = 'none', вы получите ошибку.

Переименование столбца

Примечание.

Доступно в Databricks Runtime 10.4 LTS и более поздних версиях.

Если для таблицы Delta включено сопоставление столбцов, вы можете переименовывать столбцы:

ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name

Дополнительные примеры см. в разделе "Обновление схемы таблицы Delta Lake".

Удаление столбцов

Примечание.

Доступно в Databricks Runtime 11.3 LTS и более поздних версиях.

Если для таблицы Delta включено сопоставление столбцов, вы можете удалить один или несколько столбцов:

ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)

Дополнительные сведения см. в разделе "Обновление схемы таблицы Delta Lake".

Поддерживаемые символы в именах столбцов

Если сопоставление столбцов включено для таблицы Delta, можно включить пробелы и любые из этих символов в имена столбцов таблицы: ,;{}()\n\t=

Потоковая передача с изменениями сопоставления столбцов и схемы

Внимание

Эта функция доступна в общедоступной предварительной версии в Databricks Runtime 13.3 LTS и выше.

Вы можете предоставить расположение отслеживания схем для включения потоковой передачи из разностных таблиц с включенным сопоставлением столбцов. Это преодолевает проблему, при которой изменения схемы, не являющиеся аддитивными, могут привести к сломанным потокам.

Для каждого потока потоковой передачи для источника данных должен быть задан собственный schemaTrackingLocation . Указанный параметр schemaTrackingLocation должен содержаться в каталоге, указанном для checkpointLocation целевой таблицы для потоковой записи.

Примечание.

Для потоковых рабочих нагрузок, объединяющих данные из нескольких исходных разностных таблиц, необходимо указать уникальные каталоги в каждой исходной checkpointLocation таблице.

Этот параметр schemaTrackingLocation используется для указания пути для отслеживания схем, как показано в следующем примере кода:

checkpoint_path = "/path/to/checkpointLocation"

(spark.readStream
  .option("schemaTrackingLocation", checkpoint_path)
  .table("delta_source_table")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .toTable("output_table")
)