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


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

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

Внимание

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

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

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

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

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

Чтобы включить сопоставление столбцов, используйте следующую команду:

  ALTER TABLE <table-name> SET TBLPROPERTIES (
    'delta.columnMapping.mode' = 'name'
  )

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

  • Программа для чтения версии 2 или выше.
  • Версия программы Writer 5 или более поздняя.

См. сведения о совместимости функций Delta Lake и протоколах.

Отключить сопоставление столбцов

В Databricks Runtime 15.3 и более поздних версиях можно использовать команду DROP FEATURE для удаления сопоставления столбцов из таблицы и понижения уровня протокола таблицы.

Внимание

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

См. Управление функцией удаления таблицы Delta Lake и понижение протокола таблицы.

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

Примечание.

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

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

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

Дополнительные примеры см. в разделе Update Delta Lake table schema.

Отбросить столбцы

Примечание.

Доступно в 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, ...)

Дополнительные сведения см. в разделе Update Delta Lake table schema.

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

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

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

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

Для каждого потока чтения для источника данных должен быть указан свой schemaTrackingLocation. Указанный schemaTrackingLocation должен содержаться в каталоге, указанном для checkpointLocation целевой таблицы для потоковой записи. Для рабочих нагрузок потоковой передачи, которые объединяют данные из нескольких исходных таблиц Delta, необходимо указать уникальные каталоги в каждой исходной 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")
)