如何在Cassandra DB表中选择第N行

时间:2017-08-28 08:13:48

标签: cassandra cassandra-2.0 cassandra-2.1 cassandra-3.0 spring-data-cassandra

我需要根据我从逻辑中获得的特定数字从cassandra表中选择'N'行。即:如果逻辑输出为23表示,我需要获得第23行详细信息。由于cassandra没有自动增量,我无法使用ID键匹配。在SQL中,他们使用OFFSET和LIMIT获取它。我不知道如何在卡桑德拉实现这一目标。 我们可以通过使用任何UDF概念来实现这一点吗?有人回复我的解决方案。谢谢。

表架构:

CREATE TABLE new_card ( 
    customer_id bigint, 
    card_number text, 
    active tinyint, 
    auto_pay int, 
    available_credit_limit double, 
    average_card_spend_half_yearly double, 
    average_card_spend_monthly double, 
    average_card_spend_quarterly double, 
    average_card_spend_yearly double, 
    avg_half_yearly_spend_mcc double,
    PRIMARY KEY (customer_id, card_number) 
);

2 个答案:

答案 0 :(得分:1)

如果您使用的是Java驱动程序,请参阅Paging

注意,Cassandra不支持直接偏移,页面按顺序读取。如果必须在查询中使用偏移量,则可能需要重新访问数据模型。您可以创建一个复合分区键,包括行号作为现有分区键列之上的附加列。

答案 1 :(得分:1)

您无法从表中选择N行,因为Cassandra表是由分区组成的,您可以在分区内订购行,但不能在分区中订购。使用分页将会抛出所有表,但是没有使用suck方法选择的行的时间顺序(忽略分区可以在你执行go-throw-pages的东西时改变的事实)。

如果要从Cassandra中选择行号N,则需要在应用程序级别实现自动增量字段并将其用作密钥。

使用轻量级交易可以通过Cassandra实现这一目标,但是从性能敏感性来看,它的成本很高。在这里查看几个解决方案:

How to create auto increment IDs in Cassandra