我目前在cassandra中有一个名为macrecord的表,它看起来像这样:
macadd | position | record | timestamp
-------------------+----------+--------+---------------------
23:FD:52:34:DS:32 | 1 | 1 | 2015-09-28 15:28:59但是,我现在需要进行查询,该查询将使用时间戳列来查询范围。我认为如果没有时间戳作为主键(在本例中是macadd) i-e的一部分而不是聚集键,就不可能做到这一点。
如果将时间戳作为主键的一部分,则表如下所示:
macadd | timestamp | position | record
-------------------+---------------------+----------+--------
23:FD:52:34:DS:32 | 2015-09-28 15:33:26 | 1 | 1但是,现在每当我得到一个重复的macadd时,我就不能更新时间戳列。
update macrecord set timestamp = dateof(now()) where macadd = '23:FD:52:34:DS:32'; 给出一个错误:
message="PRIMARY KEY part timestamp found in SET part"在这种情况下,我想不出其他的解决方案,除了删除整个行,如果有一个重复的macadd值,然后插入一个带有更新的时间戳的新行。
有没有更好的解决方案来更新时间戳,只要有一个重复的macadd值,或者在我的原始表中只有macadd是主键的范围内查询时间戳值的替代方法。
发布于 2015-09-29 01:11:54
要在CQL中执行范围查询,您需要将时间戳作为聚类键。但是正如您所看到的,如果不删除和插入新的键,就不能更新键字段。
Cassandra 3.0将在10月份发布时提供的一个选项是物化视图。这将允许您将时间戳作为基表中的值列和视图中的聚类列。请参阅示例here。
https://stackoverflow.com/questions/32818048
复制相似问题