最新的cassandra是否仍然支持各行具有不同的列?

qnyhuwrf  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(337)

我刚到Cassandra,我在看官方文件。我发现cassandra中的表概念与rdbms非常相似。
这个https://cassandra.apache.org/doc/latest/cql/index.html 将教我如何创建表,插入表等。
但下面是https://www.tutorialspoint.com/cassandra/cassandra_data_model.htm.
它说,与列族的模式不固定的关系表不同,cassandra不强制单个行拥有所有列。下图显示了cassandra柱族的示例。

我的问题是我在当前的cassandra中找不到这个设计,下面是我运行一些简单insert命令的截图。

因为我只在emp(emp\u id,emp\u city)值(5,'')中插入两列insert,所以其余的将被设置为null,这与一般的rdbms非常相似。
那么,你能告诉我如何在第一张图片中表示“不同的行有不同的列”吗?非常感谢。

bnlyeluc

bnlyeluc1#

Cassandra没有插入 null 当您省略特定列的数据时。这个 null 当您读取数据并且数据丢失时返回。最好使用 sstabledump . 例如,对于我的数据:

cqlsh:test> select * from test.st1;

 id | c1   | s1 | v1
----+------+----+------
 10 | null | 10 | null
  1 |    1 |  2 |    1
  1 |    2 |  2 |    1
  2 |   10 |  3 | null

(4 rows)

对于最后一行,我可以看到我没有实际的数据,因为 cells 为空:

{
    "partition" : {
      "key" : [ "2" ],
      "position" : 97
    },
    "rows" : [
      {
        "type" : "static_block",
        "position" : 144,
        "cells" : [
          { "name" : "s1", "value" : 3, "tstamp" : "2019-04-12T14:33:47.198445Z" }
        ]
      },
      {
        "type" : "row",
        "position" : 144,
        "clustering" : [ 10 ],
        "liveness_info" : { "tstamp" : "2019-04-29T12:49:31.450239Z" },
        "cells" : [ ]
      }
    ]
  }

但如果我插入 null 明确地:

cqlsh:test> insert into test.st1(id, s1, c1, v1) values (3, 10, 3, null);

然后我将在数据文件中看到它作为 cells :

{
    "partition" : {
      "key" : [ "3" ],
      "position" : 0
    },
    "rows" : [
      {
        "type" : "static_block",
        "position" : 39,
        "cells" : [
          { "name" : "s1", "value" : 10, "tstamp" : "2020-07-09T09:19:39.751467Z" }
        ]
      },
      {
        "type" : "row",
        "position" : 39,
        "clustering" : [ 3 ],
        "liveness_info" : { "tstamp" : "2020-07-09T09:19:39.751467Z" },
        "cells" : [
          { "name" : "v1", "deletion_info" : { "local_delete_time" : "2020-07-09T09:19:39Z" }
          }
        ]
      }
    ]
  }

相关问题