Перейти к основному содержимому
Версия: 2.0.x

Сбор статистики для CBO

В этой теме описывается базовая концепция оптимизатора на основе стоимости (CBO) Selena и как собирать статистику для CBO для выбора оптимального плана запроса. Selena 2.4 вводит гистограммы для сбора точной статистики распределения данных.

Начиная с версии 3.2.0, Selena поддерживает сбор статистики из таблиц Hive, Iceberg и Hudi, уменьшая зависимость от других систем metastore. Синтаксис аналогичен сбору статистики для внутренних таблиц Selena.

Что такое CBO

CBO критически важен для оптимизации запросов. После того как SQL-запрос поступает в Selena, он парсится в логический план выполнения. CBO переписывает и преобразует логический план в несколько физических планов выполнения. Затем CBO оценивает стоимость выполнения каждого оператора в плане (например, CPU, память, сеть и I/O) и выбирает путь запроса с наименьшей стоимостью в качестве финального физического плана.

Selena CBO был запущен в Selena 1.16.0 и включен по умолчанию начиная с версии 1.19. Разработанный на основе фреймворка Cascades, Selena CBO оценивает стоимость на основе различной статистической информации. Он способен выбрать план выполнения с наименьшей стоимостью среди десятков тысяч планов выполнения, значительно повышая эффективность и производительность сложных запросов.

Статистика важна для CBO. Она определяет, является ли оценка стоимости точной и полезной. Следующие разделы подробно описывают типы статистической информации, политику сбора, а также как собирать статистику и просматривать статистическую информацию.

Типы статистической информации

Selena собирает различную статистику в качестве входных данных для оценки стоимости.

Базовая статистика

По умолчанию Selena периодически собирает следующую базовую статистику таблиц и столбцов:

  • row_count: общее количество строк в таблице

  • data_size: размер данных столбца

  • ndv: мощность столбца, то есть количество различных значений в столбце

  • null_count: количество данных со значениями NULL в столбце

  • min: минимальное значение в столбце

  • max: максимальное значение в столбце

Полная статистика хранится в таблице column_statistics базы данных _statistics_. Вы можете просмотреть эту таблицу для запроса статистики таблиц. Ниже приведен пример запроса статистических данных из этой таблицы.

SELECT * FROM _statistics_.column_statistics\G
*************************** 1. row ***************************
table_id: 10174
partition_id: 10170
column_name: is_minor
db_id: 10169
table_name: zj_test.source_wiki_edit
partition_name: p06
row_count: 2
data_size: 2
ndv: NULL
null_count: 0
max: 1
min: 0

Гистограмма

Selena 2.4 вводит гистограммы для дополнения базовой статистики. Гистограмма считается эффективным способом представления данных. Для таблиц со смещенными данными гистограммы могут точно отражать распределение данных.

Selena использует гистограммы равной высоты, которые построены на нескольких корзинах (buckets). Каждая корзина содержит одинаковое количество данных. Для значений данных, которые часто запрашиваются и оказывают значительное влияние на селективность, Selena выделяет отдельные корзины. Больше корзин означает более точную оценку, но может также вызвать небольшое увеличение использования памяти. Вы можете настроить количество корзин и наиболее частых значений (MCVs) для задачи сбора гистограмм.

Гистограммы применимы к столбцам с сильно смещенными данными и частыми запросами. Если данные вашей таблицы равномерно распределены, вам не нужно создавать гистограммы. Гистограммы могут быть созданы только для столбцов числовых типов, DATE, DATETIME или строковых типов.

Гистограммы хранятся в таблице histogram_statistics базы данных _statistics_. Ниже приведен пример запроса статистических данных из этой таблицы:

SELECT * FROM _statistics_.histogram_statistics\G
*************************** 1. row ***************************
table_id: 10174
column_name: added
db_id: 10169
table_name: zj_test.source_wiki_edit
buckets: NULL
mcv: [["23","1"],["5","1"]]
update_time: 2023-12-01 15:17:10.274000

Многостолбцовая совместная статистика

Начиная с версии 3.5.0, Selena поддерживает сбор многостолбцовой совместной статистики. В настоящее время, когда Selena выполняет оценку мощности, оптимизатор в большинстве сценариев предполагает, что несколько столбцов полностью независимы друг от друга, то есть между ними нет корреляции. Однако, если между столбцами есть корреляция, текущий метод оценки может привести к неправильному результату. Это заставляет оптимизатор генерировать неправильный план выполнения. В настоящее время поддерживается только многостолбцовый совместный NDV, и он в основном используется в следующих сценариях для оценки мощности.

  • Оценка нескольких эквивалентных предикатов, соединенных AND.
  • Оценка узлов Agg.
  • Применение к стратегии проталкивания агрегации.

В настоящее время сбор многостолбцовой совместной статистики поддерживает только ручной сбор. Тип по умолчанию - выборочный сбор. Многостолбцовая статистика хранится в таблице multi_column_statistics базы данных _statistics_ в каждом кластере Selena. Запрос вернет информацию, похожую на следующую:

mysql> select * from _statistics_.multi_column_statistics \G
*************************** 1. row ***************************
table_id: 1695021
column_ids: 0#1
db_id: 110099
table_name: db.test_multi_col_stats
column_names: id,name
ndv: 11
update_time: 2025-04-11 15:09:50

Типы и методы сбора

Размер данных и распределение данных постоянно меняются в таблице. Статистика должна регулярно обновляться, чтобы отражать эти изменения данных. Перед созданием задачи сбора статистики вы должны выбрать тип и метод сбора, которые лучше всего подходят для ваших бизнес-требований.

Selena поддерживает полный и выборочный сбор, оба могут выполняться автоматически и вручную. По умолчанию Selena автоматически собирает полную статистику таблицы. Она проверяет наличие обновлений данных каждые 5 минут. Если обнаружено изменение данных, сбор данных будет автоматически запущен. Если вы не хотите использовать автоматический полный сбор, вы можете настроить задачу сбора.

Тип сбораМетод сбораОписаниеПреимущества и недостатки
Полный сборАвтоматический/ручнойСканирует всю таблицу для сбора статистики. Статистика собирается по partition. Если в partition нет изменений данных, данные не будут собираться из этого partition, что снижает потребление ресурсов. Полная статистика хранится в таблице _statistics_.column_statistics.Преимущество: Статистика точная, что помогает CBO делать точную оценку. Недостаток: Потребляет системные ресурсы и медленный. Начиная с версии 2.5, Selena позволяет указать период автоматического сбора, что снижает потребление ресурсов.
Выборочный сборАвтоматический/ручнойРавномерно извлекает N строк данных из каждого partition таблицы. Статистика собирается по таблице. Базовая статистика каждого столбца хранится как одна запись. Информация о мощности (ndv) столбца оценивается на основе выборочных данных, что неточно. Выборочная статистика хранится в таблице _statistics_.table_statistic_v1.Преимущество: Потребляет меньше системных ресурсов и быстрый. Недостаток: Статистика неполная, что может повлиять на точность оценки стоимости.

