Система управления реляционным потоком данных (Vnvmybg rhjgflyunx jylxenkuudb hkmktkb ;guud])
Система управления реляционными потоками данных (англ. — 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 имеет решающее значение для потоков, потому что все потоки зависят от введенных строк времени.)
См. также
[править | править код]Примечания
[править | править код]- Stream processing with SQL
- IBM System S
- 1995 SQL Reunion: People, Projects, and Politics, by Paul McJones (ed.): transcript of a reunion meeting devoted to the personal history of relational databases, SQL System R.
![]() | На эту статью не ссылаются другие статьи Википедии. |