В потоковых приложениях должен использоваться некоторый механизм поддержки запросов для нахождения интересующих выходных событий или вычисления в реальном времени аналитики. Исторически в потоковых приложениях в качестве основных средств разработки и программирования использовались языки общего назначения, такие как С++ и Java. К сожалению, использование низкоуровневых схем программирования приводит к длинным циклам разработки и высокой стоимости сопровождения.
Гораздо лучше обрабатывать движущиеся в реальном времени данные с использованием высокоуровневого языка, подобного SQL. В последние три десятилетия SQL остается устойчивым стандартным языком баз данных. Успех SQL при выражении сложных преобразований данных проистекает из того факта, что он основан на наборе очень мощных примитивов обработки данных, производящих фильтрацию, слияние, коррелирование и агрегирование. В SQL явно специфицируется, как эти примитивы взаимодействуют между собой, так что смысл языка легко понимается независимо от условий времени выполнения. Кроме того, SQL является широко распространеным стандартом, понимаемым сотнями и тысячами программистов баз данных и реализованным в каждой серьезной СУБД, используемой сегодня в коммерческих целях, по причинам присущих ему комбинации функций, мощности и относительной простоты использования. При наличии миллионов действующих серверов реляционных баз данных, поддерживающих SQL, имеет смысл взять на вооружение знакомые модель запросов и операции языка SQL и просто расширить их для выполнения запросов над непрерывными потоками данных.
Для удовлетворения уникальных требований потоковой обработки необходим StreamSQL, вариант языка SQL, специально разработанный для выражения операций обработки непрерывных потоков данных. StreamSQL должен расширять семантику стандартного SQL (в котором подразумевается наличие записей в конечном хранимом наборе данных) путем добавления к нему мощных оконных конструкций и потоковых операций.
Хотя в традиционной SQL-системе известно, что операция завершается при достижении конца таблицы, процессор обработки запросов должен инструктироваться, когда он должен завершить такую операцию и выдать результат, поскольку потоковые данные никогда не кончаются.