Начиная с версии 3.5.0, как выборочная, так и полная статистика сбора хранится в таблице _statistics_.column_statistics. Это связано с тем, что текущий оптимизатор будет фокусироваться на последней собранной статистике при оценке мощности, в то время как каждый раз, когда фоновый автоматический сбор статистики может использовать другой метод сбора из-за различного состояния здоровья таблицы. Если есть смещение данных, частота ошибок выборочной статистической информации полной таблицы может быть выше, и один и тот же запрос может использовать разную статистическую информацию из-за различных методов сбора, что может привести к генерации оптимизатором неправильного плана выполнения. Поэтому как выборочный сбор, так и полный сбор предполагают, что статистическая информация собирается на уровне partition. Вы можете настроить предыдущий метод сбора и хранения, изменив параметр конфигурации FE statistic_use_meta_statistics на false.

Predicate Column

Начиная с версии 3.5.0, Selena поддерживает сбор статистики Predicate Column.

Predicate Column - это столбец, который часто используется в качестве условия фильтра (предложение WHERE, условие JOIN, столбец GROUP BY, столбец DISTINCT) в запросе. Selena автоматически записывает каждый Predicate Column для таблицы, участвующей в запросе, и сохраняет его в таблице _statistics_.predicate_columns. Запрос вернет следующее:

select * from _statistics_.predicate_columns \G
*************************** 1. row ***************************
fe_id: 127.0.0.1_9011_1735874871718
db_id: 1684773
table_id: 1685786
column_id: 1
usage: normal,predicate,join,group_by
last_used: 2025-04-11 20:39:32
created: 2025-04-11 20:39:53

Вы также можете запросить представление information_schema.column_stats_usage для получения более наблюдаемой информации. В экстремальных сценариях (с большим количеством столбцов) существует большая нагрузка для полного сбора, тогда как в реальности для стабильной рабочей нагрузки вам часто не нужна статистика для всех столбцов, а только для столбцов, участвующих в некоторых ключевых операциях Filter, Join и Aggregation. Поэтому, чтобы сбалансировать стоимость и точность, Selena поддерживает ручной сбор статистики Predicate Column и сбор статистики Predicate Column в соответствии с политикой при автоматическом сборе статистики, избегая сбора статистики всех столбцов в таблице. Каждый узел FE в кластере синхронно обновляет информацию Predicate Column в кэш FE с регулярными интервалами для ускорения использования.

Сбор статистики

Selena предлагает гибкие методы сбора статистики. Вы можете выбрать автоматический, ручной или пользовательский сбор, в зависимости от того, что подходит для ваших бизнес-сценариев.

По умолчанию Selena автоматически собирает полное количество статистики для таблицы на периодической основе. Интервал по умолчанию составляет 10 минут. Если система обнаруживает, что коэффициент обновления данных соответствует условию, сбор будет запущен автоматически. Сбор полной статистики может потреблять много системных ресурсов. Если вы не хотите использовать автоматический полный сбор статистики, вы можете установить параметр конфигурации FE enable_collect_full_statistic в false, и периодическая задача сбора будет изменена с полного сбора статистики на выборочный сбор.

Начиная с версии 3.5.0, Selena автоматически изменит полный сбор на выборочный сбор, если обнаружит, что данные таблицы сильно изменились с момента последнего сбора до текущей таблицы во время автоматического сбора. В случае использования выборочного сбора, если в таблице есть Predicate Column (PREDICATE/JOIN/GROUP BY/DISTINCT), Selena преобразует задачу выборки в полный сбор и соберет статистику Predicate Column для обеспечения точности статистики и не будет собирать статистику всех столбцов в таблице. Вы можете настроить это с помощью параметра конфигурации FE statistic_auto_collect_use_full_predicate_column_for_sample. Кроме того, Selena также переключается с полного сбора всех столбцов на полный сбор Predicate Columns, если количество столбцов в таблице превышает параметр конфигурации FE statistic_auto_collect_predicate_columns_threshold при использовании полного сбора.

Автоматический сбор

Для базовой статистики Selena автоматически собирает полную статистику таблицы по умолчанию, не требуя ручных операций. Для таблиц, для которых статистика не была собрана, Selena автоматически собирает статистику в пределах периода планирования. Для таблиц, для которых статистика была собрана, Selena обновляет общее количество строк и измененных строк в таблицах и регулярно сохраняет эту информацию для определения необходимости запуска автоматического сбора. Гистограммы и многостолбцовая совместная статистика не захватываются текущей задачей автоматического сбора.

Начиная с версии 2.4.5, Selena позволяет указать период сбора для автоматического полного сбора, что предотвращает колебания производительности кластера, вызванные автоматическим полным сбором. Этот период указывается параметрами FE statistic_auto_analyze_start_time и statistic_auto_analyze_end_time.

Условия, которые запустят автоматический сбор:

  • Данные таблицы изменились с момента предыдущего сбора статистики.

  • Время сбора попадает в диапазон настроенного периода сбора. (Период сбора по умолчанию - весь день.)

  • Время обновления предыдущей задачи сбора раньше последнего времени обновления partition.

  • Здоровье статистики таблицы ниже указанного порога (statistic_auto_collect_ratio).

Формула для расчета здоровья статистики:

  1. Если количество partition с обновленными данными меньше 10, формула: 1 - (Количество обновленных строк с момента предыдущего сбора/Общее количество строк).
  2. Если количество partition с обновленными данными больше или равно 10, формула: 1 - MIN(Количество обновленных строк с момента предыдущего сбора/Общее количество строк, Количество обновленных partition с момента предыдущего сбора/Общее количество partition).
  3. Начиная с версии 3.5.0, чтобы определить, является ли partition здоровым или нет, Selena больше не сравнивает время сбора статистической информации со временем обновления данных, а скорее соотношение обновленных строк partition. Вы можете настроить это через параметр конфигурации FE statistic_partition_health_v2_threshold. Также вы можете установить параметр конфигурации FE statistic_partition_healthy_v2 в false, чтобы использовать предыдущее поведение проверки здоровья.

