系统日期的 Cassandra DB 查询
Cassandra DB Query for System Date
我在 Cassandra 数据库中有一个 table customer_info
,它包含一列 billing_due_date
,这是日期字段(dd-MMM-yy
例如 17-AUG- 21).我需要根据 billing_due_date
从 customer_info
table 中获取某些字段,其中 billing_due_date
应该等于系统日期 +1。
有人可以为此建议 Cassandra DB 查询吗?
fetch the certain fields from customer_info
table based on billing_due_date
transaction_id
is primarykey , It is just generated through uuid()
不幸的是,确实没有好的方法可以做到这一点。现在,customer_info
table 中的数据基于 transaction_id
的散列分布在集群中的所有节点上。本质上,任何基于 transaction_id
以外的查询都会从多个节点读取,这是 Cassandra 中的查询反模式。
在 Cassandra 中,您需要根据需要支持的查询来设计 table。例如,选择 transaction_id
作为唯一的主键可能分布良好,但在查询灵活性方面并没有提供太多。
因此,解决此查询的最佳方法是创建一个查询 table,其中包含来自 customer_info
的数据,其键定义为 PRIMARY KEY (billing_date,transaction_id)
。然后,这样的查询应该有效:
> SELECT * FROM customer_info_by_date
WHERE billing_due_date = toDate(now()) + 2d;
billing_due_date | transaction_id | name
------------------+--------------------------------------+---------
2021-08-20 | 2fe82360-e314-4d5b-aa33-5deee9f03811 | Rinzler
2021-08-20 | 92cb9ee5-dee6-47fe-b372-0829f2e384cd | Clu
(2 rows)
请注意,对于此示例,我使用的是系统日期加 2 天。因此,在您的情况下,您需要将“持续时间”方面从 2d
调整为 1d
。 Cassandra 4.0 允许日期运算,因此如果您使用该版本,这应该可以正常工作。如果不是,则必须在应用程序端进行“系统日期加一”计算。
解决此问题的另一种方法是在 billing_due_date
上创建二级索引,但我不推荐该路径,因为它将查询多个节点以构建结果集。
我在 Cassandra 数据库中有一个 table customer_info
,它包含一列 billing_due_date
,这是日期字段(dd-MMM-yy
例如 17-AUG- 21).我需要根据 billing_due_date
从 customer_info
table 中获取某些字段,其中 billing_due_date
应该等于系统日期 +1。
有人可以为此建议 Cassandra DB 查询吗?
fetch the certain fields from
customer_info
table based onbilling_due_date
transaction_id
is primarykey , It is just generated through uuid()
不幸的是,确实没有好的方法可以做到这一点。现在,customer_info
table 中的数据基于 transaction_id
的散列分布在集群中的所有节点上。本质上,任何基于 transaction_id
以外的查询都会从多个节点读取,这是 Cassandra 中的查询反模式。
在 Cassandra 中,您需要根据需要支持的查询来设计 table。例如,选择 transaction_id
作为唯一的主键可能分布良好,但在查询灵活性方面并没有提供太多。
因此,解决此查询的最佳方法是创建一个查询 table,其中包含来自 customer_info
的数据,其键定义为 PRIMARY KEY (billing_date,transaction_id)
。然后,这样的查询应该有效:
> SELECT * FROM customer_info_by_date
WHERE billing_due_date = toDate(now()) + 2d;
billing_due_date | transaction_id | name
------------------+--------------------------------------+---------
2021-08-20 | 2fe82360-e314-4d5b-aa33-5deee9f03811 | Rinzler
2021-08-20 | 92cb9ee5-dee6-47fe-b372-0829f2e384cd | Clu
(2 rows)
请注意,对于此示例,我使用的是系统日期加 2 天。因此,在您的情况下,您需要将“持续时间”方面从 2d
调整为 1d
。 Cassandra 4.0 允许日期运算,因此如果您使用该版本,这应该可以正常工作。如果不是,则必须在应用程序端进行“系统日期加一”计算。
解决此问题的另一种方法是在 billing_due_date
上创建二级索引,但我不推荐该路径,因为它将查询多个节点以构建结果集。