我正在尝试加入表和流并创建另一个表,如下所示:
CREATE TABLE table_fx_latest AS
SELECT t1.currencyid,
t1.maxtimestamp,
t2.midprice
FROM stream_fx2 t2 LEFT JOIN table_fx_latest3 t1
ON t1.currencyid = t2.currencyid AND
t1.timestamp = t2.maxtimestamp
GROUP BY t1.currencyid,
t1.maxtimestamp,
t2.midprice;
但报告了以下错误:
Cannot RUN execution plan for this statement, CreateTableAsSelect{name=TABLE_FX_LATEST_PRICE6, query=Query{queryBody=QuerySpecification{select=Select{distinct=false, selectItems=[T1.CURRENCYID T1_CURRENCYID, T1.MAXTIMESTAMP MAXTIMESTAMP, T2.MIDPRICE MIDPRICE]}, from=Join{type=LEFT, left=AliasedRelation{relation=STREAM_FX2, alias=T2}, right=AliasedRelation{relation=TABLE_FX_LATEST3, alias=T1}, criteria=Optional[JoinOn{((T1.CURRENCYID = T2.CURRENCYID) AND (T2.TIMESTAMP = T1.MAXTIMESTAMP))}]}, =null, where=null, groupBy=Optional[GroupBy{isDistinct=false, groupingElements=[SimpleGroupBy{columns=[T1.CURRENCYID]}, SimpleGroupBy{columns=[T1.MAXTIMESTAMP]}, SimpleGroupBy{columns=[T2.MIDPRICE]}]}], having=null, orderBy=[], limit=null}, orderBy=[]}, notExists=false, properties={}}
Caused by: io.confluent.ksql.parser.tree.LogicalBinaryExpression cannot be cast to io.confluent.ksql.parser.tree.ComparisonExpression
以下是stream_fx2
流和table_fx_latest3
表的说明:
ksql> describe stream_fx2;
Field | Type
----------------------------------------
ROWTIME | BIGINT (system)
ROWKEY | VARCHAR(STRING) (system)
ID | INTEGER
CURRENCY | VARCHAR(STRING)
CURRENCYID | INTEGER
TIMESTAMP | BIGINT
BIDPRICE | DOUBLE
MIDPRICE | DOUBLE
OFFERPRICE | DOUBLE
ksql> describe table_fx_latest3;
Field | Type
------------------------------------------
ROWTIME | BIGINT (system)
ROWKEY | VARCHAR(STRING) (system)
CURRENCYID | INTEGER (key)
MAXTIMESTAMP | BIGINT
------------------------------------------
我想这可能是KSQL的一个错误(仍在开发人员预览中),但我想确保我没有遗漏任何东西。任何帮助将非常感激。
答案 0 :(得分:3)
JOIN
标准应该只是关键相等。如果您有任何其他标准,则需要将它们放入WHERE
子句中。
请尝试以下方法:
CREATE TABLE table_fx_latest AS
SELECT t1.currencyid,
t1.maxtimestamp,
t2.midprice
FROM stream_fx2 t2 LEFT JOIN table_fx_latest3 t1
ON t1.currencyid = t2.currencyid
WHERE
t1.timestamp = t2.maxtimestamp
GROUP BY t1.currencyid,
t1.maxtimestamp,
t2.midprice;
请告诉我这是否适合您。