External State Join в YTsaurus Flow (Python)
Пайплайн обогащает события из очереди данными из заранее созданной динамической таблицы через read-only external state joiner.
Структура пайплайна
event_reader публикует стрим event. Компаньонский компьютейшен lookup_join группирует сообщения по key, читает /reference через external_state_joiners и передаёт успешные совпадения в enriched. Queue-sink сохраняет выходные сообщения. path joiner-а может указывать на Cypress-ссылку, чтобы переключать справочник без перезапуска пайплайна.
См. спеку пайплайна.
Чтение присоединённого стейта
ctx.joined_external_state("/reference", message) выбирает строку по ключу сообщения. Возвращаемый аксессор доступен только для чтения. Если строка не найдена, он содержит пустой payload: get("name") возвращает None, и пример не публикует результат.
class LookupJoin(RowFunction):
"""Looks up each event's name in the reference state and emits the joined row."""
def on_message(self, message, output, ctx):
name = ctx.joined_external_state("/reference", message).get("name")
if name is None:
return
builder = ctx.message_builder("enriched")
builder.set("key", message.payload["key"])
builder.set("name", name)
output.add_message(builder.finish())
См. также
Предыдущая
Следующая