Apache kafka 如何在KSQL中联接此表?
我正在使用CDC和Debezium连接器将一些表从MS SQL Server流式传输到Kafka。其中一个SQL表在KSQL中表示为流,其余的是我想加入流以丰富数据的KSQL表,因此我有一个KSQL流链,每个KSQL流将一个新的KSQL表加入到链中先前KSQL流的输出中 让A成为KSQL流。Apache kafka 如何在KSQL中联接此表?,apache-kafka,confluent-platform,ksqldb,Apache Kafka,Confluent Platform,Ksqldb,我正在使用CDC和Debezium连接器将一些表从MS SQL Server流式传输到Kafka。其中一个SQL表在KSQL中表示为流,其余的是我想加入流以丰富数据的KSQL表,因此我有一个KSQL流链,每个KSQL流将一个新的KSQL表加入到链中先前KSQL流的输出中 让A成为KSQL流。 设B到D为KSQL表。 A+B=A' A'+C=A' A'+D=A'' 这对于A'和A''来说效果很好,但A''给了我一个错误:源表(D)键列(X)不是联接条件(Y)中使用的列。为什么我能够生成流A'和流A
设B到D为KSQL表。
A+B=A'
A'+C=A'
A'+D=A'' 这对于A'和A''来说效果很好,但A''给了我一个错误:
源表(D)键列(X)不是联接条件(Y)中使用的列。
为什么我能够生成流A'和流A'',而A''给了我这个错误
我发现一些SO问题表明我应该使用PARTITION BY子句重新输入D,但这会导致另一个错误:不匹配的输入'PARTITION'expecting';'代码>。似乎CREATE TABLE
不能很好地使用partitionby
,如果我使用CREATE STREAM
,它告诉我不能从表创建流,应该使用CREATE TABLE
停
更新:添加了模糊查询
CREATE STREAM A_Enriched_Phase7
WITH(PARTITIONS=1)
AS
SELECT *
FROM A_Enriched_Phase6 a
JOIN KsqlTableD d ON a.X = d.X
PARTITION BY a.ID;
这里有一些问题,如果没有完整的源SQL语句集,很难回答
当您在KSQL中连接到一个表时,连接是在消息的键上执行的李>
在KSQL中创建表时,可以使用WITH(KEY='col\u foo'
语法通知KSQL架构中的字段与键具有相同的值。您没有做的是指示KSQL使用col\u foo
字段为消息设置键
让我们假设您的表是这样定义的:
ksql> CREATE TABLE KsqlTableD (COL1 VARCHAR, X VARCHAR, Y VARCHAR) WITH (KAFKA_TOPIC='D', VALUE_FORMAT='AVRO', PARTITIONS=1, KEY='Y');
Message
---------------
Table created
---------------
插入一些数据:
ksql> INSERT INTO KsqlTableD (COL1, X, Y) VALUES ('A','B','C');
现在,尝试在不是表的键列的列上进行联接:
因此,您需要在键列上加入:
ksql> SELECT A.*,D.* FROM MYSTREAM A LEFT JOIN KsqlTableD D ON A.COL1=D.Y;
1565700762038 | 1 | 1 | FOO | null | null | null | null | null
或者,您需要重新设置表数据的键,然后对其进行连接:
ksql> CREATE STREAM D WITH (KAFKA_TOPIC='D', VALUE_FORMAT='AVRO');
Message
----------------
Stream created
----------------
ksql>
ksql> CREATE STREAM D_REKEY AS SELECT * FROM D PARTITION BY X;
Message
----------------------------
Stream created and running
----------------------------
ksql> CREATE TABLE D_X WITH (KAFKA_TOPIC='D_REKEY', VALUE_FORMAT='AVRO', KEY='X');
Message
---------------
Table created
---------------
ksql> SELECT A.*,D.* FROM MYSTREAM A LEFT JOIN D_X D ON A.COL1=D.X;
1565700762038 | 1 | 1 | FOO | null | null | null | null | null
您还可以共享KSQL查询吗?
ksql> CREATE STREAM D WITH (KAFKA_TOPIC='D', VALUE_FORMAT='AVRO');
Message
----------------
Stream created
----------------
ksql>
ksql> CREATE STREAM D_REKEY AS SELECT * FROM D PARTITION BY X;
Message
----------------------------
Stream created and running
----------------------------
ksql> CREATE TABLE D_X WITH (KAFKA_TOPIC='D_REKEY', VALUE_FORMAT='AVRO', KEY='X');
Message
---------------
Table created
---------------
ksql> SELECT A.*,D.* FROM MYSTREAM A LEFT JOIN D_X D ON A.COL1=D.X;
1565700762038 | 1 | 1 | FOO | null | null | null | null | null