Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сопоставление столбцов Delta Lake позволяет изменять метаданные только для переименования или удаления столбцов без перезаписи файлов данных. Сопоставление столбцов также позволяет использовать в именах столбцов символы, которые Parquet не поддерживает, например пробелы, поэтому вы можете напрямую загружать данные CSV или JSON в Delta Lake без переименования столбцов.
Необходимые условия
Перед включением сопоставления столбцов ознакомьтесь с ограничениями.
Для сопоставления столбцов требуется следующее:
- Протоколы Delta: версия чтения 2 и выше, а версия записи 5 и выше. См. сведения о совместимости функций Delta Lake и протоколах.
- Для чтения таблиц с включенным сопоставлением столбцов требуется Databricks Runtime 10.4 LTS и более поздних версий.
Включение сопоставления столбцов
Используйте следующую команду, чтобы включить сопоставление столбцов в 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.
Перед удалением сопоставления столбцов:
- Приостанавливайте все параллельные операции записи, включая задания потоковой передачи и конвейеры ETL.
- Отключите прогнозную оптимизацию в таблице.
- Для больших таблиц запланируйте эту операцию в периоды низкой активности.
Сопоставление столбцов можно удалить из таблицы с помощью следующей команды:
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.
Включение сопоставления столбцов в активном потоке
Чтобы включить сопоставление столбцов в активном задании потоковой передачи:
- Остановка потока
- Включить сопоставление столбцов в таблице
- Перезапустите поток (первый перезапуск — инициализирует сопоставление столбцов)
- Перезапустите поток снова (второй перезапуск — включает изменения схемы)
Любые дальнейшие изменения схемы (добавление или удаление столбцов или изменение типов столбцов) требуют перезапуска потока.
Пример
Чтобы указать 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")
)
Ограничения
Включение сопоставления столбцов может нарушить следующее:
- Устаревшие приложения, зависящие от имен каталогов при чтении таблиц Delta Lake. Секционированные таблицы с сопоставлением столбцов используют случайные префиксы вместо имен столбцов для каталогов секций. См. статью о совместимости секционирования Delta Lake и Parquet.
- Последующие операции с использованием потока данных об изменениях. См. таблицы с сопоставлением столбцов.
- Потоковая передача считывается из таблицы Delta Lake, включая конвейеры Lakeflow. См. сопоставление столбцов и потоковую передачу.