Ksql: Left Join Отображает столбцы из потока, но не таблицы

У меня есть одна пара и таблица в KSQL, как указано ниже:

Название потока: DEAL_STREAM

Имя таблицы: EXPENSE_TABLE

Когда я запускаю следующие запросы, он отображает только столбцы из потока, но столбцы таблицы не отображаются.

Это ожидаемый результат. Если нет, я что-то не так делаю?

SELECT TD.EXPENSE_CODE, TD.BRANCH_CODE, TE.EXPENSE_DESC
FROM DEAL_STREAM TD
LEFT JOIN EXPENSE_TABLE TE ON TD.EXPENSE_CODE = TE.EXPENSE_CODE
WHERE TD.EXPENSE_CODE LIKE '%NL%' AND TD.BRANCH_CODE LIKE '%AM%';

Результат запроса показан ниже.

NL8232@#0          | AM   | null
NL0232@#0          | AM   | null
NL6232@!0          | AM   | null
NL5232^%0          | AM   | null

person Zamir Arif    schedule 25.04.2018    source источник
comment
См. Также stackoverflow.com/questions/50102662/   -  person Robin Moffatt    schedule 03.05.2018


Ответы (1)


Когда я запускаю следующие запросы, он отображает только столбцы из потока, но столбцы таблицы не отображаются.

При объединении потоковой таблицы (слева) выходные записи будут содержать null столбцов (для столбцов на стороне таблицы), если во время объединения / поиска в таблице нет соответствующей записи.

Это ожидаемый результат. Если нет, я что-то не так делаю?

Возможно ли, что, например, вы записали (1) входные данные в поток до того, как вы записали (2) входные данные в таблицу? Если это так, то запрос на соединение потоковой таблицы попытался бы выполнить поиск в таблице во время (1), когда в таблице еще не было таких данных поиска (потому что это произошло позже во время (2)). Поскольку таких табличных данных не было, соединение записало выходные записи, где столбцы на стороне таблицы были null.

Примечание: это соединение потоковой таблицы в KSQL (и, как следствие, Apache Kafka Streams API, на котором построен KSQL) в значительной степени является нормой для объединений в мире потоковой передачи. Здесь только потоковая сторона соединения потоковой таблицы будет запускать выходы нисходящего соединения, и если нет соответствия для записи потока на стороне таблицы в то время, когда присоединяется новая входная запись, то сторона таблицы столбцы будут null. Однако, поскольку это частая причина путаницы пользователей, в настоящее время мы работаем над добавлением запуска вывода соединения на стороне таблицы в Streams API и KSQL Apache Kafka. Когда такая функция доступна, проблема, указанная выше, больше не возникнет.

person Michael G. Noll    schedule 25.04.2018
comment
В этом случае. Данные были загружены несколько недель назад с помощью Oracle Golden Gate из Oracle DB в Kafka. Теперь сегодня я создал поток и таблицу из существующих данных в темах и установил смещение на самое раннее, чтобы он все воспроизводил. при запуске соединения все данные существовали в потоках и таблицах, поэтому в идеале я должен был получить совпадения. Я что-то здесь упускаю? - person Zamir Arif; 25.04.2018
comment
У меня еще 2 вопроса 1. Когда в поток добавляются новые данные, то для присоединения будет производиться полное сканирование таблицы или нет? 2. Можем ли мы объединить 2 таблицы в 4.1.0, потому что несколько дней назад я видел обсуждение на GitHub? Это реализовано? - person Zamir Arif; 25.04.2018
comment
1) Да, когда в поток добавляются новые записи данных, последующее соединение (для этих новых записей) будет искать соответствующие данные таблицы (поскольку данные таблицы теперь доступны). 2) Объединения таблиц и таблиц пока не поддерживаются в 4.1.0, но скоро будут добавлены. - person Michael G. Noll; 25.04.2018
comment
Майкл Г. Нолл - Я сделал следующее, чтобы чисто проверить эту проблему. 1. Очистил все данные темы для потоков в моем конвейере данных. 2. Вся таблица все еще существует. 3. Запустите начальную загрузку из OGG, которая заполнит мои потоки. 4. Проверено на наличие всех опечаток и т. Д. 5. Сравните код соединения с кодом существующей таблицы для описания их существования. Фактическое описание для всего кода существует. 6. По-прежнему данные из потока, код которого заполняется, но данные из таблицы, соответствующей описанию кода, не заполняются. Пожалуйста помоги - person Zamir Arif; 26.04.2018
comment
Здравствуйте, я столкнулся с той же проблемой, в которой данные существуют в ktable, и когда я присоединяюсь к потоку, столбцы потока печатаются, но в таблице отображаются пустые столбцы, пожалуйста, помогите !! - person Raj Saraogi; 28.08.2019