Кроме того, Selena позволяет настраивать политики сбора на основе размера таблицы и частоты обновления таблицы:

  • Для таблиц с небольшим объемом данных **статистика собирается в реальном времени без ограничений, даже если данные таблицы часто обновляются. Параметр statistic_auto_collect_small_table_size можно использовать для определения, является ли таблица малой или большой. Вы также можете использовать statistic_auto_collect_small_table_interval для настройки интервалов сбора для малых таблиц.

  • Для таблиц с большим объемом данных применяются следующие ограничения:

    • Интервал сбора по умолчанию составляет не менее 12 часов, который можно настроить с помощью statistic_auto_collect_large_table_interval.

    • Когда интервал сбора выполнен и здоровье статистики ниже порога для автоматического выборочного сбора, запускается выборочный сбор. Вы можете настроить это поведение с помощью параметра конфигурации FE statistic_auto_collect_sample_threshold. Начиная с версии 3.5.0, выборочный сбор преобразуется в полный сбор Predicate Columns, если выполнены все следующие условия:

      • Predicate Column существует в таблице, и количество Predicate Columns меньше statistic_auto_collect_max_predicate_column_size_on_sample_strategy.
      • Параметр конфигурации FE statistic_auto_collect_use_full_predicate_column_for_sample установлен в true.
    • Когда интервал сбора выполнен и здоровье статистики выше порога для автоматического выборочного сбора (statistic_auto_collect_sample_threshold) и ниже порога автоматического сбора (statistic_auto_collect_ratio), запускается полный сбор.

    • Когда размер partition для сбора данных (statistic_max_full_collect_data_size) больше 100 ГБ, запускается выборочный сбор.

    • Собирается только статистика partition, время обновления которых позже времени предыдущей задачи сбора. Статистика partition без изменения данных не собирается.

  • Для таблиц, которые имеют Predicate Column и общее количество столбцов превышает statistic_auto_collect_predicate_columns_threshold, статистика собирается только для Predicate Column в таблице.

подсказка

После изменения данных таблицы ручной запуск задачи выборочного сбора для этой таблицы сделает время обновления задачи выборочного сбора позже времени обновления данных, что не запустит автоматический полный сбор для этой таблицы в этом периоде планирования.

Автоматический полный сбор включен по умолчанию и выполняется системой с использованием настроек по умолчанию.

В следующей таблице описаны настройки по умолчанию. Если вам нужно изменить их, выполните команду ADMIN SET CONFIG.

Параметр конфигурации FEТипЗначение по умолчаниюОписание
enable_statistic_collectBOOLEANTRUEВключить ли задачи автоматического сбора по умолчанию и пользовательские. Этот переключатель включен по умолчанию.
enable_collect_full_statisticBOOLEANTRUEВключить ли автоматический сбор по умолчанию. Этот переключатель включен по умолчанию.
statistic_collect_interval_secLONG600Интервал для проверки обновлений данных во время автоматического сбора. Единица: секунды.
statistic_auto_analyze_start_timeSTRING00:00:00Время начала автоматического сбора. Диапазон значений: 00:00:00 - 23:59:59.
statistic_auto_analyze_end_timeSTRING23:59:59Время окончания автоматического сбора. Диапазон значений: 00:00:00 - 23:59:59.
statistic_auto_collect_small_table_sizeLONG5368709120Порог для определения, является ли таблица малой для автоматического полного сбора. Таблица, размер которой больше этого значения, считается большой таблицей, тогда как таблица, размер которой меньше или равен этому значению, считается малой таблицей. Единица: байт. Значение по умолчанию: 5368709120 (5 ГБ).
statistic_auto_collect_small_table_intervalLONG0Интервал для автоматического сбора полной статистики малых таблиц. Единица: секунды.
statistic_auto_collect_large_table_intervalLONG43200Интервал для автоматического сбора полной статистики больших таблиц. Единица: секунды. Значение по умолчанию: 43200 (12 часов).
statistic_auto_collect_ratioFLOAT0.8Порог для определения, является ли статистика для автоматического сбора здоровой. Если здоровье статистики ниже этого порога, запускается автоматический сбор.
statistic_auto_collect_sample_thresholdDOUBLE0.3Порог здоровья статистики для запуска автоматического выборочного сбора. Если значение здоровья статистики ниже этого порога, запускается автоматический выборочный сбор.
statistic_max_full_collect_data_sizeLONG107374182400Размер данных partition для автоматического сбора для сбора данных. Единица: байт. Значение по умолчанию: 107374182400 (100 ГБ). Если размер данных превышает это значение, полный сбор отменяется и выполняется выборочный сбор.
statistic_full_collect_bufferLONG20971520Максимальный размер буфера, занимаемый задачами автоматического сбора. Единица: байт. Значение по умолчанию: 20971520 (20 МБ).
statistic_collect_max_row_count_per_queryINT5000000000Максимальное количество строк для запроса для одной задачи analyze. Задача analyze будет разделена на несколько запросов, если это значение превышено.
statistic_collect_too_many_version_sleepLONG600000Время сна задач автоматического сбора, если таблица, на которой выполняется задача сбора, имеет слишком много версий данных. Единица: мс. Значение по умолчанию: 600000 (10 минут).
statistic_auto_collect_use_full_predicate_column_for_sampleBOOLEANTRUEПреобразовывать ли задачу автоматического полного сбора в полный сбор Predicate Column, когда она попадает в политику выборочного сбора.
statistic_auto_collect_max_predicate_column_size_on_sample_strategyINT16Когда задача автоматического полного сбора попадает в политику выборочного сбора, если таблица имеет необычно большое количество Predicate Columns и превышает этот параметр конфигурации, задача не переключится на полный сбор Predicate Columns, а сохранит выборочный сбор всех столбцов. Этот параметр конфигурации контролирует максимальное значение Predicate Column для этого поведения.
statistic_auto_collect_predicate_columns_thresholdINT32Если количество столбцов в таблице превышает эту конфигурацию во время автоматического сбора, будет собираться только статистика столбцов для Predicate Column.
statistic_predicate_columns_persist_interval_secLONG60Интервал, с которым FE синхронизирует и сохраняет статистику Predicate Column.
statistic_predicate_columns_ttl_hoursLONG24Время удаления статистики Predicate Column, кэшированной в FE.
enable_predicate_columns_collectionBOOLEANTRUEВключить ли сбор predicate columns. Если отключено, predicate columns не будут записываться во время оптимизации запросов.
enable_manual_collect_array_ndvBOOLEANFALSEВключить ли ручной сбор для информации NDV типа ARRAY.
enable_auto_collect_array_ndvBOOLEANFALSEВключить ли автоматический сбор для информации NDV типа ARRAY.

