AgensGraph中的混合查询示例

时间:2019-05-16 16:58:24

标签: sql postgresql cypher agens-graph

我正在使用agensgraph,但我不知道如何编写混合查询,agensgraph中的任何混合查询示例都会有很大帮助。

3 个答案:

答案 0 :(得分:0)

在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- Cypher中的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 ----  {“名称”:“某人”,“年份”:2015} (1行)

You can find more information here

答案 1 :(得分:0)

我在these slides中找到了有关混合查询语言的更多信息。我所能找到的所有其他信息,都是Eya在不同地方发布的相同示例。

我同意,有关AgensGraph中混合查询的更多信息将是很棒的,因为这似乎是软件的杀手feature。

答案 2 :(得分:0)

让我们假设我们有一个网络管理系统,并且将网络拓扑保留在AgensGraph(图形格式)的图形部分中,并将时间序列数据(例如有关特定设备的日期和时间信息)保留在AgensGraph的关系部分中。 AgensGraph(表格格式)。因此,在这种情况下,我们知道我们有一个图形,表格,并且如果需要,我们可以编写一个混合查询来从两个模型中获取数据。

在我们的图中,我们有彼此连接的不同设备,例如调制解调器,IoT传感器等。对于这些设备中的每一个,我们还分别存储在表中的一些信息-与这些设备相关,例如下载速度,上传速度或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)); 

Cypher中的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;

这可以是混合查询的另一个示例。