Перейти к основному содержимому

Агрегатная таблица

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

В сценариях анализа и агрегации данных агрегатные таблицы могут уменьшить объем данных, которые необходимо обработать, тем самым повышая эффективность запросов.

Сценарии использования

Агрегатная таблица хорошо подходит для сценариев статистики и аналитики данных. Несколько примеров:

  • Помогает провайдерам веб-сайтов или приложений анализировать объем трафика и время, которое их пользователи проводят на конкретном веб-сайте или в приложении, а также общее количество посещений веб-сайта или приложения.

  • Помогает рекламным агентствам анализировать общие клики, общие просмотры и статистику потребления рекламы, которую они предоставляют своим клиентам.

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

Запросы данных и их загрузка в вышеупомянутых сценариях имеют следующие характеристики:

  • Большинство запросов являются агрегатными запросами, такими как SUM, MAX и MIN.
  • Необработанные детальные данные не нужно извлекать.
  • Исторические данные не обновляются часто. Добавляются только новые данные.

Принцип работы

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

  1. На этапе загрузки данных каждая партия данных формирует версию при загрузке данных в агрегатную таблицу партиями. В одной версии данные с одинаковым агрегатным ключом будут агрегированы.

  2. На этапе фонового уплотнения (Compaction), когда файлы нескольких версий данных, сгенерированных при загрузке данных, периодически уплотняются в большой файл, Selena агрегирует данные с одинаковым агрегатным ключом в большом файле.

  3. На этапе запроса данных Selena агрегирует данные с одинаковым агрегатным ключом среди всех версий данных перед возвратом результата запроса.

Агрегатные операции помогают уменьшить объем данных, которые необходимо обработать, тем самым ускоряя запросы.

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

DateCountryPV
2020.05.01CHN1
2020.05.01CHN2
2020.05.01USA3
2020.05.01USA4

Selena агрегирует четыре исходные записи в следующие две записи при загрузке данных.

DateCountryPV
2020.05.01CHN3
2020.05.01USA7

Создание таблицы

Предположим, вы хотите проанализировать количество посещений пользователями из разных городов различных веб-страниц. В этом примере создайте таблицу с именем example_db.aggregate_tbl, определите site_id, date и city_code как агрегатный ключ, определите pv как столбец значений и укажите функцию SUM для столбца pv.

Оператор для создания таблицы выглядит следующим образом:

CREATE TABLE aggregate_tbl (
site_id LARGEINT NOT NULL COMMENT "id of site",
date DATE NOT NULL COMMENT "time of event",
city_code VARCHAR(20) COMMENT "city_code of user",
pv BIGINT SUM DEFAULT "0" COMMENT "total page views"
)
AGGREGATE KEY(site_id, date, city_code)
DISTRIBUTED BY HASH(site_id);

ВНИМАНИЕ

  • При создании таблицы необходимо указать столбец для разбиения на сегменты, используя предложение DISTRIBUTED BY HASH. Для получения подробной информации см. разбиение на сегменты.
  • Начиная с версии 1.5.0, Selena может автоматически устанавливать количество сегментов (BUCKETS) при создании таблицы или добавлении раздела. Вам больше не нужно вручную устанавливать количество сегментов. Для получения подробной информации см. установка количества сегментов.

Примечания по использованию

  • Агрегатный ключ:

    • В операторе CREATE TABLE агрегатный ключ должен быть определен перед другими столбцами.

    • Агрегатный ключ может быть явно определен с помощью AGGREGATE KEY. AGGREGATE KEY должен включать все столбцы, кроме столбцов значений, иначе создание таблицы завершится неудачей.

      Если агрегатный ключ не определен явно с помощью AGGREGATE KEY, все столбцы, кроме столбцов значений, по умолчанию считаются агрегатным ключом.

    • Агрегатный ключ имеет ограничение уникальности.

  • Столбец значений: Определите столбец как столбец значений, указав агрегатную функцию после имени столбца. Этот столбец обычно содержит данные, которые необходимо агрегировать.

  • Агрегатная функция: Агрегатная функция, используемая для столбца значений. Для поддерживаемых агрегатных функций для агрегатных таблиц см. CREATE TABLE.

  • Ключ сортировки

    • Начиная с версии 1.5.0, ключ сортировки отделен от агрегатного ключа в агрегатной таблице. Агрегатная таблица поддерживает указание ключа сортировки с помощью ORDER BY и указание агрегатного ключа с помощью AGGREGATE KEY. Столбцы в ключе сортировки и агрегатном ключе должны быть одинаковыми, но порядок столбцов не обязательно должен быть одинаковым.

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

  • При создании таблицы вы можете создавать только индексы Bitmap или индексы Bloom Filter на ключевых столбцах таблицы.

Что делать дальше

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

Примечание: При загрузке данных в таблицу, использующую агрегатную таблицу, вы можете обновлять только все столбцы таблицы. Например, при обновлении вышеупомянутой таблицы example_db.aggregate_tbl необходимо обновить все ее столбцы: site_id, date, city_code и pv.