Почему CQL предлагает мне использовать ALLOW FILTERING при обновлении? - PullRequest
0 голосов
/ 05 мая 2019

Мой простой запрос на обновление выдает следующую ошибку.

InvalidRequest: Error from server: code=220 [Invalid query] 
message="Cannot execute this query as it might involve data filtering and 
thus may have unpredictable performance. If you want to execute this 
query despite the performance unpredictability, use ALLOW FILTERING"

Насколько я знаю, ALLOW FILTERING добавляет индексирование и обычно используется для запроса SELECT.Я пытался понять причину этой ошибки.Но не смог ничего найти.Кроме того, я только начал изучать CQL, несколько концепций для меня новы.

Вот схема моей таблицы:

CREATE TABLE blogplatform.users (
    user_id int PRIMARY KEY,
    active_status int,
    password text,
    user_name text
) WITH bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'ALL'}
    AND comment = ''
    AND compaction = {'class': 'SizeTieredCompactionStrategy'}
    AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99.0PERCENTILE';

Запрос, который я пытаюсь выполнить:

UPDATE users SET active_status = 0 WHERE user_name='Heath';

Вывод:

InvalidRequest: Error from server: code=220 [Invalid query] 
message="Cannot execute this query as it might involve data filtering and 
thus may have unpredictable performance. If you want to execute this 
query despite the performance unpredictability, use ALLOW FILTERING"

Я даже пытался добавить ALLOW FILTERING в запросе:

UPDATE users SET active_status = 0 WHERE user_name='Heath' ALLOW FILTERING;

Вывод:

SyntaxException: line 1:59  : syntax error...

Может кто-нибудь пожалуйстаобъясните мне, почему я получаю эту ошибку при простом обновлении.Кроме того, кто-нибудь может мне помочь решить эту ошибку.

Спасибо.

1 Ответ

1 голос
/ 06 мая 2019

Вы не можете использовать столбец значений в предложении where (без разрешения фильтрации, но снова разрешить фильтрацию - это не волшебное слово, а просто много загружает базу данных) - это применимо ко всем типам запросов, а не только Выберите запросы.

Лучшим вариантом для вас будет переместить имя пользователя как ПЕРВИЧНЫЙ КЛЮЧ (PARTITION KEY).

С этой таблицей вы можете выполнить запрос как.

UPDATE users SET active_status = 0 WHERE user_name='Heath';
...