我可以在主键的群集列中使用空值吗?

时间:2017-06-16 00:01:02

标签: cassandra

所以我有一个表,我想制作一个复合主键:一个分区键和几个聚类列。但是,严格来说这些列并不总是填充,因此某些行可能具有空值。这是允许在卡桑德拉?要使具有空值的聚类列?

4 个答案:

答案 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)

enter image description here

这个例子也适用于我。我用 katakoda 来运行它。 这是查询的一部分。