arrow-left

All pages
gitbookPowered by GitBook
1 of 1

Loading...

Fluent Bit + SQL

Fluent Bit stream processor uses common SQL to perform record queries. The following section describe the features available and examples of it.

hashtag
Statements

You can find the detailed query language syntax in BNF form herearrow-up-right. The following section will be a brief introduction on how to write SQL queries for Fluent Bit stream processing.

hashtag
SELECT Statement

hashtag
Synopsis

hashtag
Description

Select keys from records coming from a stream or records matching a specific Tag pattern. Note that a simple SELECT statement not associated from a stream creation will send the results to the standard output interface (stdout), useful for debugging purposes.

The query allows filtering the results by applying a condition using WHERE statement. We will explain WINDOW and GROUP BY statements later in aggregation functions section.

hashtag
Examples

Select all keys from records coming from a stream called apache:

Select code key from records which Tag starts with apache.:

Since the TAG selector allows the use of wildcards, we put the value between single quotes.

hashtag
CREATE STREAM Statement

hashtag
Synopsis

hashtag
Description

Create a new stream of data using the results from the SELECT statement. New stream created can be optionally re-ingested back into Fluent Bit pipeline if the property Tag is set in the WITH statement.

hashtag
Examples

Create a new stream called hello from stream called apache:

Create a new stream called hello for all records which original Tag starts with apache:

hashtag
Aggregation Functions

Aggregation functions are used in results_statement on the keys, allowing to perform data calculation on groups of records. Group of records that aggregation functions apply on are determined by WINDOW keyword. When WINDOW is not specified, aggregation functions apply on the current buffer of records received, which may have non-deterministic number of elements. Aggregation functions can be applied on records in a window of a specific time interval (see the syntax of WINDOW in select statement).

Fluent Bit streaming currently supports tumbling window, which is non-overlapping window type. That means, a window of size 5 seconds performs aggregation computations on records over a 5-second interval, and then starts new calculations for the next interval.

In addition, the syntax support GROUP BY statement, which groups the results by the one or more keys, when they have the same values.

hashtag
AVG

hashtag
Synopsis

hashtag
Description

Calculates the average of request sizes in POST requests.

hashtag
COUNT

hashtag
Synopsis

hashtag
Description

Count the number of records in 5 second windows group by host IP addresses.

hashtag
MIN

hashtag
Synopsis

hashtag
Description

Gets the minimum value of a key in a set of records.

hashtag
MAX

hashtag
Synopsis

hashtag
Description

Gets the maximum value of a key in a set of records.

hashtag
SUM

hashtag
Synopsis

hashtag
Description

Calculates the sum of all values of key in a set of records.

hashtag
Time Functions

Time functions adds a new key into the record with timing data

hashtag
NOW

hashtag
Synopsis

hashtag
Description

Add system time using format: %Y-%m-%d %H:%M:%S. Output example: 2019-03-09 21:36:05.

hashtag
UNIX_TIMESTAMP

hashtag
Synopsis

hashtag
Description

Add current Unix timestamp to the record. Output example: 1552196165 .

hashtag
Record Functions

Record functions append new keys to the record using values from the record context.

hashtag
RECORD_TAG

hashtag
Synopsis

hashtag
Description

Append Tag string associated to the record as a new key.

hashtag
RECORD_TIME

hashtag
Synopsis

hashtag
WHERE Condition

Similar to conventional SQL statements, WHERE condition is supported in Fluent Bit query language. The language supports conditions over keys and subkeys, for instance:

It is possible to check the existence of a key in the record using record-specific function @record.contains:

And to check if the value of a key is/is not NULL:

hashtag
Description

Append a new key with the record Timestamp in double format: seconds.nanoseconds. Output example: 1552196165.705683 .

SELECT results_statement
  FROM STREAM:stream_name | TAG:match_rule
  [WINDOW TUMBLING (integer SECOND)]
  [WHERE condition]
  [GROUP BY groupby]
SELECT * FROM STREAM:apache;
SELECT code AS http_status FROM TAG:'apache.*';
CREATE STREAM stream_name
  [WITH (property_name=value, [...])]
  AS select_statement
CREATE STREAM hello AS SELECT * FROM STREAM:apache;
CREATE STREAM hello AS SELECT * FROM TAG:'apache.*';
SELECT AVG(size) FROM STREAM:apache WHERE method = 'POST' ;
SELECT host, COUNT(*) FROM STREAM:apache WINDOW TUMBLING (5 SECOND) GROUP BY host;
SELECT MIN(key) FROM STREAM:apache;
SELECT MIN(key) FROM STREAM:apache;
SELECT SUM(key) FROM STREAM:apache;
SELECT NOW() FROM STREAM:apache;
SELECT UNIX_TIMESTAMP() FROM STREAM:apache;
SELECT RECORD_TAG() FROM STREAM:apache;
SELECT RECORD_TIME() FROM STREAM:apache;
SELECT AVG(size) FROM STREAM:apache WHERE method = 'POST' AND status = 200;
SELECT MAX(key) FROM STREAM:apache WHERE @record.contains(key);
SELECT MAX(key) FROM STREAM:apache WHERE key IS NULL;
SELECT * FROM STREAM:apache WHERE user IS NOT NULL;