Получение ошибки при чтении данных из кластера DSE с помощью Stargate API

Из-за некоторых технических проблем с использованием cassandra с Talend мы используем stargate api для чтения и записи данных в DSE Cassandra. Я должен был сказать, что я совершенно новичок в мире cassandra или даже NoSql.

У меня есть несколько полей: status(текст), status_code(текст) и попыткеp_count(int). Теперь мне нужно прочитать данные из Кассандры с условием ниже.

состояние:

      status!='PROCESSED' and status_code!=400 and attemp_count<8

Вот как выглядит мой дизайн стола.

И ниже я получаю ошибку.

Столбец status_code имеет индекс, но не поддерживает операторы, указанные в запросе. Если вы хотите выполнить этот запрос, несмотря на непредсказуемость производительности, используйте РАЗРЕШИТЬ ФИЛЬТРАЦИЮ

      {
    "description": **"Bad request: org.apache.cassandra.stargate.exceptions.InvalidRequestException:** Column 'status_code' has an index but does not support the operators specified in the query. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING",
    "code": 400
}

Запрос, который я использую для простого теста:

      {{url}}/v2/keyspaces/dco/mc_inbound_log?where={"status_code":{"$gt":"201"}}

2 ответа

Дветтлауфер действительно прав, говоря, что это проблема моделирования данных. Базовый запрос CQL недействителен, поэтому Stargate.io не сможет его запустить.

Вы фильтруете столбцы, которые (1) не являются частью первичного ключа и (2) не индексируются. Это причина, по которой (3) требуется для. Отрицательные фильтры ( ) также стоит дорого, потому что для этого потребуется полное сканирование таблицы.

У вас есть вариант использования аналитики, поэтому подумайте об использовании Spark или Solr. Ваше здоровье!

Вы можете попробовать использовать status! = 'PROCESSED' и status_code! = '400' и tryp_count<8

Поскольку status_code - это строка, вам понадобятся кавычки.

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