gpt4 book ai didi

database - 用于分页的 Cassandra CQL token 函数

转载 作者:搜寻专家 更新时间:2023-10-30 23:00:09 24 4
gpt4 key购买 nike

我是 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() 函数的输入必须与您的分区键匹配...不是您的完整主键键:

其次,您的分区值的顺序不一定与为它们生成的 token 相同。看看当我再插入三行并使用 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 行生成了最大 标记。因此,查询 token 值大于该年份的行将不会产生任何结果。但是,如果我想查询标记年份大于 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)

另请注意,您需要使用现有行的日期来返回对您更有值(value)的结果。毕竟token('2014','04','28')生成的token实际上可能不会大于token('2014','03')生成的token ,'19')

关于database - 用于分页的 Cassandra CQL token 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34601280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com