1) 是要在其中执行聚合函数的流上所需的键。我读过好几篇博客,还有来自confluent的建议,聚合功能需要密钥才能工作
CREATE STREAM Employee (EmpId BIGINT, EmpName VARCHAR,
DeptId BIGINT, SAL BIGINT) WITH (KAFKA_TOPIC='EmpTopic',
VALUE_FORMAT='JSON');
在定义上述流时,我没有定义任何键(rowkey为null)。基础主题“emptopic”也不是键。
我正在流上执行聚合函数。
CREATE TABLE SALBYDEPT AS
SELECT DeptId,
SUM(SAL)
FROM Employee
GROUP BY DeptId;
请确认在上述流上执行聚合功能是否需要“employee”流上的键,即“employee”流上的not null rowkey
2) 根据confluent文档,“窗口化允许您控制如何将具有相同键的记录分组到时间跨度中,以便进行有状态操作(如聚合或联接)。ksql跟踪每个记录键的窗口”。请帮助我理解上述陈述的含义。是否要求流不应有空键?
3) 流表上的联接将保留键
CREATE TABLE users
(registertime BIGINT,
userid VARCHAR,
gender VARCHAR,
regionid VARCHAR)
WITH (KAFKA_TOPIC = 'users',
VALUE_FORMAT='JSON',
KEY = 'userid');
CREATE STREAM pageviews
(viewtime BIGINT,
userid VARCHAR,
pageid VARCHAR)
WITH (KAFKA_TOPIC='pageviews',
VALUE_FORMAT='DELIMITED',
KEY='pageid',
TIMESTAMP='viewtime');
CREATE STREAM pageviews_transformed as
SELECT viewtime,
userid,
pageid,
TIMESTAMPTOSTRING(viewtime, 'yyyy-MM-dd HH:mm:ss.SSS') AS timestring
FROM pageviews
CREATE STREAM pageviews_enriched AS
SELECT pv.viewtime,
pv.userid AS userid,
pv.pageid,
pv.timestring,
u.gender,
u.regionid,
u.interests,
u.contactinfo
FROM pageviews_transformed pv
LEFT JOIN users u ON pv.userid = u.userid;
Will JOIN on Stream-Table retain the 'UserId' as ROWKEY in the new Stream 'pageviews_enriched'
4) 我在github上看到过几个confluent的例子,其中join中使用的流没有键,但是根据文档,流应该没有空rowkey参与join。请确认流中没有空rowkey。
流连接和流表连接。在下面的示例中,我使用空rowkey和table对流执行join。这个有效吗?
CREATE TABLE users
(registertime BIGINT,
userid VARCHAR,
gender VARCHAR,
regionid VARCHAR)
WITH (KAFKA_TOPIC = 'users',
VALUE_FORMAT='JSON',
KEY = 'userid');
CREATE STREAM pageviews
(viewtime BIGINT,
userid VARCHAR,
pageid VARCHAR)
WITH (KAFKA_TOPIC='pageviews',
VALUE_FORMAT='DELIMITED',
TIMESTAMP='viewtime');
CREATE STREAM pageviews_transformed as
SELECT viewtime,
userid,
pageid,
TIMESTAMPTOSTRING(viewtime, 'yyyy-MM-dd HH:mm:ss.SSS') AS timestring
FROM pageviews
CREATE STREAM pageviews_enriched AS
SELECT pv.viewtime,
pv.userid AS userid,
pv.pageid,
pv.timestring,
u.gender,
u.regionid,
u.interests,
u.contactinfo
FROM pageviews_transformed pv
LEFT JOIN users u ON pv.userid = u.userid;
1条答案
按热度按时间6bc51xsx1#
请确认在上述流上执行聚合功能是否需要“employee”流上的键,即“employee”流上的not null rowkey
此流上不需要密钥。创建的表的键将是
DeptId
.根据confluent文档,“窗口化允许您控制如何将具有相同键的记录分组到时间跨度中,以便进行有状态操作(如聚合或联接)。ksql跟踪每个记录键的窗口”。请帮助我理解上述陈述的含义。是否要求流不应有空键?
这意味着,当您创建聚合时,您可以在一个时间窗口上进行聚合,并且该时间窗口是消息键的一部分。例如,不是聚合所有员工
SAL
(销售?)。在这种情况下,您将拥有聚合密钥(DeptId
),与窗口键结合使用(例如,每小时2019-06-23 06:00:00
,2019-06-23 07:00:00
,2019-06-23 08:00:00
等)流表上的联接将保留键
它将保留流的密钥,除非包含
PARTITION BY
在ddl中。我在github上看到过几个confluent的例子,其中join中使用的流没有键,但是根据文档,流应该没有空rowkey参与join。请确认流中没有空rowkey。
你有没有链接到你引用的特定文档?当一个表确实需要设置键控时,一个流却不需要(ksql可以在幕后处理这个问题;我不确定)。