Я пытаюсь обогатить некоторые данные о событиях с помощью KSQL (5.2.3) и Kafka (2.12-2.3.0).
Left Соединение потока с таблицей.
НоЧастичный результат объединения не содержит обогащенных данных, как я ожидал.
Я выяснил проблему.
Проблема в том, что соединение слева обрабатывается до того, как таблица загрузит связанное предыдущее событие.
Чтобы прояснить проблему, я вставил данные упрощенного запроса и события KSQL.
События:
TimeStamp | EventType | EventData
1 | Create | ID:1, Name:"HELLO"
2 | Access | ID:1, TID:2
3 | Write | ID:1, TID:2
100 | Acesss | ID:1, TID:3
110 | Write | ID:1, TID:3
Поток и таблица:
CREATE STREAM SUBJECT_CREATE (TIMESTAMP='TimeStamp') AS SELECT TimeStamp, ID, Name FROM EVENT_STREAM WHERE EventType='Create' PARTITION BY ID;
CREATE TABLE SUBJECT_CREATE_TABLE (*) WITH (KAFKA_TOPIC='SUBJECT_CREATE', KEY='ID') ;
CREATE STREAM SUBJECT_ACCESS (TIMESTAMP='TimeStamp') AS SELECT TimeStamp, ID, TID FROM EVENT_STREAM WHERE EventType='Access' PARTITION BY ID;
CREATE STREAM SUBJECT_CR_AC_JOIN WITH(TIMESTAMP='TimeStamp') AS SELECT N.TimeStamp AS TimeStamp, N.ID AS ID, N.TID AS TID, P.Name AS Name FROM SUBJECT_ACCESS N LEFT JOIN SUBJECT_CREATE_TABLE P ON N.ID = P.ID PARTITION BY ID;
РезультатSUBJECT_CR_AC_JOIN Поток:
TimeStamp | ID | TID | Name
2 | 1 | 2 | null ==> Expected "HELLO"
100 | 1 | 3 | "HELLO"
Второй содержит «Имя», но первый не содержит.
Возможно ли их синхронизировать в KSQL?
Спасибо.