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


Поддержка сортировки для 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 не работает с параметрами сортировки.