Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 用于分页的Cassandra CQL令牌函数_Database_Cassandra_Token_Cql3 - Fatal编程技术网

Database 用于分页的Cassandra CQL令牌函数

Database 用于分页的Cassandra CQL令牌函数,database,cassandra,token,cql3,Database,Cassandra,Token,Cql3,我是CQL新手,正在尝试为cassandra中定义的表添加分页支持,如下所示- 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-

我是CQL新手,正在尝试为cassandra中定义的表添加分页支持,如下所示-

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的记录。我认为我以错误的方式执行查询。有人能帮我吗?

首先,您发送到
令牌()
函数的输入必须与您的分区键匹配…而不是完整的主键:

其次,分区值的顺序不一定与为它们生成的标记相同。看看当我再插入三行时会发生什么,以及使用
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')
生成的令牌