Вы можете полагаться на автоматические задачи для большинства задач сбора статистики, но если у вас есть специфические требования, вы можете вручную создать задачу, выполнив оператор ANALYZE TABLE, или настроить автоматическую задачу, выполнив оператор CREATE ANALYZE.

Ручной сбор

Вы можете использовать ANALYZE TABLE для создания задачи ручного сбора. По умолчанию ручной сбор - это синхронная операция. Вы также можете установить ее как асинхронную операцию. В асинхронном режиме после выполнения ANALYZE TABLE система немедленно возвращает, была ли эта инструкция успешной. Однако задача сбора будет выполняться в фоновом режиме, и вам не нужно ждать результата. Вы можете проверить статус задачи, выполнив SHOW ANALYZE STATUS. Асинхронный сбор подходит для таблиц с большим объемом данных, тогда как синхронный сбор подходит для таблиц с небольшим объемом данных. Задачи ручного сбора выполняются только один раз после создания. Вам не нужно удалять задачи ручного сбора. Вы должны иметь привилегии INSERT и SELECT для соответствующей таблицы для выполнения операции ANALYZE TABLE.

Ручной сбор базовой статистики

ANALYZE [FULL|SAMPLE] TABLE tbl_name
[( col_name [, col_name]... )
| col_name [, col_name]...
| ALL COLUMNS
| PREDICATE COLUMNS
| MULTIPLE COLUMNS ( col_name [, col_name]... )]
[PARTITION (partition_name [, partition_name]...)]
[WITH [SYNC | ASYNC] MODE]
[PROPERTIES (property [, property]...)]

Описание параметров:

  • Тип сбора

    • FULL: указывает полный сбор.
    • SAMPLE: указывает выборочный сбор.
    • Если тип сбора не указан, по умолчанию используется полный сбор.
  • Тип столбца, из которого собирать статистику:

    • col_name: Столбцы, из которых собирать статистику. Разделите несколько столбцов запятыми (,). Если этот параметр не указан, собирается вся таблица.
    • ALL COLUMNS: Собрать статистику из всех столбцов. Поддерживается с версии 3.5.0.
    • PREDICATE COLUMNS: Собрать статистику только из Predicate Columns. Поддерживается с версии 3.5.0.
    • MULTIPLE COLUMNS: Собирает совместную статистику из указанных нескольких столбцов. В настоящее время поддерживается только ручной синхронный сбор нескольких столбцов. Количество столбцов для ручного сбора статистики не может превышать statistics_max_multi_column_combined_num, значение по умолчанию - 10. Поддерживается с версии 3.5.0.
  • [WITH SYNC | ASYNC MODE]: выполнять ли задачу ручного сбора в синхронном или асинхронном режиме. Синхронный сбор используется по умолчанию, если вы не указываете этот параметр.

  • PROPERTIES: пользовательские параметры. Если PROPERTIES не указан, используются настройки по умолчанию в файле fe.conf. Фактически используемые свойства можно просмотреть в столбце Properties в выводе SHOW ANALYZE STATUS.

PROPERTIESТипЗначение по умолчаниюОписание
statistic_sample_collect_rowsINT200000Минимальное количество строк для сбора для выборочного сбора. Если значение параметра превышает фактическое количество строк в вашей таблице, выполняется полный сбор.

Примеры

Ручной полный сбор

-- Вручную собрать полную статистику таблицы, используя настройки по умолчанию.
ANALYZE TABLE tbl_name;

-- Вручную собрать полную статистику таблицы, используя настройки по умолчанию.
ANALYZE FULL TABLE tbl_name;

-- Вручную собрать статистику указанных столбцов в таблице, используя настройки по умолчанию.
ANALYZE TABLE tbl_name(c1, c2, c3);

Ручной выборочный сбор

-- Вручную собрать частичную статистику таблицы, используя настройки по умолчанию.
ANALYZE SAMPLE TABLE tbl_name;

-- Вручную собрать статистику указанных столбцов в таблице с указанием количества строк для сбора.
ANALYZE SAMPLE TABLE tbl_name (v1, v2, v3) PROPERTIES(
"statistic_sample_collect_rows" = "1000000"
);
  • Ручной сбор многостолбцовой совместной статистики
-- Ручной выборочный сбор многостолбцовой совместной статистики
ANALYZE SAMPLE TABLE tbl_name MULTIPLE COLUMNS (v1, v2);

-- Ручной полный сбор многостолбцовой совместной статистики
ANALYZE FULL TABLE tbl_name MULTIPLE COLUMNS (v1, v2);
  • Ручной сбор Predicate Column
-- Ручной выборочный сбор Predicate Column
ANALYZE SAMPLE TABLE tbl_name PREDICATE COLUMNS

-- Ручной полный сбор Predicate Column
ANALYZE FULL TABLE tbl_name PREDICATE COLUMNS

Ручной сбор гистограмм

ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON col_name [, col_name]
[WITH SYNC | ASYNC MODE]
[WITH N BUCKETS]
[PROPERTIES (property [,property])]

Описание параметров:

  • col_name: столбцы, из которых собирать статистику. Разделите несколько столбцов запятыми (,). Если этот параметр не указан, собирается вся таблица. Этот параметр обязателен для гистограмм.

  • [WITH SYNC | ASYNC MODE]: выполнять ли задачу ручного сбора в синхронном или асинхронном режиме. Синхронный сбор используется по умолчанию, если вы не указываете этот параметр.

  • WITH N BUCKETS: N - количество корзин для сбора гистограммы. Если не указано, используется значение по умолчанию в fe.conf.

  • PROPERTIES: пользовательские параметры. Если PROPERTIES не указан, используются настройки по умолчанию в fe.conf.

PROPERTIESТипЗначение по умолчаниюОписание
statistic_sample_collect_rowsINT200000Минимальное количество строк для сбора. Если значение параметра превышает фактическое количество строк в вашей таблице, выполняется полный сбор.
histogram_buckets_sizeLONG64Количество корзин по умолчанию для гистограммы.
histogram_mcv_sizeINT100Количество наиболее частых значений (MCV) для гистограммы.
histogram_sample_ratioFLOAT0.1Коэффициент выборки для гистограммы.
histogram_max_sample_row_countLONG10000000Максимальное количество строк для сбора для гистограммы.
histogram_collect_bucket_ndv_modeSTRINGnoneРежим для оценки количества различных значений (NDV) на корзину гистограммы. none (по умолчанию, отдельный подсчет не собирается), hll (использует HyperLogLog для точной оценки) или sample (использует оценщик на основе выборки с низкими накладными расходами).

Количество строк для сбора для гистограммы контролируется несколькими параметрами. Это большее значение между statistic_sample_collect_rows и количество строк таблицы * histogram_sample_ratio. Число не может превышать значение, указанное в histogram_max_sample_row_count. Если значение превышено, приоритет имеет histogram_max_sample_row_count.

