Система управления реляционным потоком данных

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Система управления реляционными потоками данных (англ. — relational data stream management system (RDSMS)) — это распределенная система управления потоками данных в памяти (data stream management system (DSMS)) которая предназначена для использования SQL-запросов, совместимых со стандартами, для обработки неструктурированных и структурированных потоков данных в режиме реального времени. В отличие от SQL-запросов выполняемых в традиционной RDBMS, которые возвращают результат и завершают работу, SQL-запросы, выполняемые в RDSMS, не завершаются, генерируя результаты непрерывно по мере поступления новых данных. Непрерывные SQL-запросы в RDSMS используют функцию SQL Window для анализа, соединения и агрегации потоков данных по фиксированным или скользящим окнам.

Примеры запросов RDSMS SQL[править | править код]

Непрерывные SQL-запросы в RDSMS соответствуют стандартам ANSI SQL. Наиболее распространенный RDSMS SQL-запрос выполняется с помощью декларативной инструкции SELECT. Непрерывный запрос SELECT работает с данными через один или несколько потоков данных с необязательными ключевыми словами и предложениями, которые включают FROM с дополнительным подвыражением JOIN, что бы указать правила для объединения нескольких потоков данных, предложение WHERE и предикат сравнения для ограничения записей, возвращаемых в запросе, GROUP BY для проецирования , HAVING для фильтрации записей в результате GROUP BY и ORDER BY для сортировки результатов.

Ниже приведен пример агрегации непрерывного потока данных с использованием запроса SELECT, который объединяет поток датчиков от метеорологической станции. SELECT запрос агрегирует минимальные, максимальные и средние значения температуры за один период времени, возвращая непрерывный поток агрегированных результатов с интервалом в одну секунду.

SELECT STREAM
    FLOOR(WEATHERSTREAM.ROWTIME to SECOND) AS FLOOR_SECOND,
    MIN(TEMP) AS MIN_TEMP,
    MAX(TEMP) AS MAX_TEMP,
    AVG(TEMP) AS AVG_TEMP
FROM WEATHERSTREAM
GROUP BY FLOOR(WEATHERSTREAM.ROWTIME TO SECOND);

SQL-запросы RDSMS также работают с потоками данных с течением времени или с окнами на основе строк. В приведенном примере показан второй непрерывный SQL-запрос с использованием предложения WINDOW с длительностью в одну секунду. Предложение WINDOW изменяет поведение запроса, чтобы вывести результат для каждой новой записи по мере ее поступления. Следовательно, вывод - это поток обновляемых по отдельности результатов с нулевой задержкой результата.

SELECT STREAM
    ROWTIME,
    MIN(TEMP) OVER W1 AS WMIN_TEMP,
    MAX(TEMP) OVER W1 AS WMAX_TEMP,
    AVG(TEMP) OVER W1 AS WAVG_TEMP
FROM WEATHERSTREAM
WINDOW W1 AS ( RANGE INTERVAL '1' SECOND PRECEDING );

Ключевое слово STREAM и принцип потоковой обработки SQL[править | править код]

Расширение SQLstream для SQL использует ключевое слово STREAM, чтобы разрешать запросы к потокам или смеси потоков и сохраненных отношений.

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

Давайте предположим, что у нас есть некоторый способ контролировать строки, которые вставляются в OrdersTable, так что мы можем видеть каждый раз, когда новая таблица добавляется в таблицу. Теперь мы можем описать этот объект как поток, который обновляется в момент размещения каждого заказа. (Мы будем называть этот поток Orders_Stream.) В реальном мире этот поток может быть заполнен файлом журнала, который постоянно записывается, датчиком, который постоянно испускает данные, цена акций, которая продолжает изменяться, и так далее. Хотя потоковые запросы во многих отношениях похожи на «традиционные» запросы, потоковые запросы продолжают выполняться после извлечения их первоначальных результатов. Чтобы запросить поток, мы используем ключевое слово STREAM:

SELECT STREAM * FROM OrdersStream;

Если мы начнем выполнение этого запроса в 10:00, он будет он будет добавлять заказы по мере их поступления пока не завершится поток.

ROWTIME orderID custName product quantity
10:00:00 100 Ivy Black Rice 6
10:05:00 101 John Base Butter 4

В 10:15 запрос все еще выполняется, обрабатывая поступающие заказы:

ROWTIME orderID custName product quantity
10:00:00 100 Ivy Black Rice 6
10:05:00 101 John Base Butter 4
10:15:00 102 Chris Nes Apples 5

Здесь система говорит: «В 10:15:00 я выполнил запрос SELECT STREAM * FROM OrdersStream и нашел одну строку в результате, который отсутствовал в 10:14:59.999». Он генерирует строку со значением 10:15:00 в столбце ROWTIME, потому что именно тогда появилась строка. Это основная идея потока: отношение, которое постоянно обновляется. (Столбец ROWTIME имеет решающее значение для потоков, потому что все потоки зависят от введенных строк времени.)

См. также[править | править код]

Примечания[править | править код]