Базовый запрос

YMatrix разработан на основе PostgreSQL, поэтому поддерживает стандартные операторы SELECT, предоставляемые PostgreSQL, для выполнения запросов, включая сложные выражения с WHERE, GROUP BY, ORDER BY, JOIN и т.д.

Ниже приведён пример использования расширенного анализа с применением статистики использования диска.

Для упрощения объём информации о диске, который мы хотим подсчитать, включает только скорость чтения и записи, то есть: чтение и запись.

Шаблон индексной таблицы следующий:

CREATE TABLE disk(
    time timestamp with time zone,
    tag_id int,
    read float,
    write float
)
DISTRIBUTED BY (tag_id);

Также создадим таблицу disk_tags для хранения метаинформации, связанной с диском, включая операционную систему, имя хоста и зону, к которой он относится:

CREATE TABLE disk_tags(
    tag_id serial,
    os text,
    hostname text,
    region text
)
DISTRIBUTED REPLICATED;

1. Фильтрация

Используйте предложение WHERE для фильтрации результатов:

  • Запрос записей со скоростью чтения и записи больше 10:

    SELECT * FROM disk WHERE read > 10 AND write > 10;

2. Сортировка

Используйте предложение ORDER BY для выбора столбцов, по которым будет выполняться сортировка. Предложение LIMIT позволяет ограничить количество возвращаемых результатов:

  • Запрос последних 100 записей:

    SELECT * FROM disk ORDER BY time DESC LIMIT 100;

3. Агрегация

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

  1. COUNT: Количество действительных значений
  2. SUM: Сумма значений
  3. AVG: Среднее значение столбца
  4. MIN: Минимальное значение столбца
  5. MAX: Максимальное значение столбца
  • Запрос общего объёма данных за последние 12 часов:

    SELECT COUNT(*) FROM disk WHERE time > NOW() - INTERVAL '12 hours';

  • Запрос максимального объёма чтения и записи для устройства с tag_id равным 1: SELECT MAX(read), MAX(write) FROM disk WHERE tag_id = 1;

4. Группировка

Используйте предложение GROUP BY для группировки по столбцам и агрегатные функции для столбцов, не входящих в группировку:

  • Запрос общего количества устройств в каждой зоне и на каждом хосте:

    SELECT region, hostname, COUNT(*) FROM disk_tags GROUP BY region, hostname;

5. Соединение

Используйте предложение JOIN и ключ соединения USING для выполнения операций соединения нескольких таблиц:

  • Запрос последних 100 записей и соответствующих им имён хостов:

    SELECT disk_tags.hostname, disk.* FROM disk JOIN disk_tags USING (tag_id) ORDER BY disk.time DESC LIMIT 100;