我正在尝试创建一个包含2列的表,其中一列是唯一的哈希,另一列是创建行的时间戳。
CREATE TABLE IF NOT EXISTS keyspace.table (
account varchar,
hash varchar,
lt bigint,
created timestamp,
PRIMARY KEY (hash, created)
) WITH CLUSTERING ORDER BY (created DESC);
我希望该表按created
字段排序,但仅在hash
字段上唯一。我相信,唯一性目前被检查为两个字段的并集;并且只有当新行对于两个字段具有相同的值时,才将其视为重复。
你想要的是不可能的。
为了给您一点背景信息,每个hash
(分区键(都唯一地标识表中的每个分区。由于您的模式有一个复合主键(分区键+集群键(,因此表中的每个分区都有一行或多行created
(。因此,整个主键标识分区中的每个唯一行。
仅仅分区键hash
是一行的唯一标识符是不可能的。如果这是你想要的,你需要用对你的数据进行不同的建模
CREATE TABLE accounts_by_hash (
...
PRIMARY KEY (hash)
)
最终,您需要回到Cassandra中数据建模的主要原则,即需要基于应用程序查询设计表。干杯