Фактически используемые свойства можно просмотреть в столбце Properties в выводе SHOW ANALYZE STATUS.

Примеры

-- Вручную собрать гистограммы для v1, используя настройки по умолчанию.
ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON v1;

-- Вручную собрать гистограммы для v1 и v2 с 32 корзинами, 32 MCVs и 50% коэффициентом выборки.
ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON v1,v2 WITH 32 BUCKETS
PROPERTIES(
"histogram_mcv_size" = "32",
"histogram_sample_ratio" = "0.5"
);

-- Собрать гистограммы для v3, используя режим 'hll' для точной оценки отдельного подсчета на корзину.
ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON v3
PROPERTIES(
"histogram_collect_bucket_ndv_mode" = "hll"
);

Пользовательский сбор

Настройка автоматической задачи сбора

Задачи сбора по умолчанию, предоставляемые Selena, автоматически собирают статистику для всех баз данных и всех таблиц в соответствии с политикой, и по умолчанию вам не нужно создавать пользовательские задачи сбора.

Если вы хотите настроить автоматическую задачу сбора, вам нужно создать ее через оператор CREATE ANALYZE. Чтобы создать задачу сбора, вам нужны разрешения INSERT и SELECT для собираемой таблицы.

-- Автоматически собрать статистику всех баз данных.
CREATE ANALYZE [FULL|SAMPLE] ALL [PROPERTIES (property [,property])]

-- Автоматически собрать статистику всех таблиц в базе данных.
CREATE ANALYZE [FULL|SAMPLE] DATABASE db_name
[PROPERTIES (property [,property])]

-- Автоматически собрать статистику указанных столбцов в таблице.
CREATE ANALYZE [FULL|SAMPLE] TABLE tbl_name (col_name [,col_name])
[PROPERTIES (property [,property])]

-- Автоматически собрать гистограммы указанных столбцов в таблице.
CREATE ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON col_name [, col_name]
[WITH SYNC | ASYNC MODE]
[WITH N BUCKETS]
[PROPERTIES (property [,property])]

Описание параметров:

  • Тип сбора

    • FULL: указывает полный сбор.
    • SAMPLE: указывает выборочный сбор.
    • Если тип сбора не указан, по умолчанию используется выборочный сбор.
  • col_name: столбцы, из которых собирать статистику. Разделите несколько столбцов запятыми (,). Если этот параметр не указан, собирается вся таблица.

  • PROPERTIES: пользовательские параметры. Если PROPERTIES не указан, используются настройки по умолчанию в fe.conf.

PROPERTIESТипЗначение по умолчаниюОписание
statistic_auto_collect_ratioFLOAT0.8Порог для определения, является ли статистика для автоматического сбора здоровой. Если здоровье статистики ниже этого порога, запускается автоматический сбор.
statistic_sample_collect_rowsINT200000Минимальное количество строк для сбора. Если значение параметра превышает фактическое количество строк в вашей таблице, выполняется полный сбор.
statistic_exclude_patternStringnullИмя базы данных или таблицы, которую необходимо исключить в задаче. Вы можете указать базу данных и таблицу, которые не собирают статистику в задаче. Обратите внимание, что это шаблон регулярного выражения, а содержимое совпадения - database.table.
statistic_auto_collect_intervalLONG0Интервал для автоматического сбора. Единица: секунды. По умолчанию Selena выбирает statistic_auto_collect_small_table_interval или statistic_auto_collect_large_table_interval в качестве интервала сбора на основе размера таблицы. Если вы указали свойство statistic_auto_collect_interval при создании задачи analyze, эта настройка имеет приоритет над statistic_auto_collect_small_table_interval и statistic_auto_collect_large_table_interval.

Примеры

Автоматический полный сбор

-- Автоматически собрать полную статистику всех баз данных.
CREATE ANALYZE ALL;

-- Автоматически собрать полную статистику базы данных.
CREATE ANALYZE DATABASE db_name;

-- Автоматически собрать полную статистику всех таблиц в базе данных.
CREATE ANALYZE FULL DATABASE db_name;

-- Автоматически собрать полную статистику указанных столбцов в таблице.
CREATE ANALYZE TABLE tbl_name(c1, c2, c3);

-- Автоматически собрать статистику всех баз данных, исключая указанную базу данных 'db_name'.
CREATE ANALYZE ALL PROPERTIES (
"statistic_exclude_pattern" = "db_name\."
);

-- Автоматически собрать гистограммы указанной базы данных, таблицы или столбцов.
CREATE ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON c1,c2;

Автоматический выборочный сбор

-- Автоматически собрать статистику всех таблиц в базе данных с настройками по умолчанию.
CREATE ANALYZE SAMPLE DATABASE db_name;

-- Автоматически собрать статистику всех таблиц в базе данных, исключая указанную таблицу 'db_name.tbl_name'.
CREATE ANALYZE SAMPLE DATABASE db_name PROPERTIES (
"statistic_exclude_pattern" = "db_name.tbl_name"
);

-- Автоматически собрать статистику указанных столбцов в таблице с указанием здоровья статистики и количества строк для сбора.
CREATE ANALYZE SAMPLE TABLE tbl_name(c1, c2, c3) PROPERTIES (
"statistic_auto_collect_ratio" = "0.5",
"statistic_sample_collect_rows" = "1000000"
);

Вместо задачи автоматического сбора, предоставляемой Selena, используйте пользовательскую задачу сбора, которая не собирает таблицу db_name.tbl_name.

ADMIN SET FRONTEND CONFIG("enable_auto_collect_statistics"="false");
DROP ALL ANALYZE JOB;
CREATE ANALYZE FULL ALL db_name PROPERTIES (
"statistic_exclude_pattern" = "db_name.tbl_name"
);

Сбор статистики во время загрузки данных

Чтобы обеспечить хороший план выполнения для запросов сразу после загрузки данных, Selena запускает асинхронную задачу сбора статистики в конце операторов INSERT INTO/OVERWRITE DML, которая по умолчанию ждет 30 секунд после завершения DML. Если задача сбора статистики не завершается за 30 секунд, возвращается результат выполнения DML.

INSERT INTO

  • Статистика собирается только для первого импорта данных в partition.
  • Если количество строк в этом импорте больше statistic_sample_collect_rows, запускается задача выборочного сбора, в противном случае используется полный сбор.

