我正在使用agensgraph,但我不知道如何编写混合查询,agensgraph 中的任何混合查询示例都会有很大帮助。
3 回答
我在这些幻灯片中找到了有关混合查询语言的更多信息。我能找到的所有其他信息都与 Eya 在不同地方发布的相同示例。
我同意有关 AgnsGraph 中混合查询的更多信息会很棒,因为它似乎是软件的杀手级功能。
在 AgensGraph 中,您可以通过两种方式编写混合查询:
假设您正在创建以下内容:
CREATE GRAPH AG;
CREATE VLABEL dev;
CREATE (:dev {name: 'someone', year: 2015});
CREATE (:dev {name: 'somebody', year: 2016});
CREATE TABLE history (year, event)
AS VALUES (1996, 'PostgreSQL'), (2016, 'AgensGraph');
1- SQL 中的密码
Syntax:
SELECT [column_name]
FROM ({table_name|SQL-query|CYPHERquery})
WHERE [column_name operator value];
Example:
SELECT n->>'name' as name
FROM history, (MATCH (n:dev) RETURN n) as dev
WHERE history.year > (n->>'year')::int;
结果: 姓名----某人(1行)
2- 密码中的 SQL
Syntax:
MATCH [table_name]
WHERE (column_name operator {value|SQLquery|CYPHERquery})
RETURN [column_name];
Example:
MATCH (n:dev)
WHERE n.year < (SELECT year FROM history WHERE event =
'AgensGraph')
RETURN properties(n) AS n;
结果: n ---- {"name": "someone", "year": 2015}(1 行)
假设我们有一个网络管理系统,并且我们将网络拓扑保存在 AgensGraph(图形格式)的图形部分中,并将我们的时间序列数据(例如有关特定设备的日期和时间信息)保存在 AgensGraph 的关系部分(表格式)。因此,在这种情况下,我们知道我们有一个图、表,如果需要,我们可以编写一个混合查询来从两个模型中获取数据。
在我们的图表中,我们有不同的设备相互连接,例如调制解调器、物联网传感器等。对于这些设备中的每一个,我们还分别存储在表格中的一些信息 - 与这些设备相关,例如下载速度、上传速度或 CPU 使用率。
在以下混合查询中,我们的目标是通过同时从图和表中查询来收集有关特定设备的信息。
SQL 中的密码
在这个混合查询中,我们正在寻找有问题的调制解调器设备,它们的异常类型为 2(2 表示该设备在下载和上传速度方面存在一些问题),在我们找到这些设备后,我们的目标是返回他们的 ID、下载和上传速度以调查问题。正如您在以下查询中看到的,我们的内部查询是 Cypher,我们的外部查询是 SQL。
SELECT id,sysdnbps, sysupbps
from public.modemrdb where to_jsonb(id) in
(SELECT id FROM (MATCH(m:modem) where
m.abnormaltype=2
return m.name)
AS s(id));
密码中的 SQL
在这个混合查询中,我们希望找到 CPU 使用率超过 80(不在阈值范围内)的调制解调器设备,这表明这些设备存在问题,在我们找到这些设备后,我们的目标是返回该调制解调器以及连接到它们的任何物联网设备。正如您在以下示例中看到的,我们的内部查询是 SQL,我们的外部查询是 Cypher。
MATCH p=(n:modem)-[r*1..2]->(iot)
WHERE n.name in
(SELECT to_jsonb(id)
FROM public.modemrdb
WHERE syscpuusage >= 80)
RETURN p;
这可以是混合查询的另一个示例。