是否可以使用数据库中的现有表在 AGE 中创建图表?

问题描述 投票:0回答:3

我刚刚开始使用 Apache AGE 扩展。我正在探索图数据库的功能。有没有办法从现有的表/模式创建图形,使表成为标签,属性成为顶点的属性?

create_graph('graph name') 用于创建图形,但我只能使用此函数创建新图形。

postgresql cypher apache-age
3个回答
1
投票

事情没那么简单。首先你必须理解这一点。

从关系模型派生图模型时,请记住一些一般准则。

  1. 一行是一个节点。

  2. 表名是标签名。

  3. 连接或外键是一种关系。

使用这些关系,您可以对数据进行建模。这是如果您需要确保没有错误的话。

这里没有示例,而是从关系模型创建图的动态方法。

首先创建一个接受参数的 PostgreSQL 函数。示例,人员姓名和职务。它将创建一个节点。

CREATE OR REPLACE FUNCTION public.create_person(name text, title text)
RETURNS void
LANGUAGE plpgsql
VOLATILE
AS $BODY$
BEGIN
    load 'age';
    SET search_path TO ag_catalog;
    EXECUTE format('SELECT * FROM cypher(''graph_name'', $$CREATE (:Person {name: %s, title: %s})$$) AS (a agtype);', quote_ident(name), quote_ident(title));
END
$BODY$;

第二次使用像这样的功能,

SELECT public.create_person(sql_person.name, sql_person.title) 
FROM sql_schema.Person AS sql_person;

您将为 SQL_SCHEMA.Person 中的每一行创建一个节点


0
投票

要将数据从 PGSQL 表导出到 AGE 图表,您可以尝试导出 CSV 文件。例如,如果您有以下名为员工的表:

SELECT * from employees;

 id |          name          | manager_id |   title    
----+------------------------+------------+------------
  1 | Gabriel Garcia Marquez |            | Boss
  2 | Dostoevsky             |          1 | Director
  3 | Victor Hugo            |          1 | Manager
  4 | Albert Camus           |          2 | Engineer
  5 | Haruki Murakami        |          3 | Analyst
  6 | Virginia Woolf         |          1 | Consultant
  7 | Liu Cixin              |          2 | Manager
  8 | Franz Kafka            |          4 | Intern
  9 | Daphne Du Maurier      |          7 | Engineer

首先使用以下命令导出 CSV:

\copy (SELECT * FROM employees) to '/home/username/employees.csv' with csv header

现在您可以将其导入 AGE 中。请记住,对于图数据库,表的名称就是顶点标签的名称。表的列是顶点的属性。

首先确保为图表创建标签。在这种情况下,标签名称将为“employees”,与表名称相同。

SELECT create_vlabel('graph_name','employees');

现在我们加载该标签的所有节点(原始表中的每一行都是图中的一个节点)。

SELECT load_labels_from_file('graph_name','employees','/home/username/employees.csv');

现在您的图表应该包含员工表的所有表数据。

更多信息可以在文档中找到: https://age.apache.org/age-manual/master/intro/agload.html


0
投票

我在 stackoverflow 上找到了以下问题,现在构建适当的查询,通过循环表来插入数据。 是否可以使用数据库中的现有表在 AGE 中创建图表?

我发现示例和我的解决方案之间最大的区别是使用“%1$s”、“%2$s”等来替换格式命令。这允许我在 AGE 中使用 int、boolean 或其他受支持的类型。

© www.soinside.com 2019 - 2024. All rights reserved.