PRIMARY KEY (id_function, sort, id_subfunction)
В Cassandra CQL столбцы в составного первичного ключа являются либо Partitioning ключи или кластеризацию ключей. В вашем случае id_function
(первый указанный ключ) - это ключ разделения. Это ключевое значение, которое хешируется, так что ваши данные для этого ключа могут быть равномерно распределены на вашем кластере.
Остальные столбцы (sort
и id_subfunction
) известны как кластерные столбцов, которые определяют порядок сортировки данных в пределах раздела. Это по существу означает, что ваши данные будут отсортированы только по вашим ключам кластеризации, когда ключ разделения сначала будет указан в вашем предложении WHERE
.
У вас есть два варианта:
1) запросить эту таблицу id_function
вместо:
SELECT * FROM functions WHERE id_function= 0 ORDER BY sort;
Это будет технически работать, хотя я предполагаю, что это не даст вам результаты, которые вы ищем.
2) Лучший вариант - создать «таблицу запросов». Это таблица, предназначенная специально для обработки вашего запроса по id_subfunction
. Это только отличается от оригинала functions
таблицы в том, что первичный ключ определен с id_subfunction
в качестве ключа разделения:
CREATE TABLE functionsbysubfunction (
id_function int,
sort int,
id_subfunction int,
php_class varchar,
php_function varchar,
PRIMARY KEY (id_subfunction, sort, id_function)
);
Эта таблица запроса позволит этот запрос функционировать, как и ожидалось:
SELECT * FROM functionsbysubfunction WHERE id_subfunction = 0;
А ты не нужно указывать ORDER BY
, если вы не хотите указывать порядок ASCending или DESCending.
Помните, что Cassandra важно спроектировать вашу модель данных в соответствии с тем, как вы хотите запросить свои данные. И это может быть не так, как изначально имеет смысл хранить его.