INSERT OVERWRITE

  • Если коэффициент изменения количества строк до и после OVERWRITE меньше statistic_sample_collect_ratio_threshold_of_first_load, задача сбора статистики не запускается.
  • Если количество строк в этой операции OVERWRITE больше statistic_sample_collect_rows, то запускается задача выборочного сбора, в противном случае используется полный сбор.

Следующие свойства (PROPERTIES) используются для создания настроенных задач сбора для загрузки данных. Если не настроено, используется значение соответствующего параметра конфигурации FE.

PROPERTIESТипПо умолчаниюОписание
enable_statistic_collect_on_first_loadBOOLEANTRUEЗапускать ли задачу сбора статистики после выполнения INSERT INTO/OVERWRITE.
semi_sync_collect_statistic_await_secondsLONG30Максимальное время ожидания сбора статистики перед возвратом результатов.
statistic_sample_collect_ratio_threshold_of_first_loadDOUBLE0.1Коэффициент изменения данных в операциях OVERWRITE, которые не запустят задачи сбора статистики.
statistic_sample_collect_rowsLONG200000Когда общее количество строк данных, загруженных через операторы DML, превышает это значение, для сбора статистики используется выборочный сбор.

Просмотр пользовательских задач сбора

SHOW ANALYZE JOB [WHERE predicate][ORDER BY columns][LIMIT num]

Вы можете фильтровать результаты, используя предложение WHERE. Оператор возвращает следующие столбцы.

СтолбецОписание
IdID задачи сбора.
DatabaseИмя базы данных.
TableИмя таблицы.
ColumnsИмена столбцов.
TypeТип статистики, включая FULL и SAMPLE.
ScheduleТип планирования. Тип SCHEDULE для автоматической задачи.
PropertiesПользовательские параметры.
StatusСтатус задачи, включая PENDING, RUNNING, SUCCESS и FAILED.
LastWorkTimeВремя последнего сбора.
ReasonПричина, по которой задача не удалась. Возвращается NULL, если выполнение задачи было успешным.

Примеры

-- Просмотреть все пользовательские задачи сбора.
SHOW ANALYZE JOB

-- Просмотреть пользовательские задачи сбора базы данных `test`.
SHOW ANALYZE JOB where `database` = 'test';

Удаление пользовательской задачи сбора

DROP ANALYZE <ID>
| DROP ALL ANALYZE JOB

ID задачи можно получить с помощью оператора SHOW ANALYZE JOB.

Примеры

DROP ANALYZE 266030;
DROP ALL ANALYZE JOB;

Просмотр статуса задач сбора

Вы можете просмотреть статус всех текущих задач, выполнив оператор SHOW ANALYZE STATUS. Этот оператор нельзя использовать для просмотра статуса пользовательских задач сбора. Чтобы просмотреть статус пользовательских задач сбора, используйте SHOW ANALYZE JOB.

SHOW ANALYZE STATUS [WHERE predicate];

Вы можете использовать LIKE или WHERE для фильтрации возвращаемой информации.

Этот оператор возвращает следующие столбцы.

Имя спискаОписание
IdID задачи сбора.
DatabaseИмя базы данных.
TableИмя таблицы.
ColumnsИмена столбцов.
TypeТип статистики, включая FULL, SAMPLE и HISTOGRAM.
ScheduleТип планирования. ONCE означает ручной, а SCHEDULE означает автоматический.
StatusСтатус задачи.
StartTimeВремя, когда задача начинает выполнение.
EndTimeВремя, когда выполнение задачи заканчивается.
PropertiesПользовательские параметры.
ReasonПричина, по которой задача не удалась. Возвращается NULL, если выполнение было успешным.

Просмотр статистики

Просмотр метаданных базовой статистики

SHOW STATS META [WHERE predicate][ORDER BY columns][LIMIT num]

Этот оператор возвращает следующие столбцы.

СтолбецОписание
DatabaseИмя базы данных.
TableИмя таблицы.
ColumnsИмена столбцов.
TypeТип статистики. FULL означает полный сбор, а SAMPLE означает выборочный сбор.
UpdateTimeПоследнее время обновления статистики для текущей таблицы.
PropertiesПользовательские параметры.
HealthyЗдоровье статистической информации.
ColumnStatsТип ANALYZE столбца.
TabletStatsReportTimeВремя, когда метаданные Tablet для таблицы были обновлены в FE.
TableHealthyMetricsМетрика здоровья в статистической информации.
TableUpdateTimeВремя, когда таблица была обновлена.

Просмотр метаданных гистограмм

SHOW HISTOGRAM META [WHERE predicate]

Этот оператор возвращает следующие столбцы.

СтолбецОписание
DatabaseИмя базы данных.
TableИмя таблицы.
ColumnСтолбцы.
TypeТип статистики. Значение HISTOGRAM для гистограмм.
UpdateTimeПоследнее время обновления статистики для текущей таблицы.
PropertiesПользовательские параметры.

Удаление статистики

Вы можете удалить статистическую информацию, которая вам не нужна. При удалении статистики удаляются как данные, так и метаданные статистики, а также статистика в устаревшем кэше. Обратите внимание, что если выполняется задача автоматического сбора, ранее удаленная статистика может быть снова собрана. Вы можете использовать SHOW ANALYZE STATUS для просмотра истории задач сбора.

Удаление базовой статистики

Следующий оператор удаляет статистику, хранящуюся в таблице default_catalog._statistics_.column_statistics, и соответствующая статистика таблицы, кэшированная FE, также будет аннулирована. Начиная с версии 3.5.0, этот оператор также удаляет многостолбцовую совместную статистику для этой таблицы.

DROP STATS tbl_name

Следующий оператор удаляет многостолбцовую совместную статистику, хранящуюся в таблице default_catalog._statistics_.multi_column_statistics, и многостолбцовая совместная статистика в соответствующей таблице, кэшированной FE, также будет аннулирована. Этот оператор не удаляет базовую статистику таблицы.

DROP MULTIPLE COLUMNS STATS tbl_name

Удаление гистограмм

ANALYZE TABLE tbl_name DROP HISTOGRAM ON col_name [, col_name]

Отмена задачи сбора

Вы можете использовать оператор KILL ANALYZE для отмены выполняющейся задачи сбора, включая ручные и пользовательские задачи.

KILL ANALYZE <ID>

ID задачи для задачи ручного сбора можно получить из SHOW ANALYZE STATUS. ID задачи для пользовательской задачи сбора можно получить из SHOW ANALYZE JOB.

Другие параметры конфигурации FE

Параметр конфигурации FEТипЗначение по умолчаниюОписание
statistic_manager_sleep_time_secLONG60Интервал, с которым планируются метаданные. Единица: секунды. Система выполняет следующие операции на основе этого интервала: Создание таблиц для хранения статистики. Удаление удаленной статистики. Удаление просроченной статистики.
statistic_analyze_status_keep_secondLONG259200Длительность хранения истории задач сбора. Единица: секунды. Значение по умолчанию: 259200 (3 дня).

