Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Жидкая кластеризация — это гибкая стратегия организации данных для таблиц Delta в Microsoft Fabric. Вместо статического разбиения на разделы в стиле Hive и ручного поддержания Z-Order используется декларативная кластеризация, устойчивая к изменениям. Вы определяете, какие столбцы нужно кластерировать, а среда выполнения Spark Fabric автоматически обрабатывает макет физических данных.
Используйте эту статью, чтобы:
- Узнайте, как работает кластеризация жидкости и когда его использовать.
- Сравните кластеризацию жидкости с секционированием и Z-Order.
- Настройте кластеризацию в таблицах.
- Общие сведения о добавочной кластеризации жидкости (среда выполнения 2.0+).
- Настройте поведение кластеризации с помощью конфигураций сеансов.
Что такое кластеризация жидкости?
Жидкая кластеризация организует данные в файлах Delta-таблиц так, чтобы строки со схожими значениями в столбцах кластеризации размещались вместе. Такая схема обеспечивает более эффективный пропуск файлов во время выполнения запроса: когда запрос фильтрует по столбцам кластеризации, движок считывает только те файлы, диапазоны значений в которых соответствуют предикату, пропуская остальные.
В отличие от секционирования, кластеризация жидкости:
- Не создает структуры физического каталога для каждого значения столбца.
- Не требуется выбирать столбцы кластеризации во время создания таблицы (их можно изменить позже).
- Обрабатывает столбцы с высокой кардинальностью, не создавая потенциальных проблем с большим количеством мелких файлов из-за тысяч крошечных партиций.
- Применяет оптимизацию макета во время
OPTIMIZE, а не во время записи.
Преимущества по сравнению с секционированием и Z-Order
Кластеризация Liquid обеспечивает значительные преимущества для секционирования в стиле Hive и Z-Order с точки зрения гибкости, обслуживания и обработки изменяющихся шаблонов данных.
По сравнению с секционированием в стиле Hive
| Аспект | Секционирование в стиле Hive | Кластеризация жидкости |
|---|---|---|
| Гранулярность | Один каталог на отдельное значение (или сочетание) | Диапазоны значений на уровне файла, без каталогов |
| Высокая кратность | Создает тысячи небольших файлов и каталогов | Естественно работает; распределяет данные по файлам оптимального размера |
| Изменения столбцов | Требуется полная перезапись таблицы |
ALTER TABLE ... CLUSTER BY применяется к следующему OPTIMIZE |
| Путь записи | Столбец секционирования должен быть известен во время записи | Кластеризацию любого столбца можно выполнить позже |
| Проблема с небольшими файлами | Характерно для потоковой передачи данных или частых вставок данных | Управление с помощью OPTIMIZE сжатия |
По сравнению с Z-Order
| Аспект | Z-Order (порядок по оси Z) | Кластеризация жидкости |
|---|---|---|
| Изменения столбцов | Необходимо повторно запустить OPTIMIZE ZORDER BY (...) с новыми столбцами |
ALTER TABLE ... CLUSTER BY сохраняет определение |
| Добавочная поддержка | Нет добавочного режима; использование WHERE для ограничения области вручную |
Добавочный режим (среда выполнения 2.0+) обрабатывает только новые, измененные или неработоспособные файлы автоматически |
| Metadata | Нет определения постоянного столбца | Кластеризация столбцов, хранящихся в метаданных таблицы |
| Многоколоночный макет | Кривая Z-Order, примененная во время оптимизации | Z-Order для одного столбца кластеризации; Кривая Хилберта для 2+ столбцов, обеспечивающая оптимизированную локализацию данных |
Кластеризация Liquid использует Z-Order для макетов с одним столбцом и кривую Хилберта для макетов с двумя и более столбцами, что является улучшением по сравнению с Z-Order, где для многомерной кластеризации применяется только кривая Z-Order. Жидкая кластеризация объединяет оба алгоритма в рамках инкрементной среды с учетом метаданных, что снижает текущие затраты на сопровождение.
Создание кластеризованной таблицы с жидкостью
Определите столбцы кластеризации с помощью CLUSTER BY предложения при создании таблицы:
-- Create a new clustered table
CREATE TABLE dbo.sales (
order_id BIGINT,
order_date DATE,
region STRING,
amount DECIMAL(10,2)
) CLUSTER BY (order_date, region);
-- Create from query results
CREATE TABLE dbo.sales_clustered
CLUSTER BY (order_date, region)
AS SELECT * FROM raw_sales;
-- Enable on existing table
ALTER TABLE dbo.sales_txn CLUSTER BY (order_date, region);
Изменение столбцов кластеризации
В отличие от секционирования, можно изменять столбцы кластеризации в любое время без перезаписи данных:
-- Change clustering columns
ALTER TABLE sales CLUSTER BY (region, product_category);
-- Remove clustering (table becomes unclustered)
ALTER TABLE sales CLUSTER BY NONE;
После изменения столбцов кластеризации новая схема размещения будет применена при следующем запуске OPTIMIZE. Существующие файлы сохраняют прежнюю структуру, пока не будут повторно кластеризованы.
Применение кластеризации с помощью OPTIMIZE
Кластеризация применяется во время OPTIMIZE команды. Нет необходимости указывать столбцы в OPTIMIZE инструкции, так как определение кластеризации хранится в метаданных таблицы:
-- Cluster the table using the defined clustering columns
OPTIMIZE sales;
-- Recluster partial Z-Cubes and Z-Cubes with different clustering keys or clustering providers
OPTIMIZE sales FULL;
Используйте OPTIMIZE FULL, когда вы меняете ключи кластеризации и хотите перестроить Z-Cubes, которые не соответствуют текущей стратегии кластеризации.
Z-Cube — это логическая единица, которую жидкая кластеризация использует для группировки файлов с одинаковыми столбцами кластеризации. Данные кластеризованы в один Z-Куб до изменения ключей кластера или объем данных превышает 100 ГБ.
Tip
Начиная с Fabric Runtime 2.0, собственная среда выполнения поддерживает выполнение OPTIMIZE для таблиц с liquid-кластеризацией, обеспечивая повышение производительности многомерной кластеризации на 30–50%. Более ранние версии среды выполнения переключаются на обычное неускоренное выполнение Spark.
Как работает кластеризация жидкости
При запуске OPTIMIZE в кластеризованной таблице с жидкостью происходит следующее:
-
Выбор файла: подсистема выбирает файлы, необходимые для кластеризации.
- В Runtime 2.0+ (стратегия инкрементальной кластеризации) выбираются только некластеризованные, поврежденные, небольшие файлы или файлы векторов удаления.
- В Runtime 1.3 выбираются все файлы в каждом Z-Cube размером менее 100 ГБ, независимо от того, насколько хорошо они уже кластеризованы.
- Упаковка корзин: выбранные файлы группируются в ячейки, предназначенные для оптимального размера выходного файла.
- Повторное разбиение: данные в каждом сегменте переразбиваются с использованием пространственно-заполняющей кривой (кривая Гильберта для нескольких столбцов, кривая Z-Order для одного столбца).
- Запись файлов: переразбитые данные записываются в виде новых файлов с узкими диапазонами значений в столбцах кластеризации.
- Обновление метаданных: Журнал Delta фиксирует замену файлов, помечая новые файлы метаданными кластеризации.
Результатом является файлы с диапазонами значений, не перекрывающимися (или минимально перекрывающимися) в столбцах кластеризации, что позволяет обработчику пропускать файлы, которые не соответствуют предикатам запросов.
Предостережение
Fabric runtime 1.3 (Delta 3.2): используйте кластеризацию жидкости с осторожностью. В этой среде выполнения жидкая кластеризация использует стратегию полной перезаписи Z-Cube — при каждом запуске перезаписывается каждый файл в Z-Cube. Z-куб сохраняется (пропускается) только если его размер превышает 100 ГБ. Для таблиц меньше 100 ГБ полная перезапись означает, что каждый OPTIMIZE запуск перезаписывает все данные таблицы, даже если данные уже хорошо кластеризованы. Это приводит к серьезной амплификации записи.
- Не используйте автоматическую компактизацию вместе с жидкой кластеризацией в Runtime 1.3. Каждый триггер автоматического сжатия может привести к перезаписи полной таблицы, а не только кластеризации новых и измененных данных.
- Избегайте выполнения
OPTIMIZEпосле каждой операции записи. В Runtime 1.3 выполняйте кластеризацию только в рамках стратегически запланированных, целенаправленных запусков и допускайте меньшую актуальность результатов кластеризации в промежутках между ними.
Инкрементная жидкостная кластеризация, которая устраняет это усиление записи, доступна только начиная с Fabric Runtime 2.0.
Инкрементальная кластеризация жидкости
Начиная с Fabric Runtime 2.0 (Delta 4.1), кластеризация жидкости использует стратегию кластеризации incremental по умолчанию. Добавочная стратегия является значительным улучшением стандартного поведения кластеризации.
Important
Добавочная кластеризация жидкости доступна только в Fabric Runtime 2.0 и более поздних версий. В более ранних средах исполнения OPTIMIZE использует стандартное поведение (с полной перезаписью), при котором все файлы в Z-Cube перезаписываются при каждом запуске.
Почему стратегия добавочного кластеризации имеет значение
Стандартный алгоритм кластеризации перезаписывает все файлы в Z-Кубе (до 100 ГБ) во всех OPTIMIZE запусках независимо от того, хорошо ли они кластеризованы. Для таблицы, получающей небольшие добавления, стоимость кластеризации увеличивается линейно с размером таблицы, а не с объемом новых данных.
Добавочный режим решает проблему полной перезаписи, выбрав только файлы, которые фактически нуждаются в кластеризации:
- Некластеризованные файлы: только что записанные данные без кластеризации метаданных
- Небольшие файлы: файлы ниже порогового размера целевого файла
- Файлы с векторами удаления: файлы с накопленными удалениями, превышающими порог очистки
Файлы, которые уже хорошо кластеризованы и имеют подходящий размер, полностью пропускаются.
Автоматическая рекластеризация
Инкрементная жидкостная кластеризация включает автоматическое обнаружение перекрытий, известное как автоматическая рекластеризация, чтобы поддерживать качество кластеризации с течением времени. По мере поступления новых данных между диапазонами значений в файлах может возникать перекрытие, что снижает эффективность пропуска данных. Автокластеризирование обнаруживает перекрывающиеся диапазоны значений в файлах и выборочно удаляет только затронутые файлы.
Автоматическая перекластеризация выполняется автоматически как часть OPTIMIZE при появлении новых или изменённых данных для кластеризации. Не требуется ни ручного вмешательства, ни запланированной полной перекластеризации. Стратегия добавочного кластеризации поддерживает практически оптимальное качество кластеризации по мере развития данных.
Вернуться к режиму полной перезаписи
Если необходимо отключить стратегию добавочного кластеризации и использовать поведение полной перезаписи, задайте следующую конфигурацию:
SET spark.microsoft.delta.optimize.clustering.strategy.incremental = FALSE;
OPTIMIZE sales;
Либо используйте OPTIMIZE FULL для однократной полной перекластеризации без изменения параметров сеанса:
OPTIMIZE sales FULL;
Note
Стратегия инкрементной кластеризации намеренно допускает незначительное отклонение от теоретически оптимальной схемы размещения, чтобы значительно снизить усиление записи. Выполнение OPTIMIZE FULL устраняет этот разрыв, полностью перестраивая Z-Cubes до теоретического оптимума, однако ценой более высоких затрат на запись.
Справочник по конфигурации
Следующие конфигурации сеанса управляют поведением жидкой кластеризации в Fabric Runtime 2.0+.
Инкрементальная кластеризация
| Конфигурация | Тип | По умолчанию | Description |
|---|---|---|---|
spark.microsoft.delta.optimize.clustering.strategy.incremental |
Boolean | true |
Главный переключатель инкрементной кластеризации. Когда true, OPTIMIZE обрабатывает только некластеризованные, повреждённые, небольшие файлы и файлы с векторами удаления. Когда falseвсе файлы для Z-Кубов размером менее 100 ГБ перезаписываются (стандартное поведение). |
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster |
Boolean | true |
Включает автоматическое обнаружение и повторную кластеризацию файлов с перекрывающимися диапазонами данных. Применяется только в том случае, если включена добавочная кластеризация. |
Автоматическая настройка рекластеризации
Эти настройки управляют чувствительностью и охватом автоматической перекластеризации. Значения по умолчанию подходят для большинства рабочих нагрузок. Измените их только в том случае, если необходимо изменить компромисс между качеством кластеризации и амплификацией записи.
| Конфигурация | Тип | По умолчанию | Description |
|---|---|---|---|
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOffendingFiles |
Int | 4 |
Минимальное количество перекрывающихся файлов, необходимое для запуска повторной кластеризации. При более низких значениях рекластеризация выполняется раньше (лучшая производительность запросов, более высокая стоимость записи). Должно быть ≥ 2. |
spark.microsoft.delta.optimize.clustering.strategy.incremental.autoRecluster.minOverlapThreshold |
Double | 0.75 |
Порог оценки перекрытия параметров кластеризации. Пары файлов с оценкой выше этого значения считаются пересекающимися. Должен находиться в диапазоне (0.25, 1.0]. Более низкие значения более агрессивны. |
Выбор столбцов кластеризации
Для получения наилучших результатов выберите столбцы кластеризации на основе наиболее распространенных шаблонов фильтров запросов:
-
Выберите 1–4 столбца , которые часто отображаются в
WHEREпредложениях. Чем больше столбцов, тем ниже эффективность пропуска файлов для каждого столбца при использовании пространственно-заполняющей кривой и тем больше времени требуется на кластеризацию данных. - Учитывайте кардинальность столбца. Столбцы с низкой кардинальностью образуют меньше различных диапазонов значений, что снижает эффективность пропуска файлов в сочетании с ключами кластеризации с высокой кардинальностью.
-
Порядок столбцов не влияет на кластеризацию. Порядок столбцов, указанных после
CLUSTER BY, не влияет на результирующую многомерную кластеризацию.
Поддерживаемые типы столбцов
Не все типы столбцов можно использовать в качестве ключей кластеризации. Механизм оценивает тип данных каждого столбца, чтобы определить, соответствует ли он требованиям.
Всегда допустимы (атомарные типы):
-
NumericType(ByteType,ShortType,IntegerType,LongType,FloatType,DoubleType,DecimalType) DateTypeTimestampTypeTimestampNTZTypeStringType
Условно допустимо:
Note
Следующие типы можно включить, начиная с Fabric Spark Runtime 2.0 (Delta 4.1)
-
StructType: если включёнspark.microsoft.delta.clusteredTable.complexTypes.enabledи все конечные поля сами являются допустимыми типами. -
ArrayType: еслиspark.microsoft.delta.clusteredTable.complexTypes.enabledвключено и тип элемента поддерживается. -
MapType: еслиspark.microsoft.delta.clusteredTable.complexTypes.enabledвключен, и типы ключей и значений могут быть упорядочены и допустимы.
Не имеет права:
BinaryTypeBooleanTypeNullType
Сведения об эквивалентных допустимых типах, используемых в статистике на уровне файлов, см. в разделе Пропуск файлов — допустимые типы данных.
Взаимодействие с другими функциями
| Функция | Поведение |
|---|---|
| Секционирование | Несовместимо. Для пропуска файлов рекомендуется использовать жидкую кластеризацию вместо разбиения на разделы. |
| Z-Order | Несовместимо. Для пропуска файлов рекомендуется использовать Liquid Clustering вместо Z-Order. |
| Быстрая оптимизация | Совместимо, начиная с Runtime 2.0. В более ранних средах выполнения быстрая оптимизация не влияет на кластеризованные таблицы с жидкостью. Во время OPTIMIZEпропускает кластеризацию, если недостаточно небольших файлов или недостаточно данных для создания выходного файла здорового размера. |
| Адаптивный размер целевого файла | Совместимо. Целевой размер файла, заданный адаптивной оценкой, используется в качестве целевого размера для кластеризации. |
| Оптимизация записи | Совместимо. Создает консолидированные файлы при записи, которые затем кластеризованы во время OPTIMIZE. |
| Автоматическое сжатие | Не используйте кластеризацию жидкости в среде выполнения 1.3 или более ранней версии. В этих средах выполнения каждый триггер автоматического сжатия перезаписывает все данные в Z-Cubes меньше 100 ГБ, что приводит к серьезной амплификации записи. Начиная с Runtime 2.0+, поддерживается автоматическая компактизация: инкрементальная кластеризация обеспечивает перезапись только новых или проблемных файлов. Автоматическое уплотнение отвечает за объединение мелких файлов; OPTIMIZE отвечает за схему кластеризации. |
| Векторы удаления | Файлы, превышающие пороговое значение удаленных строк, выбираются для кластеризации независимо от состояния кластеризации. |
| V-Order | Совместимо. V-Order и liquid clustering работают по разным осям (внутреннее расположение данных в файле vs. диапазоны значений между файлами). Оба могут применяться вместе. |
Лучшие практики
-
Регулярно запускайте
OPTIMIZEпосле пакетных записей или по расписанию для потоковых таблиц — но только в Runtime 2.0+, где стратегия инкрементальной кластеризации делает частые запуски малозатратными. В Runtime 1.3 и более ранних версиях каждый запускOPTIMIZEперезаписывает все данные в Z-Cubes объёмом менее 100 ГБ, поэтому такие запуски следует выполнять осознанно и редко. -
Используйте
OPTIMIZE FULLумеренно. Используйте это только после изменения столбцов кластеризации или если требуется однократный сброс качества. - Отслеживайте качество кластеризации, проверяя метрики сканирования запросов (отсканированные файлы и общие файлы) в пользовательском интерфейсе Spark или планах запросов.
- Используйте вместе с оптимизацией записи при потоковых нагрузках, чтобы каждый микропакет создавал приемлемое количество файлов для кластеризации.