【发布时间】:2019-11-23 04:03:28
【问题描述】:
我在 KSQL 中创建表或流时遇到问题。
我已经按照官方示例中所示的方式制作了所有内容,但我不明白为什么我的代码不起作用。 来自https://docs.confluent.io/current/ksql/docs/tutorials/examples.html#joining 的示例:
CREATE TABLE pageviews_per_region_per_session AS
SELECT regionid,
windowStart(),
windowEnd(),
count(*)
FROM pageviews_enriched
WINDOW SESSION (60 SECONDS)
GROUP BY regionid;
现在我的代码:
我尝试在命令舞会中运行 select 并且效果很好:
SELECT count(*) as attempts_count, "computer", (WINDOWSTART() / 1000) as row_time
FROM LOG_FLATTENED
WINDOW TUMBLING (SIZE 20 SECONDS)
WHERE "event_id" = 4625
GROUP BY "computer"
HAVING count(*) > 2;
但是当我尝试基于这个选择创建表时(来自 ksql 命令行工具):
CREATE TABLE `incorrect_logins` AS
SELECT count(*) as attempts_count, "computer", (WINDOWSTART() / 1000) as row_time
FROM LOG_FLATTENED
WINDOW TUMBLING (SIZE 20 SECONDS)
WHERE "event_id" = 4625
GROUP BY "computer"
HAVING count(*) > 2;
我得到一个错误 - io.confluent.ksql.util.KsqlStatementException: Column COMPUTER cannot be resolved. 但是此列存在并且选择没有create table 语句可以正常工作。
我正在使用最新的稳定 KSQL 映像 (confluentinc/cp-ksql-server:5.3.1)
【问题讨论】:
-
最近修复了很多围绕引用标识符的错误,您似乎正在大量利用这些错误,但这些修复在最新版本中不可用(它们目前仅在 master 上) .您可以尝试创建您的流并仅对列名和源名称使用不带引号的值吗?
-
感谢您的快速回复。我也试过不带引号(这是我的第一个选择)。但是在没有引号的情况下,即使是 SELECT 查询也不起作用。我试过这样: SELECT count() as attempt_count, computer, (WINDOWSTART() / 1000) as row_time FROM LOG_FLATTENED WINDOW TUMBLING (SIZE 20 SECONDS) WHERE event_id = 4625 GROUP BY computer HAVING count() > 2;并得到同样的错误 io.confluent.ksql.util.KsqlStatementException: Column ... cannot be resolve。当我用引号编写此查询时,SELECT 有效,但 CREATE TABLE 语句不起作用。