将嵌套 json 插入 cassandra

Swe*_*son 6 python cassandra

我试图将此嵌套对象插入 cassandra 数据库,但无法弄清楚如何为此设计表。我希望该对象的所有数据都存储在 cassandra 中。

下面我粘贴了我试图插入的 json。

有什么建议么?

{
  "status": "success",
  "data": {
    "resultType": "vector",
    "result": [
      {
        "metric": {
          "__name__": "up",
          "env": "demosite",
          "instance": "localhost:9100",
          "job": "node"
        },
        "value": [
          1553849977.349,
          "1"
        ]
      },
      {
        "metric": {
          "__name__": "up",
          "instance": "ub-lab-server:9090",
          "job": "prometheus"
        },
        "value": [
          1553849977.349,
          "1"
        ]
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

Ram*_*ler 5

有多种方法可以做到这一点。

如果您的用例只是将 JSON 存储为字符串,只需将整个 JSON 作为 blob 序列化到单个列中 创建一个表:

CREATE TABLE IF NOT EXISTS my_table(
  ID <text/bigint>
  DATA text,
  CREATEDATE timestamp
)
Run Code Online (Sandbox Code Playgroud)

如果您想将所有嵌套属性表示为单独的列,则必须从下往上开始。即首先为每个嵌套字段创建用户定义类型。参考您的 json ,一个例子是:

CREATE TYPE metric (
      name text,
      env text,
      instance text,
      job text
);

CREATE TYPE value(
      field1 text,
      field2 text
);
Run Code Online (Sandbox Code Playgroud)

创建基本 UDT 后,开始创建复合 UDT,引用基本 UDT:

CREATE TYPE result(
  metric metric,
  value value,
);

CREATE TYPE data(
  resultType text,
  result set<result>,
);    
Run Code Online (Sandbox Code Playgroud)

最后按如下方式引导您的表:

CREATE TABLE IF NOT EXISTS my_table (
  ID <text/bigint>
  status data
)
Run Code Online (Sandbox Code Playgroud)

根据您的查询和存储用例谨慎决定主键/分区键。