2016-01-04 1 views
1

Я новичок в CQL и пытаемся добавить поддержку постраничной для моих таблиц, определенных в Кассандре, как показано ниже -Cassandra CQL функция маркеров для пагинации

cqlsh:dev> create table emp4 (empid uuid , year varchar , month varchar , day varchar, primary key((year, month, day), empid)); 
cqlsh:dev> insert into emp4 (empid, year, month, day) values (08f823ac-4dd2-11e5-8ad6-0c4de9ac7563,'2014','03','19'); 
cqlsh:dev> insert into emp4 (empid, year, month, day) values (08f823ac-4dd2-11e5-8ad6-0c4de9ac7562,'2016','03','19'); 

cqlsh:dev> select * from emp4; 

year | month | day | empid 
------+-------+-----+-------------------------------------- 
2016 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac7562 
2015 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac756f 
2014 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac7563 

When I try to execute a query to fetch the records based on the the following comparison, the statement seems to be incomplete as show below - 

cqlsh:dev> select * from emp4 where token(year, month, day, empid) > token('2014','04',28',08f823ac-4dd2-11e5-8ad6-0c4de9ac7563) LIMIT 1; 
     ... ; 
     ... 

Я пытаюсь принести записи, которые имеют год, месяц, день больше определенного значения, а также данного uuid. Я думаю, что я выполняю запрос не так. Может кто-то помочь мне с этим ?

ответ

2

Прежде всего, исходные данные, которые вы отправляете к функции должен совпадать с раздела ключ ... не ваш полный первичный ключ:

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

system.token(year, month, day) | year | month | day | empid 
--------------------------------+------+-------+-----+-------------------------------------- 
      -8209483605981607433 | 2016 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac7562 
      -6378102587642519893 | 2015 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac7562 
      -5253110411337677325 | 2013 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac7562 
      -3665221797724106443 | 2011 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac7562 
      -2421035798234525153 | 2012 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac7562 
      -742508345287024993 | 2014 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac7563 

(6 rows) 

Как вы можете видеть, строка решительно не в заказе года. И в этом случае ваша строка 2014 сгенерировала самый большой токен. Поэтому запрос строк, имеющих значение токена больше, чем этот год, ничего не даст. Но, если я хочу запросить строки с символическим годом более чем 2013, это работает:

SELECT token(year,month,day),year,month,day,empid FROM emp4 
    WHERE token(year,month,day) > token('2013','03','19'); 

system.token(year, month, day) | year | month | day | empid 
--------------------------------+------+-------+-----+-------------------------------------- 
      -3665221797724106443 | 2011 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac7562 
      -2421035798234525153 | 2012 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac7562 
      -742508345287024993 | 2014 | 03 | 19 | 08f823ac-4dd2-11e5-8ad6-0c4de9ac7563 

(3 rows) 

отметить также, что вам нужно будет использовать даты существующих строк, возвращать результаты, которые имеют большую ценность для вас , В конце концов, токен, генерируемый token('2014','04','28'), на самом деле не может быть больше, чем токен, генерируемый token('2014','03','19').

+0

Большое спасибо. Это было очень четкое объяснение. – psbits

 Смежные вопросы

  • Нет связанных вопросов^_^