Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:✅ Проектирование и обработка данных в Microsoft Fabric
Автоматическая статистика таблиц в Microsoft Fabric помогает Spark оптимизировать выполнение запросов, автоматически собирая подробные метрики уровня таблицы. К этим статистическим данным относятся:
- Общее количество строк
- Количество NULL-значений на каждый столбец
- Минимальные и максимальные значения для каждого столбца
- Количество различных значений в каждом столбце
- Средняя и максимальная длина столбцов
По умолчанию эти расширенные статистические данные собираются для первых 32 столбцов (включая вложенные столбцы) каждой таблицы Delta, созданной в Fabric. Собранные данные помогают оптимизатору на основе стоимости Spark улучшить планирование запросов для соединений, фильтров, агрегаций и обрезки разделов.
В результате обеспечивается более высокая производительность и сокращается использование вычислительных ресурсов, причем это происходит без необходимости выполнения вручную ANALYZE TABLE
или сложной конфигурации.
Ключевые преимущества
В этом разделе приводятся сведения о том, почему автоматическая статистика таблиц имеет значение для рабочих нагрузок.
- ~45% более высокое быстродействие при выполнении сложных запросов
- Автоматически включено на новых таблицах Delta
- Улучшение планирования запросов и снижение затрат на вычисление
- Поддерживает подсчет уникальных значений, минимальные/максимальные значения, подсчет NULL значений и метрики длины столбца.
- Хранящиеся в формате Parquet, чтобы избежать больших двоичных файлов данных
Принцип работы
Вот что происходит за кулисами, когда Fabric Spark собирает статистику:
- Количество строк
- Число значений NULL на столбец
- Минимальные и максимальные значения для каждого столбца
- Подсчет уникальных значений в каждом столбце
- Средняя и максимальная длина столбцов
Эти метрики помогают Spark принимать более умные решения о том, как выполнять запросы— улучшение стратегий соединения, очистки секций и производительности агрегирования.
Как включить или отключить
Узнайте, как управлять автоматической сбором статистики с помощью конфигураций сеансов Spark или свойств таблицы.
Конфигурация сеанса
Вы можете включить или отключить расширенную коллекцию статистики и внедрение оптимизатора на уровне сеанса.
Включите расширенную коллекцию статистики:
spark.conf.set("spark.microsoft.delta.stats.collect.extended", "true")
Отключите расширенную коллекцию статистики:
spark.conf.set("spark.microsoft.delta.stats.collect.extended", "false")
Включите внедрение статистики в оптимизатор запросов:
spark.conf.set("spark.microsoft.delta.stats.injection.enabled", "true")
Отключите внедрение статистики
spark.conf.set("spark.microsoft.delta.stats.injection.enabled", "false")
Замечание
Сбор статистики по разностным журналам (spark.databricks.delta.stats.collect
) также должен быть включен (по умолчанию: true).
Свойства таблицы (переопределяет конфигурации сеансов)
Свойства таблицы позволяют управлять сбором статистики в отдельных таблицах, переопределяя параметры сеанса.
Включите таблицу:
ALTER TABLE tableName SET TBLPROPERTIES('delta.stats.extended.collect' = true, 'delta.stats.extended.inject' = true)
Отключите на столе:
ALTER TABLE tableName SET TBLPROPERTIES('delta.stats.extended.collect' = false, 'delta.stats.extended.inject' = false)
Отключите автоматическое задание свойств таблицы при создании:
spark.conf.set("spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation", "false")
Проверка статистики
Вы можете проверить собранную таблицу и статистику столбцов с помощью API Spark, полезных для отладки или проверки.
Проверьте количество строк и размер таблицы (пример Scala):
println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)
Проверьте подробную статистику столбцов:
spark.read.table("tableName").queryExecution.optimizedPlan.stats.attributeStats.foreach { case (attrName, colStat) =>
println(s"colName: $attrName distinctCount: ${colStat.distinctCount} min: ${colStat.min} max: ${colStat.max} nullCount: ${colStat.nullCount} avgLen: ${colStat.avgLen} maxLen: ${colStat.maxLen}")
}
Перекомпьютирование статистики
Иногда статистика может стать устаревшей или частичной, например после изменений схемы или частичных обновлений. Вы можете перекомпьютировать статистику с помощью этих методов.
Перепишите таблицу (примечание: это сбрасывает историю).
spark.read.table("targetTable").write.partitionBy("partCol").mode("overwrite").saveAsTable("targetTable")
Рекомендуемый подход (Fabric Spark >= 3.2.0.19):
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Если схема изменяется (например, вы добавляете или удаляете столбцы), перед повторной компиляцией необходимо удалить старую статистику:
StatisticsStore.removeStatisticsData(spark, "testTable1")
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Использование команды ANALYZE
Команда ANALYZE TABLE
предоставляет ручной способ сбора статистики по всем столбцам, как и Spark с открытым кодом.
Выполните команду:
ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS
Включить внедрение статистики каталога
spark.conf.set("spark.microsoft.delta.stats.injection.catalog.enabled", "true")
Отключите внедрение статистики каталога.
spark.conf.unset("spark.microsoft.delta.stats.injection.catalog.enabled")
Ограничения
Важно понимать текущие ограничения автоматизированной статистики Fabric, чтобы вы могли планировать соответствующим образом.
- Статистика, собранная только во время записи
- Обновления или изменения других обработчиков не агрегируются
- Только первые 32 столбца включены (включая вложенные столбцы)
- Удаление или обновление может привести к устаревшим статистическим данным
- Повторное выполнение не выполняется без перезаписи таблицы или использования API
- Нет интеграции статистики для вложенных столбцов
- Отсутствие резервного механизма для производительности → статистика иногда может привести к регрессиям
-
ANALYZE TABLE
работает только сFOR ALL COLUMNS
- Изменение порядка столбцов или изменения конфигурации требуют полной перезаписи для обновления статистики