gpt4 book ai didi

json - 查询存储在 Cassandra DB 上的 JSON 对象的 Spark

转载 作者:行者123 更新时间:2023-12-02 01:27:57 24 4
gpt4 key购买 nike

我在cassandra DB上构建了结构来存储操作系统数据的时间序列数据,如服务、进程和其他信息。要了解 Cassandra 如何使用 CQL 查询存储 JSON 数据和检索数据,我更愿意简化模型。因为在整个模型数据库中,我将拥有比 report_object 更复杂的TYPE,例如 hashMap 数组的 hashMap:类型 NETSTAT--> Object[n] --> {host:192.168.0.23, protocol: TCP ,LocalAddress : 0.0.0.0}因此 NETSTAT 类型将有一个 hashMap 列表,其中包含字段键 -> 值。为简化起见,我选择显示以下架构:

CREATE TYPE report_object (RTIME varchar, RMINORVER int, RUSER varchar, RLANG varchar, RSCRIPT varchar, RMAJORVER int, RHOST varchar, RPATH varchar);
CREATE TABLE test (
REPORTUUID uuid PRIMARY KEY,
report frozen<report_object>);

在表中,我在 java 类中使用以下查询注入(inject)了 JSON 数据:

INSERT INTO test JSON '{"REPORTUUID": "9fb21fb9-333e-4017-ab77-0fa6ee1e20e3" ,"REPORT":{"RTIME":"6/MAR/2016 6:0:0 PM","RMINORVER":0,"RUSER":"Administrator","RLANG":"vbs","RSCRIPT":"Main","RMAJORVER":5,"RHOST":"WIN-SAPV9MUEMNS","RPATH":"C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\IXP000.TMP"}}';

我使用上面的查询检查了其他数据。澄清我的概念的问题是:- 我想使用在定义的 TYPE 内部检查的条件进行查询,是否可以使用 CQL 或是否有必要使用 spark SQL?

  • 设计数据库模型是否符合目的(因为我已经从 RDBMS 转到 DB NoSQL)?

最佳答案

要能够使用 Cassandra 查询用户定义类型,您必须先创建一个索引:

CREATE INDEX on test.test(report);

但它只允许基于完整文档的谓词:

SELECT * FROM test
WHERE report=fromJson('{"RTIME":"6/MAR/2016 6:0:0 PM","RMINORVER":0,"RUSER":"Administrator","RLANG":"vbs","RSCRIPT":"Main","RMAJORVER":5,"RHOST":"WIN-SAPV9MUEMNS","RPATH":"C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\IXP000.TMP"}');

您将在 how to filter cassandra query by a field in user defined type 中找到更多详细信息和解释。

当使用 Spark 公开时,可以使用 CassandraTableScanRDD 上的过滤器过滤这些值:

val rdd = sc.cassandraTable("test", "test")
rdd.filter(row =>
row.getUDTValue("report").getString("rscript") == "Main")

where/filterDataFrame 上:

df.where($"report.rscript" === "Main")

虽然像这样使用 Spark 进行查询,但在过滤数据之前必须获取整个表。虽然不清楚您到底要实现什么目标,但一般来说这不太可能成为有用的结构。

关于json - 查询存储在 Cassandra DB 上的 JSON 对象的 Spark ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35971955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com