【问题标题】:Is it possible to create ksql table from ksql stream?是否可以从 ksql 流创建 ksql 表?
【发布时间】:2018-10-15 23:11:22
【问题描述】:

我是 ksql 的新手。我只是在玩阅读 kafka 主题到流中,效果很好。

另外,尝试从 kafka 主题创建表并失败。意识到我需要在 kafka 主题中设置一个键,该键被视为 ksql 表中的主键。 所以我尝试从流创建表,但也失败了。 查询/脚本:

CREATE TABLE DETAILS_TABLE AS SELECT SEQ, Server1, ServerId, NumberUri, SERVERID2, SERVER2 FROM details_stream WINDOW TUMBLING (SIZE 1 MINUTES);
Invalid result type. Your SELECT query produces a STREAM. Please use CREATE STREAM AS SELECT statement instead.

有人可以解释它是否可能吗?如果是,我哪里错了?谢谢。

【问题讨论】:

  • 如果希望查询结果为TABLE,则需要指定聚合查询。
  • @MatthiasJ.Sax 我绑定了这个:CREATE TABLE DETAILS_TABLE AS SELECT SEQ, Server1, ServerId, NumberUri, SERVERID2, SERVER2, COUNT(*) AS TOTAL FROM details_stream WINDOW TUMBLING (SIZE 1 MINUTES) GROUP BY序列;错误是:Group by 元素应该匹配 SELECT 表达式。
  • 我可以通过 CREATE TABLE DETAILS_TABLE AS SELECT SEQ, COUNT(*) AS TOTAL FROM details_stream WINDOW TUMBLING (SIZE 1 MINUTES) GROUP BY SEQ;但问题是我也需要其他参数/​​列。我该如何继续。

标签: apache-kafka ksqldb


【解决方案1】:

正如 Matthias 所说,您需要指定一个(有效的)聚合查询。

这样就可以了:

CREATE TABLE DETAILS_TABLE AS \
SELECT SEQ, Server1, ServerId, NumberUri, SERVERID2, SERVER2, COUNT(*) AS TOTAL \
FROM details_stream WINDOW TUMBLING (SIZE 1 MINUTES) \
GROUP BY SEQ, Server1, ServerId, NumberUri, SERVERID2, SERVER2;

就像任何 SQL 方言一样,如果要进行聚合,则必须 GROUP BY所有 字段,否则没有语法意义。

【讨论】:

  • 我们做到了,但无法成功。流能够从 kafak-topic 读取数据,但表不能。只能以某种方式读取 2 个条目。我们急于测试我们的 POC,所以搬出去工作了。
  • 这是唯一的文档docs.confluent.io/current/ksql/docs/tutorials/… 以获取更多信息吗?我可以获得很多有组织的文档解释 1)流/表持续多长时间? 2)如何在两个kafka_topics之间同步使用joins?等等。谢谢。
  • 如果您还有其他问题,请开始一个新问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多