KSQL EXTRACTJSONFIELD пробел в имени ключа
У меня проблема с пробелами в именах при использовании 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"')
1 ответ
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
Это решение любезно предоставлено https://github.com/novikovantonio по этому вопросу.
Я только что попробовал ответить Робина, используя 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) с использованием файл запроса.