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

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

Необходимые условия

Перед включением сопоставления столбцов ознакомьтесь с ограничениями.

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

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

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

CREATE table <table-name> (
  id INT,
  name STRING
)
USING DELTA
TBLPROPERTIES (
  'delta.columnMapping.mode' = 'id'
);

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

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

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

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

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

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

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

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

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

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

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

Режимы сопоставления столбцов

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

  • none (по умолчанию): сопоставление столбцов не включено. Имена столбцов подчиняются ограничениям Parquet для именования.
  • name: это позволяет переименовать и удалять только метаданные столбцов и разрешает специальные символы в именах столбцов. name режим можно задать в новых и существующих таблицах.
  • id: это позволяет переименовать и удалять только метаданные столбцов и разрешает специальные символы в именах столбцов. id режим должен быть задан для создания таблицы и не может быть задан в существующих таблицах.

Примечание.

Databricks рекомендует id режим для большинства вариантов использования в целях совместимости. Однако режим name автоматически устанавливается, если вы не предоставляете значение для delta.columnMapping.mode и включаете функции совместимости с Iceberg, такие как UniForm.

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

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

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

Предупреждение

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

Параллельные операции записи могут вызывать ConcurrentModificationException.

Перед удалением сопоставления столбцов:

  1. Приостанавливайте все параллельные операции записи, включая задания потоковой передачи и конвейеры ETL.
  2. Отключите прогнозную оптимизацию в таблице.
  3. Для больших таблиц запланируйте эту операцию в периоды низкой активности.

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

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

Сведения об удалении сопоставления столбцов и понижении уровня протокола таблицы см. в разделе "Поддержка совместимости".

Поддержка совместимости

В Databricks Runtime 15.4 LTS и более поздних версиях можно использовать команду DROP FEATURE для удаления сопоставления колонок и понижения версии протокола таблицы, сохраняя совместимость со средствами чтения, использующими Databricks Runtime 10.3 и более ранние версии.

Important

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

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

Сопоставление столбцов и потоковая передача

Неаддитивные изменения в схеме, такие как переименование или удаление столбцов, могут нарушить потоковое чтение. Используйте параметр, schemaTrackingLocation чтобы разрешить Delta Lake отслеживать изменения схемы и предотвращать сбои потока.

Configuration

При настройке schemaTrackingLocation:

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

Чтобы просмотреть полный список параметров потоковой передачи Delta Lake, см. раздел Delta Lake.

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

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

  1. Остановка потока
  2. Включить сопоставление столбцов в таблице
  3. Перезапустите поток (первый перезапуск — инициализирует сопоставление столбцов)
  4. Перезапустите поток снова (второй перезапуск — включает изменения схемы)

Любые дальнейшие изменения схемы (добавление или удаление столбцов или изменение типов столбцов) требуют перезапуска потока.

Пример

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

checkpoint_path = "/path/to/checkpointLocation"

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

Ограничения

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

Дополнительные ресурсы