我试图将此嵌套对象插入 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)
有多种方法可以做到这一点。
如果您的用例只是将 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)
根据您的查询和存储用例谨慎决定主键/分区键。