Можно ли использовать множественное левое соединение в запросе Confluent KSQL? пытался присоединиться к потоку с более чем 1 таблицей, если нет, то какое решение?

Транслировать :

describe ammas;

 Field   | Type                        
-------------------------------------  
 ROWTIME | BIGINT           (system)  
 ROWKEY  | VARCHAR(STRING)  (system)   
 ID      | INTEGER                      
 -------------------------------------

Чтобы получить статистику времени выполнения и подробные сведения о запросах, выполните: DESCRIBE EXTENDED <Stream,Table>;

Таблица-01:

ksql> show tables;

Table Name | Kafka Topic | Format    | Windowed 
-------------------------------------------------
ANNAT      | anna        | DELIMITED | false    
APPAT      | appa        | DELIMITED | false    
-------------------------------------------------

Попытка присоединиться к потоку по сравнению с таблицей-01 работает должным образом. Создайте конечный поток потока, выбрав a.id из ammas левое соединение appat b на a.id = b.id, где b.id равно null.

Но когда я попытался объединить более одной таблицы с потоком на основе следующего запроса:

ksql> SELECT * FROM ammas cd LEFT JOIN appat ab ON ab.id = cd.id LEFT JOIN annat aa ON aa.id =cd.id;
ServerError:io.confluent.ksql.parser.exception.ParseFailedException
Caused by: null

Что не так? Спасибо.


person Karthikeyan Rasipalay Durairaj    schedule 21.07.2018    source источник
comment
На основании моего анализа: несколько объединений в одном операторе в настоящее время не поддерживаются. вы можете сделать то же самое, написав несколько операторов KSQL: CREATE STREAM промежуточный AS SELECT * FROM ammas cd LEFT JOIN appat ab ON ab.id = cd.id SELECT * FROM промежуточный cd LEFT JOIN annat aa ON aa.id = cd.id   -  person Karthikeyan Rasipalay Durairaj    schedule 24.07.2018


Ответы (1)


В настоящее время KSQL (v5.3) поддерживает только одну операцию соединения для каждого оператора. Если вы хотите выполнить несколько соединений, вы должны последовательно соединить их в несколько операторов, например

CREATE STREAM out1 AS 
  SELECT * FROM ammas cd 
           LEFT JOIN appat ab 
             ON ab.id = cd.id 

CREATE STREAM out_final AS 
  SELECT * FROM out1 o 
           LEFT JOIN annat aa ON o.id =cd.id;

Обновление от ноября 2020 года: ksqlDB поддерживает многосторонние соединения, добавленные в ksqlDB v0.9. Confluent Platform 6.0 включает ksqlDB 0.10.2 и, следовательно, также включает эту функциональность. См. блог выпуска и документации. .

person Robin Moffatt    schedule 03.09.2019
comment
Это все еще верно с v0.13.0? Вроде так ... - person mjahr; 24.11.2020
comment
@mjahr Я обновил свой ответ - person Robin Moffatt; 27.11.2020
comment
Благодарю. В любом случае, я ошибся, похоже, проблема скорее связана с подключением, чем с KSQL ... - person mjahr; 29.11.2020