【发布时间】:2015-12-25 09:40:53
【问题描述】:
我目前在 cassandra 中有一个名为 macrecord 的表,它看起来像这样:
macadd | position | record | timestamp
-------------------+----------+--------+---------------------
23:FD:52:34:DS:32 | 1 | 1 | 2015-09-28 15:28:59
但是我现在需要进行查询,这些查询将使用时间戳列来查询范围。如果没有时间戳作为主键的一部分(在这种情况下为 macadd),我认为不可能这样做,即没有它是集群键。
如果我将时间戳作为主键的一部分,表格如下所示:
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 是主键的范围内查询时间戳值的替代方法。
【问题讨论】:
-
虽然您还没有发布表定义,但我可以告诉您,您所做的并不像在关系世界中那样简单。如果您需要
UPDATE您的时间戳,那么它不能成为您的主键的一部分。 -
@Aaron :如果我不将时间戳添加到主键,那么我将无法使用时间戳执行范围查询。这是我遇到的两个相反的限制。我正在创建一个表,如下所示: CREATE TABLE IF NOT EXISTS HAS.MACRecord (MACAdd VARCHAR PRIMARY KEY,Timestamp timestamp, Record int, position int);是否可以在不作为主键一部分的时间戳上执行范围查询?
标签: cassandra