При выполнении 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.

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