0

我有这样的复合键列族

CREATE TABLE sometable(
    keya varchar,
    keyb varchar,
    keyc varchar,
    keyd varchar,
    value int,
    date timestamp,
    PRIMARY KEY (keya,keyb,keyc,keyd,date)
);

我需要做的是

SELECT * FROM sometable
WHERE
    keya = 'abc' AND
    keyb = 'def' AND
    date < '2014-01-01'

这给了我这个错误

Bad Request: PRIMARY KEY part date cannot be restricted (preceding part keyd is either not restricted or by a non-EQ relation)

解决这个问题的最佳方法是什么?我需要更改我的列族吗?我还需要使用所有 keya、keyb、keyc和 date 查询这些表。

4

1 回答 1

0

你不能在 cassandra 中做到这一点。此外,这种范围切片的成本也更高。您正在尝试根据您的架构分割一组具有较低优先级的等式。

我还需要使用所有 keya、keyb、keyc 和 date 查询这些表。

如果您正在考虑解决此问题,请考虑使用此架构。我建议将密钥放在单独的模式中

创建表(timeuuid id、keyType 文本、主键(timeuuid、keyType))

使用 timeuuid 存储值并基于该值进行范围扫描。

创建表(timeuuid prevTableId,值 int,日期时间戳,主键(prevTableId,日期))

猜猜,通过这种方式,您的表被规范化,以便在您的用例中获得更好的可伸缩性,并且如果键也是重复的,则可以节省大量磁盘空间。

于 2014-04-15T11:22:10.010 回答