Переменная сессии

statistic_collect_parallel: Используется для настройки параллелизма задач сбора статистики, которые могут выполняться на BE. Значение по умолчанию: 1. Вы можете увеличить это значение для ускорения задач сбора.

Сбор статистики внешних таблиц

Начиная с версии 3.2.0, Selena поддерживает сбор статистики таблиц Hive, Iceberg и Hudi. Синтаксис аналогичен сбору внутренних таблиц Selena. Однако поддерживается только ручной полный сбор, ручной сбор гистограмм (начиная с версии 3.2.7) и автоматический полный сбор. Выборочный сбор не поддерживается. Начиная с версии 3.3.0, Selena поддерживает сбор статистики таблиц Delta Lake и статистики подполей в STRUCT. Начиная с версии 3.4.0, Selena поддерживает автоматический сбор статистики через задачи ANALYZE, запускаемые запросами.

Собранная статистика хранится в таблице external_column_statistics базы данных _statistics_ в default_catalog. Они не хранятся в Hive Metastore и не могут быть совместно использованы другими поисковыми системами. Вы можете запросить данные из таблицы default_catalog._statistics_.external_column_statistics, чтобы проверить, собрана ли статистика для таблицы Hive/Iceberg/Hudi.

Ниже приведен пример запроса статистических данных из external_column_statistics.

SELECT * FROM _statistics_.external_column_statistics\G
*************************** 1. row ***************************
table_uuid: hive_catalog.tn_test.ex_hive_tbl.1673596430
partition_name:
column_name: k1
catalog_name: hive_catalog
db_name: tn_test
table_name: ex_hive_tbl
row_count: 3
data_size: 12
ndv: NULL
null_count: 0
max: 3
min: 2
update_time: 2023-12-01 14:57:27.137000

Ограничения

При сборе статистики для внешних таблиц применяются следующие ограничения:

  • Вы можете собирать статистику только таблиц Hive, Iceberg, Hudi и Delta Lake (начиная с версии 3.3.0).
  • Поддерживается только ручной полный сбор, ручной сбор гистограмм (начиная с версии 3.2.7) и автоматический полный сбор. Выборочный сбор не поддерживается.
  • Для автоматического сбора полной статистики системой необходимо создать задачу Analyze, что отличается от сбора статистики внутренних таблиц Selena, где система делает это в фоновом режиме по умолчанию.
  • Для автоматических задач сбора:
    • Вы можете собирать статистику только для конкретной таблицы. Вы не можете собирать статистику всех таблиц в базе данных или статистику всех баз данных во внешнем каталоге.
    • Selena может определить, обновлены ли данные в таблицах Hive и Iceberg, и если да, собрать статистику только для partition, данные которых обновлены. Selena не может воспринять, обновлены ли данные в таблицах Hudi, и может только выполнять периодический полный сбор.
  • Для задач сбора, запускаемых запросами:
    • В настоящее время только узел Leader FE может запускать задачи ANALYZE.
    • Система поддерживает только проверку изменений partition в таблицах Hive и Iceberg и собирает статистику только для partition, где данные изменились. Для таблиц Delta Lake/Hudi система собирает статистику всей таблицы.
    • Если к таблицам Iceberg применяются Partition Transforms, сбор статистики поддерживается только для Transforms типа identity, year, month, day, hour.
    • Сбор статистики для Partition Evolution для таблиц Iceberg не поддерживается.

Следующие примеры происходят в базе данных под внешним каталогом Hive. Если вы хотите собрать статистику таблицы Hive из default_catalog, ссылайтесь на таблицу в формате [catalog_name.][database_name.]<table_name>.

Сбор, запускаемый запросами

Начиная с версии 3.4.0, система поддерживает автоматический сбор статистики внешних таблиц с помощью задач ANALYZE, запускаемых запросами. При запросе таблиц Hive, Iceberg, Hudi или Delta Lake система автоматически запустит задачи ANALYZE в фоновом режиме для сбора статистики соответствующих таблиц и столбцов и использует ее для последующей оптимизации плана запроса.

Рабочий процесс:

  1. Когда оптимизатор запрашивает кэшированную статистику в FE, он определит объект задачи ANALYZE на основе запрашиваемых таблиц и столбцов (задача ANALYZE будет собирать только статистику столбцов, включенных в запрос).
  2. Система инкапсулирует объект задачи как задачу ANALYZE и добавляет ее в PendingTaskQueue.
  3. Поток Scheduler периодически извлекает задачи из PendingTaskQueue и добавляет их в RunningTasksQueue.
  4. Во время выполнения задачи ANALYZE она собирает статистику и записывает ее в BE и очищает просроченную статистику, кэшированную в FE.

Эта функция включена по умолчанию. Вы можете контролировать вышеуказанный процесс с помощью следующих системных переменных и параметров конфигурации.

Системная переменная

enable_query_trigger_analyze
  • По умолчанию: true
  • Тип: Boolean
  • Описание: Включить ли задачи ANALYZE, запускаемые запросами.
  • Введено в: v1.5.2

Конфигурация FE

connector_table_query_trigger_analyze_small_table_rows
  • По умолчанию: 10000000
  • Тип: Int
  • Единица: -
  • Изменяемый: Да
  • Описание: Порог для определения, является ли таблица малой для задач ANALYZE, запускаемых запросами.
  • Введено в: v1.5.2
connector_table_query_trigger_analyze_small_table_interval
  • По умолчанию: 2 * 3600
  • Тип: Int
  • Единица: Секунда
  • Изменяемый: Да
  • Описание: Интервал для задач ANALYZE, запускаемых запросами, для малых таблиц.
  • Введено в: v1.5.2
connector_table_query_trigger_analyze_large_table_interval
  • По умолчанию: 12 * 3600
  • Тип: Int
  • Единица: Секунда
  • Изменяемый: Да
  • Описание: Интервал для задач ANALYZE, запускаемых запросами, для больших таблиц.
  • Введено в: v1.5.2
connector_table_query_trigger_analyze_max_pending_task_num
  • По умолчанию: 100
  • Тип: Int
  • Единица: -
  • Изменяемый: Да
  • Описание: Максимальное количество задач ANALYZE, запускаемых запросами, которые находятся в состоянии Pending на FE.
  • Введено в: v1.5.2
