[英]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.