【问题标题】:KSQL query to display receiver and sender info显示接收方和发送方信息的 KSQL 查询
【发布时间】:2020-05-14 00:36:57
【问题描述】:

我有一个名为users 的表,如下所示:

 +----+----------------+
 | id | name           | 
 +----+----------------+
 |  1 | Blake          | 
 |  2 | Jenn           | 
 +----+----------------+

我有一个名为transactions 的流,看起来像这样:

 +----+----------------+----------------+
 | id | sender         | receiver       | 
 +----+----------------+----------------+
 |  1 | 1              | 2              |
 |  2 | 2              | 1              |
 +----+----------------+----------------+

所以基本上我想要的结果是这样的:

 +----+----------------+----------------+----------------+----------------+
 | id | sender         | sender_name    | receiver       |receiver_name  |
 +----+----------------+----------------+----------------+----------------+
 |  1 | 1              | Blake          | 2              | Jenn           |
 |  2 | 2              | Jenn           | 1              | Blake          |
 +----+----------------+----------------+----------------+----------------+

我只设法加入由发送者或接收者分区的流和表,因此我只能获取发送者信息或接收者信息。

【问题讨论】:

    标签: apache-kafka ksqldb


    【解决方案1】:

    您可以对users 表使用两次JOIN 以获得预期结果:

    SELECT TR.id, TR.sender, SE.name AS sender_name, TR.receiver, RE.name AS receiver_name
    FROM transactions TR
    JOIN users SE ON SE.id = TR.sender
    JOIN users RE ON RE.id = TR.receiver
    

    【讨论】:

      【解决方案2】:

      关键是创建一个流来显示它,我已经尝试过您实际描述的方法,但我认为它在 ksql 上不起作用,因为它需要一个 ';'在第一次内部连接之后。

      Statement: create stream  userstransactionsjoinedfinal as select t.txid,t.sender,    
      up1.firstname as senderfirstname,up1.lastname as senderlastname,up1.phonenumber as 
      senderphonenumber,up1.email as senderemail,t.receiver,up2.firstname as 
      receiverfirstname,up2.lastname as receiverlastname,up2.phonenumber as 
      receiverphonenumber,up2.email as receiveremail,  t.SENDERWALLETID,  
      t.RECEIVERWALLETID,t.status,t.type,t.amount,t.totalfee from transactionsrekeyed 
      inner join usersnow up1 on up1.id=t.sender inner join usersnow up2 on up2.id = 
      t.receiver;
      Caused by: line 1:483: mismatched input 'inner' expecting ';'
      Caused by: org.antlr.v4.runtime.InputMismatchException
      

      【讨论】:

        猜你喜欢
        • 2012-06-12
        • 2016-01-22
        • 1970-01-01
        • 1970-01-01
        • 2023-01-27
        • 2020-06-15
        • 1970-01-01
        • 2012-08-12
        • 1970-01-01
        相关资源
        最近更新 更多