我刚刚开始使用 Apache AGE 扩展。我正在探索图数据库的功能。有没有办法从现有的表/模式创建图形,使表成为标签,属性成为顶点的属性?
create_graph('graph name') 用于创建图形,但我只能使用此函数创建新图形。
事情没那么简单。首先你必须理解这一点。
从关系模型派生图模型时,请记住一些一般准则。
一行是一个节点。
表名是标签名。
连接或外键是一种关系。
使用这些关系,您可以对数据进行建模。这是如果您需要确保没有错误的话。
这里没有示例,而是从关系模型创建图的动态方法。
首先创建一个接受参数的 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 中的每一行创建一个节点
要将数据从 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
我在 stackoverflow 上找到了以下问题,现在构建适当的查询,通过循环表来插入数据。 是否可以使用数据库中的现有表在 AGE 中创建图表?
我发现示例和我的解决方案之间最大的区别是使用“%1$s”、“%2$s”等来替换格式命令。这允许我在 AGE 中使用 int、boolean 或其他受支持的类型。