При выполнении SELECT в Cassandra (Spark) по полю SAI. В каком порядке возвращаются строки?
Если у меня есть таблица в Astra, созданная так:
CREATE TABLE rayven.mytable (
a text,
b text,
c timestamp,
PRIMARY KEY (a, c)
) WITH CLUSTERING ORDER BY (c DESC)
Затем я добавил индекс SAI:
CREATE CUSTOM INDEX b_index ON mytable (b) USING 'StorageAttachedIndex';
Когда я запрашиваю с помощью ORDER BY:
select * from mytable where b='x' order by c desc;
я понимаю
InvalidRequest: Error from server: code=2200 [Invalid query] message="ORDER BY with 2ndary indexes is not supported."
Поскольку исходная таблица упорядочена по убыванию "c". Могу ли я предположить, что результат вышеупомянутого SELECT будет в этом порядке или нет способа узнать или контролировать порядок при выборе с использованием индекса SAI?
1 ответ
Чтобы проиллюстрировать это, я создал вашу таблицу и вставил некоторые данные. Затем я запросил у таблицы значение
b
, и включал
token
функция ключа раздела для этого примера.
Примечание: работает не в Astra, а на моем локальном экземпляре 4.0 rc1. Однако принципы остаются прежними.
Как правило, все наборы результатов сортируются по хешированным значениям токенов ключа раздела, а затем
CLUSTERING ORDER
имеет приоритет в каждом разделе:
> SELECT a, token(a), c FROM mytable WHERE b='b';
a | system.token(a) | c
----+----------------------+---------------------------------
a4 | -9170418876698302957 | 2021-05-03 14:38:42.708000+0000
a5 | -925545907721365710 | 2021-05-03 14:39:06.849000+0000
a3 | -96725737913093993 | 2021-05-03 14:40:30.942000+0000
a3 | -96725737913093993 | 2021-05-03 14:39:18.340000+0000
a2 | 5060052373555595560 | 2021-05-03 14:40:30.938000+0000
a2 | 5060052373555595560 | 2021-05-03 14:39:14.914000+0000
a1 | 5693669818594506317 | 2021-05-03 14:38:54.426000+0000
a1 | 5693669818594506317 | 2021-05-03 14:38:52.758000+0000
(8 rows)
Как вы можете видеть здесь, набор результатов не полностью отсортирован по. Но сначала сортируются по хэшированным символическим значениям, а затем сортируется по пределам каждого раздела (
a
).
Так что "нет", вы не можете рассчитывать на автоматическую сортировку данных по
c
.