Cassandra - 将用户定义类型中的特定字段声明为主键
Cassandra - Declare specific field from user-defined type as primary key
我想将用户定义类型中的特定字段声明为主键。
假设我有这个:
CREATE TYPE entity (
entity_id TEXT,
entity_type TEXT
);
CREATE TABLE some_object_by_entity_id (
someId TEXT,
mytext TEXT,
entity FROZEN<entity>,
PRIMARY KEY ((entity.entity_id), transaction_id)
) WITH CLUSTERING ORDER BY (transaction_id ASC);
...
现在我想以某种方式使来自实体(这是一个用户定义的类型)的 entity_id 成为我的主键,但是 Cassandra 给我语法错误。
我可以使用任何其他语法来做到这一点吗?
你不能这样做,尝试将 entity_id 复制为 table 的简单列:
CREATE TABLE some_object_by_entity_id (
entity_id TEXT,
someId TEXT,
mytext TEXT,
entity FROZEN<entity>,
PRIMARY KEY ((entity_id), transaction_id)
) WITH CLUSTERING ORDER BY (transaction_id ASC);
此解决方案的缺点是您需要通过应用程序代码手动使 table entity_id 和冻结实体内的 entity_id 值保持同步。
我想将用户定义类型中的特定字段声明为主键。 假设我有这个:
CREATE TYPE entity (
entity_id TEXT,
entity_type TEXT
);
CREATE TABLE some_object_by_entity_id (
someId TEXT,
mytext TEXT,
entity FROZEN<entity>,
PRIMARY KEY ((entity.entity_id), transaction_id)
) WITH CLUSTERING ORDER BY (transaction_id ASC);
...
现在我想以某种方式使来自实体(这是一个用户定义的类型)的 entity_id 成为我的主键,但是 Cassandra 给我语法错误。 我可以使用任何其他语法来做到这一点吗?
你不能这样做,尝试将 entity_id 复制为 table 的简单列:
CREATE TABLE some_object_by_entity_id (
entity_id TEXT,
someId TEXT,
mytext TEXT,
entity FROZEN<entity>,
PRIMARY KEY ((entity_id), transaction_id)
) WITH CLUSTERING ORDER BY (transaction_id ASC);
此解决方案的缺点是您需要通过应用程序代码手动使 table entity_id 和冻结实体内的 entity_id 值保持同步。