У меня проблема с пробелами в именах при использовании EXTRACTJSONFIELD в KSQL Например:
SELECT EXTRACTJSONFIELD(payload, '$.Successful Login') FROM MYSTREAM;
- всегда возвращает NULL
Как мне обрабатывать пробелы в именах ключей?
Я пытался:
EXTRACTJSONFIELD(payload, '$.Successful%Login')
EXTRACTJSONFIELD(payload, '$.Successful%20Login')
EXTRACTJSONFIELD(payload, '$.[Successful Login]')
EXTRACTJSONFIELD(payload, '$."Successful Login"')

tl; dr: используйте [\\"label\\"] для ссылки на поле
Данные испытаний:
echo '{"id":1,"test":{"Successful Login":1}}' | kafkacat -b localhost:9092 -t test1
Объявите поток в KSQL и проверьте сообщение:
ksql> create stream test1 (id bigint, test varchar) with (kafka_topic='test1', value_format='json');
Message
----------------
Stream created
----------------
ksql> select id, test from test1;
1 | {"Successful Login":1}
Неэкранированная ссылка на столбец не работает:
ksql> select extractjsonfield(test,'$.Successful Login') from test1;
null
Столбец Escape с использованием [\\" (также обратите внимание, что не используется точечная нотация):
ksql> select extractjsonfield(test,'$[\\"Successful Login\\"]') from test1;
1
Это решение любезно предоставлено Новиковантонио на Эта проблема
Я просто попробовал ответить Робина, используя KSQL 6 (CLI v6.0.0, Server v6.0.0). Для меня это не работает с двумя обратными косыми чертами. Для меня это работает только с одной обратной косой чертой или без обратной косой черты в ksqldb cli, например:
ksql> select extractjsonfield(test,'$[\"Successful Login\"]') from test1;
или же ksql> выберите extractjsonfield (test, '$ ["Успешный вход"]') из test1;
Для меня он работает без обратной косой черты только при запуске запроса из объединенного командного центра (версия 6.0.0), а также при передаче запроса на безголовый сервер ksqldb (confluentinc / cp-ksqldb-server: изображение 6.0.0) с использованием файл запроса.