connector_table_query_trigger_analyze_schedule_interval
  • По умолчанию: 30
  • Тип: Int
  • Единица: Секунда
  • Изменяемый: Да
  • Описание: Интервал, с которым поток Scheduler планирует задачи ANALYZE, запускаемые запросами.
  • Введено в: v1.5.2
connector_table_query_trigger_analyze_max_running_task_num
  • По умолчанию: 2
  • Тип: Int
  • Единица: -
  • Изменяемый: Да
  • Описание: Максимальное количество задач ANALYZE, запускаемых запросами, которые находятся в состоянии Running на FE.
  • Введено в: v1.5.2

Ручной сбор

Вы можете создать задачу Analyze по требованию, и задача запускается сразу после ее создания.

Создание задачи ручного сбора

Синтаксис:

-- Ручной полный сбор
ANALYZE [FULL] TABLE tbl_name (col_name [,col_name])
[WITH SYNC | ASYNC MODE]
[PROPERTIES(property [,property])]

-- Ручной сбор гистограмм (начиная с версии 3.3.0)
ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON col_name [, col_name]
[WITH SYNC | ASYNC MODE]
[WITH N BUCKETS]
[PROPERTIES (property [,property])]

Ниже приведен пример ручного полного сбора:

ANALYZE TABLE ex_hive_tbl(k1);
+----------------------------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+----------------------------------+---------+----------+----------+
| hive_catalog.tn_test.ex_hive_tbl | analyze | status | OK |
+----------------------------------+---------+----------+----------+

Просмотр статуса задачи

Синтаксис:

SHOW ANALYZE STATUS [LIKE | WHERE predicate]

Пример:

SHOW ANALYZE STATUS where `table` = 'ex_hive_tbl';
+-------+----------------------+-------------+---------+------+----------+---------+---------------------+---------------------+------------+--------+
| Id | Database | Table | Columns | Type | Schedule | Status | StartTime | EndTime | Properties | Reason |
+-------+----------------------+-------------+---------+------+----------+---------+---------------------+---------------------+------------+--------+
| 16400 | hive_catalog.tn_test | ex_hive_tbl | k1 | FULL | ONCE | SUCCESS | 2023-12-04 16:31:42 | 2023-12-04 16:31:42 | {} | |
| 16465 | hive_catalog.tn_test | ex_hive_tbl | k1 | FULL | ONCE | SUCCESS | 2023-12-04 16:37:35 | 2023-12-04 16:37:35 | {} | |
| 16467 | hive_catalog.tn_test | ex_hive_tbl | k1 | FULL | ONCE | SUCCESS | 2023-12-04 16:37:46 | 2023-12-04 16:37:46 | {} | |
+-------+----------------------+-------------+---------+------+----------+---------+---------------------+---------------------+------------+--------+

Просмотр метаданных статистики

Синтаксис:

SHOW STATS META [WHERE predicate]

Пример:

SHOW STATS META where `table` = 'ex_hive_tbl';
+----------------------+-------------+---------+------+---------------------+------------+---------+
| Database | Table | Columns | Type | UpdateTime | Properties | Healthy |
+----------------------+-------------+---------+------+---------------------+------------+---------+
| hive_catalog.tn_test | ex_hive_tbl | k1 | FULL | 2023-12-04 16:37:46 | {} | |
+----------------------+-------------+---------+------+---------------------+------------+---------+

Отмена задачи сбора

Отменяет выполняющуюся задачу сбора.

Синтаксис:

KILL ANALYZE <ID>

Вы можете просмотреть ID задачи в выводе SHOW ANALYZE STATUS.

Автоматический сбор

Для автоматического сбора статистики таблиц во внешнем источнике данных системой вы можете создать задачу Analyze. Selena автоматически проверяет, нужно ли запускать задачу, с интервалом проверки по умолчанию 5 минут. Для таблиц Hive и Iceberg Selena запускает задачу сбора только тогда, когда данные в таблицах обновлены.

Однако изменения данных в таблицах Hudi не могут быть восприняты, и Selena периодически собирает статистику на основе интервала проверки и интервала сбора, которые вы указали. Вы можете указать следующие параметры конфигурации FE для управления поведением сбора:

  • statistic_collect_interval_sec

    Интервал для проверки обновлений данных во время автоматического сбора. Единица: секунды. По умолчанию: 5 минут.

  • statistic_auto_collect_small_table_rows (v1.5.2 и позже)

    Порог для определения, является ли таблица во внешнем источнике данных (Hive, Iceberg, Hudi) малой таблицей во время автоматического сбора. По умолчанию: 10000000.

  • statistic_auto_collect_small_table_interval

    Интервал для сбора статистики малых таблиц. Единица: секунды. По умолчанию: 0.

  • statistic_auto_collect_large_table_interval

    Интервал для сбора статистики больших таблиц. Единица: секунды. По умолчанию: 43200 (12 часов).

Потоки автоматического сбора проверяют обновления данных с интервалом, указанным в statistic_collect_interval_sec. Если количество строк в таблице меньше statistic_auto_collect_small_table_rows, она собирает статистику таких таблиц на основе statistic_auto_collect_small_table_interval.

Если количество строк в таблице превышает statistic_auto_collect_small_table_rows, она собирает статистику таких таблиц на основе statistic_auto_collect_large_table_interval. Она обновляет статистику больших таблиц только тогда, когда Время последнего обновления таблицы + Интервал сбора > Текущее время. Это предотвращает частые задачи analyze для больших таблиц.

Создание автоматической задачи сбора

Синтаксис:

CREATE ANALYZE TABLE tbl_name (col_name [,col_name])
[PROPERTIES (property [,property])]

Вы можете указать свойство statistic_auto_collect_interval для установки интервала сбора исключительно для автоматической задачи сбора. Параметры конфигурации FE statistic_auto_collect_small_table_interval и statistic_auto_collect_large_table_interval не будут действовать на эту задачу.

Пример:

CREATE ANALYZE TABLE ex_hive_tbl (k1)
PROPERTIES ("statistic_auto_collect_interval" = "5");

Query OK, 0 rows affected (0.01 sec)

Просмотр статуса автоматической задачи сбора

То же, что и для ручного сбора.

Просмотр метаданных статистики

То же, что и для ручного сбора.

Просмотр автоматических задач сбора

Синтаксис:

SHOW ANALYZE JOB [WHERE predicate]

Пример:

SHOW ANALYZE JOB WHERE `id` = '17204';

Empty set (0.00 sec)

Отмена задачи сбора

То же, что и для ручного сбора.

Удаление статистики

DROP STATS tbl_name

Ссылки

  • Для запроса параметров конфигурации FE выполните ADMIN SHOW CONFIG.

  • Для изменения параметров конфигурации FE выполните ADMIN SET CONFIG.