Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 如何在KSQL中联接此表?_Apache Kafka_Confluent Platform_Ksqldb - Fatal编程技术网

Apache kafka 如何在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

我正在使用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'',而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