KSQL Steam-table Left join частично (и незаметно) не заполняет значения

Присоединяюсь к потоку со столом. Результат соединения успешен только частично. Некоторые значения заполнены точно, а другие равны нулю. Я проверил, существуют ли значения как в таблице, так и в потоке, и что столбец, используемый для соединения, является ключом для обоих.

Я использую конфлюэнт для загрузки тем, которые читаются из таблиц в MSSQL с помощью jdbc.

Затем я создаю поток и таблицу из соответствующих тем с помощью KSQL, и все данные находятся в формате JSON.

Отметки времени для отсутствующих данных в таблице старше, чем у потока.

create stream casecode_contract_stream as select ct.projectid, ct.casecode, cs.isTrue from contract_stream cs left join casecode_table ct on cs.projectid = ct.projectid;    

select * from casecode_contract_stream limit 1;
1532034321292 | 706083 | null | null | true

ksql> select * from casecode_contract_stream where casecode is not null limit 1;
1532034321292 | 705147 | 705147 | data1 | true

select * from casecode_table where projectid = 705147;
1532033878462 | 705147 | 705147 | data1 

select * from casecode_table where projectid = 706083;
1532033878463 | 706083 | 706083 | data2 

select * from contract_stream where projectid = 705147;
1532034321292 | 705147 | 705147 | true

select * from contract_stream where projectid = 706083;
1532034321292 | 706083 | 706083 | true

Какие-либо предложения?


person OLahav    schedule 20.07.2018    source источник


Ответы (1)


Результат зависит от (недетерминированного) порядка обработки. Это известная проблема, и в настоящее время ведется работа по повышению детерминированности порядка обработки.

Может случиться так, что записи со стороны потока обрабатываются до того, как записи будут добавлены к стороне таблицы. В этом случае, если вы укажете соединение слева, запись потока будет объединена с NULL.

person Matthias J. Sax    schedule 20.07.2018
comment
Отметка времени в данных таблицы предшествует метке времени потока. Вы предлагаете отдельное время обработки, которое не соответствует метке времени? - person OLahav; 23.07.2018
comment
Синхронизация временных меток не идеальна для банкомата - это известная проблема, и в настоящее время мы работаем над исправлением: issues.apache.org/jira/browse/KAFKA-3514 - после исправления KAFKA-3514 записи таблицы с меньшими отметками времени будут обработаны первыми для заполнения таблицы. Atm, единственный известный обходной путь (не уверен, можно ли его применить) - начать с двух пустых тем, сначала записать данные таблицы и дождаться их обработки, а затем записать данные потока. Конечно, если у вас есть существующие темы с данными, это сделать невозможно. - person Matthias J. Sax; 23.07.2018