Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В Databricks Runtime 16.4 LTS и более поздних версиях можно задавать правила сопоставления для строковых столбцов в таблицах Delta Lake, чтобы управлять сравнением строк и порядком сортировки на уровне отдельных столбцов, например включить сравнение без учета регистра или сортировку с учетом языковых параметров.
Полное описание типов сортировки, соглашений об именовании и правилах приоритета см. в разделе " Параметры сортировки".
По умолчанию Delta Lake задает сортировку для строковых полей на UTF8_BINARY.
Important
Включение параметров сортировки добавляет в вашу таблицу Delta Lake функцию таблицы collations writer, что влияет на совместимость с внешними считывателями и другими функциями платформы. Ознакомьтесь с разделом "Ограничения" прежде чем включить сопоставление в продукционных таблицах.
Создание таблицы с параметрами сортировки
Параметры сортировки можно указать на уровне столбца при создании новой таблицы. Упорядочивание можно применять к строковым столбцам верхнего уровня и строковым полям внутри вложенных типов.
CREATE TABLE catalog.schema.my_table (
id BIGINT,
name STRING COLLATE UTF8_LCASE,
metadata STRUCT<label: STRING COLLATE UNICODE>,
tags ARRAY<STRING COLLATE UTF8_LCASE>,
properties MAP<STRING, STRING COLLATE UTF8_LCASE>
) USING delta
Замечание
MAP ключи не могут использовать сортировку. Только MAP значения поддерживают сортировку строк.
Изменение сортировки в существующем столбце
Параметры сортировки существующего столбца можно изменить с помощью ALTER TABLE.
Например, чтобы задать для столбца параметры сортировки без учета регистра:
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_LCASE
Например, чтобы вернуть для столбца двоичную сортировку по умолчанию:
--
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY
Обновление статистики и структуры данных после изменения сортировки
Изменение параметров сортировки столбца не перезаписывает существующие данные или обновляет статистику. Запросы возвращают правильные результаты немедленно в соответствии с новыми параметрами сортировки, но пропуск файлов и кластеризация могут быть менее эффективными, пока не выполните следующие действия:
- Обновите статистику пропуска файлов для столбца:
ANALYZE TABLE my_table COMPUTE DELTA STATISTICS
- Если в таблице используется кластеризация жидкости, переопределите макет кластеризации:
OPTIMIZE FULL my_table
- Если в таблице используется ZORDER, отключите добавочную оптимизацию и переопределите все файлы:
SET spark.databricks.optimize.incremental = false;
OPTIMIZE my_table ZORDER BY zorder_column;
Пропуск этих шагов не приводит к неправильным результатам, но может снизить производительность запросов на исторические данные до следующей полной перезаписи.
Параметры сортировки всегда соблюдаются платформой Azure Databricks в результатах запроса.
Отключение сортировки для таблицы
Чтобы удалить функцию таблицы сортировки, задайте для каждого столбца сортировки значение UTF8_BINARY.
Сначала выполните следующую команду для каждого столбца с сортировкой:
ALTER TABLE my_table ALTER COLUMN name TYPE STRING COLLATE UTF8_BINARY
Затем удалите функцию таблицы:
ALTER TABLE my_table DROP FEATURE collations
Дополнительные сведения см. в разделе Drop a Delta Lake table feature and downgrade table protocol.
Эволюция схемы и коллация
При изменении схемы добавляются или объединяются столбцы с указанными параметрами сортировки, применяются следующие правила:
- Если исходный столбец уже существует в целевой таблице, параметры сортировки целевой таблицы для этого столбца сохраняются. Игнорируется коллация исходного столбца.
- Если исходный столбец является новым и имеет заданный параметры сортировки, целевая таблица принимает параметры сортировки для нового столбца.
- Если в целевой таблице функция таблицы
collationsеще не включена, то добавление столбца с сортировкой автоматически активирует ее.
Ограничения
Следующие ограничения применяются к таблицам Delta Lake с включенным параметром сортировки:
Совместимость и взаимодействие:
- Внешние читатели, которые не распознают
collationsфункцию таблицы, возвращаютсяUTF8_BINARY, что может привести к некорректным порядкам сортировки или сравнениям. - OpenSharing не поддерживает общий доступ к отдельным секциям в столбцах сортировки, отличных от по умолчанию. Вместо этого поделитесь таблицей.
- UniForm не поддерживается для таблиц с параметрами сортировки.
- Таблицы Delta Lake, созданные внешне с параметрами сортировки, не распознаваемыми databricks Runtime, вызывают исключение при запросе.
- API OSS Delta Lake для Scala или Python не поддерживают коллацию. Используйте API Spark SQL или DataFrame.
Ограничения запросов и функций:
- Распределенные столбцы не могут использоваться в
CHECKограничениях - Столбцы с указанным коллатором не могут быть использованы в генерируемых выражениях столбцов
- Упорядоченные столбцы не могут использоваться с индексами фильтров Блума (устаревший)
- Столбцы со свёртками нельзя использовать в запросах с отслеживанием состояния структурированной потоковой передачи (агрегации, соединения, дедупликация)
-
MAPКлюч не может быть отсортированной строкой. ТолькоMAPзначения поддерживают сортировку