所以我有一个表,我想制作一个复合主键:一个分区键和几个聚类列。但是,严格来说这些列并不总是填充,因此某些行可能具有空值。这是允许在卡桑德拉?要使具有空值的聚类列?
答案 0 :(得分:4)
Cassandra不允许空聚类键值。
如果你真的需要"没有价值"出于某种原因,然后使用空字符串或其他一些特殊的字面值,例如' UNDEFINED'将这些聚集在一起。
类似的问题在这里: How can I have null column value for a composite key column in CQL3
答案 1 :(得分:2)
当您只传递 STATIC 字段值时,您可以跳过 INSERT 上的聚类列。这是有道理的,因为静态字段与分区本身相关,而不是与分区行(由集群键标识)相关。
这有助于在分区内实现一对多的父子关系,如下例所示(在 Amazon Keyspaces 和 DSE DB 4 Astra 上测试):
CREATE TABLE countries (
country text,
country_pop int STATIC,
state text,
state_pop int,
PRIMARY KEY (country, state)
);
INSERT INTO countries (country, country_pop) VALUES ('USA', 328000000);
答案 2 :(得分:1)
群集密钥中可能有null
个值,但仅在创建的表WITH COMPACT STORAGE
中有cqlsh:test> CREATE TABLE cf (p int, c1 int, c2 int, v int, primary key (p, c1, c2)) WITH COMPRESSION = {'sstable_compression': ''} AND COMPACT STORAGE;
cqlsh:test> INSERT INTO cf (p, c1, v) VALUES (1, 1, 1);
cqlsh:test> SELECT * FROM cf;
p | c1 | c2 | v
---+----+------+---
1 | 1 | null | 1
(1 rows)
且仅用于尾随列。
例如:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(Build.VERSION.SDK_INT > 11) {
invalidateOptionsMenu();
menu.findItem(R.id.option2).setVisible(false);
menu.findItem(R.id.option4).setVisible(true);
}
return super.onPrepareOptionsMenu(menu);
}
在常规(非紧凑)表中,群集键不能缺少列。
答案 3 :(得分:0)