Поддержка сортировки для Delta Lake
Параметры сортировки строковых полей в таблицах Delta можно указать в Databricks Runtime 16.1 и выше.
Включение параметров сортировки для таблицы добавляет функцию записи таблицы collations-preview
. Таблицы можно считывать с включенными параметрами сортировки в Databricks Runtime 15.4 и выше. См. Как Azure Databricks управляет совместимостью функций Delta Lake?.
Заметка
По умолчанию Delta Lake задает сортировку для строковых полей на UTF8_BINARY
.
Создание таблицы с сортировкой на уровне столбца
Вы можете создать новую таблицу с параметрами сортировки на уровне столбца с помощью следующей команды:
CREATE TABLE $tableName (
nonCollatedColName STRING,
collatedColName STRING COLLATE UNICODE,
structColName STRUCT<nestedFieldName: STRING COLLATE UNICODE>,
mapColName MAP<STRING, STRING COLLATE UNICODE>,
arrayColName ARRAY<STRING COLLATE UNICODE>
) USING delta
Изменение столбца таблицы для указания сортировки
Можно обновить существующий столбец, чтобы использовать параметры сортировки с помощью следующих команд:
ALTER TABLE tableName ALTER COLUMN columnName TYPE newType
Чтобы удалить сортировку не по умолчанию (если она присутствует):
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY
Чтобы изменить параметры сортировки столбцов на utf8_lcase
:
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE
Изменение сортировки для таблицы не обновляет автоматически статистику или расположение данных для ранее записанных данных. Чтобы улучшить пропускание файла по историческим данным в соответствии с новыми параметрами сортировки, Databricks рекомендует следующее:
- Запустите
ANALYZE table_name COMPUTE DELTA STATISTICS
, чтобы обновить статистику пропуска файлов для существующих файлов данных. - Для таблиц с включенной кластеризации жидкости запустите
OPTIMIZE FULL table_name
для обновления кластеризации жидкости. - Для таблиц, использующих
ZORDER
, выполните следующие действия:Отключите добавочную оптимизацию в сеансе Spark, переопределив конфигурацию Spark по умолчанию с помощью следующей команды:
SET spark.databricks.optimize.incremental=false
Выполните
OPTIMIZE table_name ZORDER BY zorder_column
, чтобы переписать все существующие файлы данных.
Azure Databricks всегда будет соблюдать координацию в результатах запроса.
Отключить сравнение для таблицы
Перед удалением функции сортировки необходимо явно отключить параметры сортировки для каждого строкового столбца в таблице.
Используйте следующий синтаксис, чтобы задать параметры сортировки для столбца UTF8_BINARY
:
ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY
Чтобы удалить функцию таблицы, выполните следующую команду:
ALTER TABLE table_name
DROP FEATURE collations-preview
См. функции таблицы Delta Drop .
Эволюция схемы и коллация
Сортировка взаимодействует с эволюцией схемы с помощью следующих правил:
- Если исходный столбец уже существует в целевой таблице, параметры сортировки столбца в целевой таблице остаются неизменными.
- Если исходный столбец имеет заданный параметры сортировки, столбец, добавленный в целевую таблицу, использует указанное параметры сортировки.
- Если целевая таблица не включает параметры сортировки при добавлении столбца с параметрами сортировки, функция
collations-preview
таблицы включена.
Ограничения
Для таблиц с включенным параметром сортировки существуют следующие ограничения:
- Таблицы Delta, созданные внешними инструментами с упорядочением, не распознаваемым Databricks Runtime, вызывают исключение при попытке запроса.
- Поддержка Delta Sharing отсутствует.
- Коллированные столбцы нельзя использовать с ограничениями
CHECK
. - Сгенерированные столбцы не могут использовать сравнение.
- Столбцы с отсортированными данными нельзя использовать со столбцами индекса фильтра Блума.
- Нет поддержки сортировки в API Delta Lake OSS для Scala или Python. Для включения сортировки необходимо использовать API Spark SQL или DataFrame.
- Динамическая перезапись секций не поддерживается в упорядоченных столбцах.
- Столбцы с сортировкой нельзя ссылаться в запросах с отслеживанием состояния структурированной потоковой передачи.
- Внешние читатели, которые не поддерживают функцию таблицы
collations-preview
, возвращаются к сортировке по умолчаниюUTF8_BINARY
. -
MAP
не может иметь ключ, который является сортированной строкой. - UniForm не работает с параметрами сортировки.