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) с использованием файл запроса.

Другие вопросы по тегам