key

slmsl1lt  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(401)

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;
6bc51xsx

6bc51xsx1#

CREATE TABLE SALBYDEPT AS
   SELECT DeptId, 
            SUM(SAL) 
     FROM Employee 
     GROUP BY DeptId;

请确认在上述流上执行聚合功能是否需要“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可以在幕后处理这个问题;我不确定)。

相关问题