卡桑德拉 delta/relative 查询
Cassandra delta/relative querying
我必须安排一个批处理,每天复制一个 table 的增量。这个table只是写的,从来没有更新过。我将 java 与 jdbc 一起使用,我想知道 table 上是否有元数据或其他内容,可以查询这些元数据或其他内容以获取在特定日期后添加的所有行。
为什么要元数据?
因为我的 table 看起来像 :
CREATE TABLE aTable (
aTable_id timeuuid,
...
PRIMARY KEY ((aTable_id))
) WITH
...
我不能将 timeuuid 键放在 where 子句中,例如:
SELECT * FROM aTable WHERE aTable_id > minTimeuuid(?)
和令牌函数,即使 aTable_id
被正确排序也会给我错误的结果:
SELECT * FROM aTable WHERE token(aTable_id) > token(minTimeuuid(?))
简而言之,我的问题是:如何获得比特定日期更新的表?
在cassandra中主键也是分区键。
为每个 timeuuid 创建一个分区是没有意义的......
所以通常你用主键对事物进行分组,然后使用聚类键来排序。
这是一个接近我所做的例子:
create table sensors(
location varchar,
timestamp timeuuid,
...
PRIMARY KEY(location, timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC) AND ...
位置是分区键,时间戳是集群键。
然后你可以select像这样:
SELECT * from sensors
where location='tarifa'
and timestamp > maxTimeuuid('2015-04-15 13:00')
and timestamp < minTimeuuid('2015-04-15 15:00');
所以我最终找到了一个解决方案,是在介绍 cassandra 3.0 的聚会上找到的。
请记住,架构是为另一个请求设置的,而键不是为增量请求设置的。
我的目的是只查询上一批次的更新行,我这样做是这样的:
- 创建索引table,按日期小时分区(分、秒和毫秒被截断)。此 table 由来自主要 table.
的全球索引提供
- 在 java 中,按小时查询索引 (
loop on a calendar
),select 使用 IN
查询主要 table。
- 任务完成!
我必须安排一个批处理,每天复制一个 table 的增量。这个table只是写的,从来没有更新过。我将 java 与 jdbc 一起使用,我想知道 table 上是否有元数据或其他内容,可以查询这些元数据或其他内容以获取在特定日期后添加的所有行。
为什么要元数据? 因为我的 table 看起来像 :
CREATE TABLE aTable (
aTable_id timeuuid,
...
PRIMARY KEY ((aTable_id))
) WITH
...
我不能将 timeuuid 键放在 where 子句中,例如:
SELECT * FROM aTable WHERE aTable_id > minTimeuuid(?)
和令牌函数,即使 aTable_id
被正确排序也会给我错误的结果:
SELECT * FROM aTable WHERE token(aTable_id) > token(minTimeuuid(?))
简而言之,我的问题是:如何获得比特定日期更新的表?
在cassandra中主键也是分区键。 为每个 timeuuid 创建一个分区是没有意义的...... 所以通常你用主键对事物进行分组,然后使用聚类键来排序。
这是一个接近我所做的例子:
create table sensors(
location varchar,
timestamp timeuuid,
...
PRIMARY KEY(location, timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC) AND ...
位置是分区键,时间戳是集群键。
然后你可以select像这样:
SELECT * from sensors
where location='tarifa'
and timestamp > maxTimeuuid('2015-04-15 13:00')
and timestamp < minTimeuuid('2015-04-15 15:00');
所以我最终找到了一个解决方案,是在介绍 cassandra 3.0 的聚会上找到的。
请记住,架构是为另一个请求设置的,而键不是为增量请求设置的。
我的目的是只查询上一批次的更新行,我这样做是这样的:
- 创建索引table,按日期小时分区(分、秒和毫秒被截断)。此 table 由来自主要 table. 的全球索引提供
- 在 java 中,按小时查询索引 (
loop on a calendar
),select 使用IN
查询主要 table。 - 任务完成!