Cassandra table 1个主键,1个聚类列,1个常规列,不追加数据。它覆盖它
Cassandra table with one primary key, one clustering column, and one regular column does not append data. It overwrites it
我想我一定遗漏了一些基本的东西。
我的table定义是:
CREATE TABLE IF NOT EXISTS bundle_components (
bundle_id uuid,
component_type text,
component_id uuid,
PRIMARY KEY (bundle_id, component_type)
);
CREATE INDEX ON bundle_components(component_type);
CREATE INDEX ON bundle_components(component_id);
但是,我似乎只得到一个 单个 component_id
每个独特的 bundle_id
和 component_type
组合。我的印象是 table 会有宽行,所以如果它们具有相同的 bundle_id
和 component_type
组合,我会有多个 component_ids
。
这是实际问题。 component_id
具有不同值的两个 INSERT
语句导致单个条目(先前的条目被覆盖):
cqlsh:voltron> INSERT INTO bundle_components(bundle_id, component_type, component_id) VALUES(8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf, 'script', 6558981e-1d89-43c3-a1fc-b2cf45119bcc);
cqlsh:voltron> select * from bundle_components ;
bundle_id | component_type | component_id
--------------------------------------+----------------+--------------------------------------
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | channel | a02069df-be81-4960-b64e-9ed8ee09550f
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | script | 6558981e-1d89-43c3-a1fc-b2cf45119bcc
(2 rows)
cqlsh:voltron> INSERT INTO bundle_components(bundle_id, component_type, component_id) VALUES(8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf, 'script', 7fcf4402-c8b3-41ed-a524-b1b546511635);
cqlsh:voltron> select * from bundle_components ;
bundle_id | component_type | component_id
--------------------------------------+----------------+--------------------------------------
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | channel | a02069df-be81-4960-b64e-9ed8ee09550f
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | script | 7fcf4402-c8b3-41ed-a524-b1b546511635
谁能告诉我我做错了什么?
您的主键是 (bundle_id, component_type)
,因此您只能有 1 个 (bundle_id, component_type)
的唯一组合。
您可能想要做的是将 component_id 添加到您的主键 ((bundle_id, component_type, component_id)
),这将使您拥有多个具有相同 bundle_id 和 [=24= 的组件].通过该更改,我得到以下输出:
cqlsh:test> select * from bundle_components ;
bundle_id | component_id | component_type
--------------------------------------+--------------------------------------+----------------
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | 6558981e-1d89-43c3-a1fc-b2cf45119bcc | script
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | 7fcf4402-c8b3-41ed-a524-b1b546511635 | script
根据您希望查询数据的方式,您可以更改 component_id 和 component_type 的顺序,但我猜您想查询数据通过 bundle_id, component_type
而不是 bundle_id, component_id
我想我一定遗漏了一些基本的东西。
我的table定义是:
CREATE TABLE IF NOT EXISTS bundle_components (
bundle_id uuid,
component_type text,
component_id uuid,
PRIMARY KEY (bundle_id, component_type)
);
CREATE INDEX ON bundle_components(component_type);
CREATE INDEX ON bundle_components(component_id);
但是,我似乎只得到一个 单个 component_id
每个独特的 bundle_id
和 component_type
组合。我的印象是 table 会有宽行,所以如果它们具有相同的 bundle_id
和 component_type
组合,我会有多个 component_ids
。
这是实际问题。 component_id
具有不同值的两个 INSERT
语句导致单个条目(先前的条目被覆盖):
cqlsh:voltron> INSERT INTO bundle_components(bundle_id, component_type, component_id) VALUES(8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf, 'script', 6558981e-1d89-43c3-a1fc-b2cf45119bcc);
cqlsh:voltron> select * from bundle_components ;
bundle_id | component_type | component_id
--------------------------------------+----------------+--------------------------------------
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | channel | a02069df-be81-4960-b64e-9ed8ee09550f
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | script | 6558981e-1d89-43c3-a1fc-b2cf45119bcc
(2 rows)
cqlsh:voltron> INSERT INTO bundle_components(bundle_id, component_type, component_id) VALUES(8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf, 'script', 7fcf4402-c8b3-41ed-a524-b1b546511635);
cqlsh:voltron> select * from bundle_components ;
bundle_id | component_type | component_id
--------------------------------------+----------------+--------------------------------------
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | channel | a02069df-be81-4960-b64e-9ed8ee09550f
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | script | 7fcf4402-c8b3-41ed-a524-b1b546511635
谁能告诉我我做错了什么?
您的主键是 (bundle_id, component_type)
,因此您只能有 1 个 (bundle_id, component_type)
的唯一组合。
您可能想要做的是将 component_id 添加到您的主键 ((bundle_id, component_type, component_id)
),这将使您拥有多个具有相同 bundle_id 和 [=24= 的组件].通过该更改,我得到以下输出:
cqlsh:test> select * from bundle_components ;
bundle_id | component_id | component_type
--------------------------------------+--------------------------------------+----------------
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | 6558981e-1d89-43c3-a1fc-b2cf45119bcc | script
8d8e8b6e-19dc-4af6-9bb7-500cd8e2dbaf | 7fcf4402-c8b3-41ed-a524-b1b546511635 | script
根据您希望查询数据的方式,您可以更改 component_id 和 component_type 的顺序,但我猜您想查询数据通过 bundle_id, component_type
而不是 bundle_id, component_id