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


Настройка автоматизированной статистики таблиц в Fabric Spark и управление ими

Применимо к:✅ Проектирование и обработка данных в 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
  • Изменение порядка столбцов или изменения конфигурации требуют полной перезаписи для обновления статистики