KSQL объединяет записи не по порядку и отношения 1: 1 с несколькими обновлениями - PullRequest
0 голосов
/ 24 апреля 2019

Учитывая процесс потоковой передачи, при котором входящие данные обогащаются производителем, а inner join между входящим и обогащающим потоками создает обогащенный выходной поток:

CREATE STREAM ENRICHED_OUTPUT AS \
SELECT * FROM INCOMING_STREAM A \
INNER JOIN ENRICHER_STREAM B \
WITHIN 7 DAYS ON A.ID = B.ID

тогда

SELECT * FROM ENRICHED_OUTPUT

даст следующий результат, , как только ключ 123 существует в обоих потоках:

+------+------+--------+--------+
| A_ID | B_ID | A_DATA | B_DATA |
+------+------+--------+--------+
| 123  | 123  | FOO    | BAR    |
+------+------+--------+--------+

Крутая вещь: если обработка идентификатора 123 в обогащателе задерживается, inner join гарантирует, что ENRICHED_OUTPUT задержится, пока ENRICHER_STREAM не содержит ключ 123.

Довольно точно, что я хочу.

Но учитывая, что ENRICHER_STREAM содержит две записи для ключа 123 за последние 7 дней со значениями BAR и BAZ, ENRICHED_OUTPUT выдаст две строки для каждого входящего ключа 123:

+------+------+--------+--------+
| A_ID | B_ID | A_DATA | B_DATA |
+------+------+--------+--------+
| 123  | 123  | FOO    | BAR    |
+------+------+--------+--------+
| 123  | 123  | FOO    | BAZ    |
+------+------+--------+--------+

довольно точно не то, что я хочу.

Я понимаю, что присоединение к таблице ENRICHER_TABLE правильно решит соединение 1: 1 и предоставит последнее состояние ключа 123:

+------+------+--------+--------+
| A_ID | B_ID | A_DATA | B_DATA |
+------+------+--------+--------+
| 123  | 123  | FOO    | BAZ    |
+------+------+--------+--------+

Что опять-таки в значительной степени то, что я хочу.

Проблема с этим подходом заключается в том, что объединения таблиц потоков не обновляются при обновлении таблицы, и ENRICHED_OUTPUT пропускает все входящие события, пока ENRICHER_TABLE не получит ключ 123

Опять же, это не то, что я хочу.

Итак, мой вопрос:

Каким будет чистый подход для обеспечения отношений 1: 1 с записями вне порядка и множественными обновлениями ключа в пределах временного окна?

...