gpt4 book ai didi

apache-kafka - KSQL 多列连接 - LogicalBinaryExpression 不能转换为 ComparisonExpression

转载 作者:行者123 更新时间:2023-12-05 03:57:55 25 4
gpt4 key购买 nike

我正在调查一些工作,我们必须在 POC 中证明 Kafka 和 KSQL 的值(value)。我们正在处理简单的游戏事件,玩家可以在其中进行游戏,游戏引擎要么为他们分配分数(视为获胜),要么他们一无所获(视为失败)。我们的要求之一是证明 KSQL 在连续输或赢上的可行性。出于这个问题的目的,我将重点关注连续亏损。

我们有两张表格,一张是针对相同游戏事件流的输赢,一张是输。

wins DDL如下:

CREATE TABLE TABLE__GAME_EVENTS__WINS AS
SELECT userId,
gameName,
COUNT(*) AS totalWins
FROM STREAM__GAME_EVENTS
WINDOW TUMBLING (SIZE 30 MINUTES)
WHERE pointsAllocated > 0
GROUP BY userId,
gameName;

损失DDL如下:

CREATE TABLE TABLE__GAME_EVENTS__LOSSES AS
SELECT userId,
gameName,
COUNT(*) AS totalLosses
FROM STREAM__GAME_EVENTS
WINDOW TUMBLING (SIZE 30 MINUTES)
WHERE pointsAllocated = 0
GROUP BY userId,
gameName;

为了实现30分钟窗口期连续亏损,我们目前的做法是将WINSJOINLOSSES表只有当 WINS 表中没有任何内容而 LOSSES 表中没有内容时才会触发。

为此,我们有以下代码:

SELECT  losses.userId,
losses.gameName,
losses.totalLosses
FROM TABLE__GAME_EVENTS__LOSSES losses
JOIN TABLE__GAME_EVENTS__WINS wins
ON wins.userId = losses.userId
AND wins.gameName = losses.gameName
WHERE losses.totalLosses >= 1
AND wins.totalWins = 0;

当我尝试执行该代码时,出现以下错误:io.confluent.ksql.parser.tree.LogicalBinaryExpression 不能转换为 io.confluent.ksql.parser.tree.ComparisonExpression

最初我认为它与 WHERE 子句有关,但在查看 Hojjat's answer to a similar question 之后,问题似乎与 JOIN 中的 AND 语句有关。

当我在两个表上运行 DESCRIBE EXTENDED 时,我得到以下结果(两者相同):

ksql> DESCRIBE EXTENDED TABLE__GAME_EVENTS__WINS;

Name : TABLE__GAME_EVENTS__WINS
Type : TABLE
Key field : KSQL_INTERNAL_COL_0|+|KSQL_INTERNAL_COL_1
Key format : STRING
Timestamp field : Not set - using <ROWTIME>
Value format : JSON
Kafka topic : TABLE__GAME_EVENTS__WINS (partitions: 4, replication: 1)

Field | Type
---------------------------------------
ROWTIME | BIGINT (system)
ROWKEY | VARCHAR(STRING) (system)
USERID | INTEGER
GAMENAME | VARCHAR(STRING)
TOTALWINS | BIGINT
---------------------------------------

鉴于 COL_0 - userIdCOL_1 - gameName 是两个表中的关键字段,看来合乎逻辑的是,它们必须包含在JOIN 中。是否有可能解决这个问题,或者目前无法在多列上JOIN

最佳答案

ON 子句中不能有多个表达式;你只能有一个。

尝试将其中一个移动到您的 WHERE 子句中:

SELECT  losses.userId,
losses.gameName,
losses.totalLosses
FROM TABLE__GAME_EVENTS__LOSSES losses
JOIN TABLE__GAME_EVENTS__WINS wins
ON wins.userId = losses.userId
WHERE wins.gameName = losses.gameName
AND losses.totalLosses >= 1
AND wins.totalWins = 0;

关于apache-kafka - KSQL 多列连接 - LogicalBinaryExpression 不能转换为 ComparisonExpression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58319510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com