簡體   English   中英

KSQL 窗口化聚合 Stream

[英]KSQL Windowed Aggregation Stream

我正在嘗試使用KSQL Windowed Aggregation ,特別是Session Window按其屬性之一和隨着時間的推移對事件進行分組。

我有一個STREAM由 kafka 主題制成,並明確指定了TIMESTAMP屬性。

當我嘗試使用 Session 窗口化創建STREAM時,使用如下查詢:

CREATE STREAM SESSION_STREAM AS
SELECT ...
  FROM EVENT_STREAM
WINDOW SESSION (5 MINUTES)
   GROUP BY ...;

我總是得到錯誤:

您的 SELECT 查詢會生成一個表。 請改用 CREATE TABLE AS SELECT 語句。

是否可以使用窗口聚合創建STREAM


當我按照建議嘗試創建一個TABLE和一個STREAM ,它包含所有 session 啟動事件,查詢如下:

CREATE STREAM SESSION_START_STREAM AS
SELECT *
  FROM SESSION_TABLE
 WHERE WINDOWSTART=WINDOWEND;

KSQL 告訴我:

KSQL 不支持對窗口表的持久查詢

如何在 KSQL 中創建啟動 session STREAM的事件的 STREAM?

您的 create stream 語句,如果切換到 create table 語句將創建一個不斷更新的表。 sink 主題SESSION_STREAM將包含 stream 對表的更改,即其更改日志。

ksqlDB 將其建模為 TABLE,因為它具有 TABLE 語義,即表中只能存在具有任何特定鍵的單行。 但是,更改日志將包含已應用於表的更改的 STREAM。

如果您想要的是包含所有會話的主題,那么類似這樣的內容將創建:

-- create a stream with a new 'data' topic:
CREATE STREAM DATA (USER_ID INT) 
    WITH (kafka_topic='data', value_format='json');

-- create a table that tracks user interactions per session:
CREATE TABLE SESSION AS
SELECT USER_ID, COUNT(USER_ID) AS COUNT
  FROM DATA
WINDOW SESSION (5 SECONDS)
   GROUP BY USER_ID;

這將創建一個包含對SESSIONS表的更改的SESSIONS主題:即其更改日志。

If you want to convert this into a stream of session start events, then unfortunately ksqlDB doesn't yet allow you to directly change create a stream from the table, but you can create a stream over the table's change log:

-- Create a stream over the existing `SESSIONS` topic.
-- Note it states the window_type is 'Session'.
CREATE STREAM SESSION_STREAM (ROWKEY INT KEY, COUNT BIGINT) 
   WITH (kafka_topic='SESSIONS', value_format='JSON', window_type='Session');

-- Create a stream of window start events:
CREATE STREAM SESSION_STARTS AS 
    SELECT * FROM SESSION_STREAM 
    WHERE WINDOWSTART = WINDOWEND;

請注意,在即將發布的 0.10 版本中,您將能夠正確命名SESSION_STREAM中的鍵列:

CREATE STREAM SESSION_STREAM (USER_ID INT KEY, COUNT BIGINT) 
   WITH (kafka_topic='SESSIONS', value_format='JSON', window_type='Session');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM