如何将指定JSON数据加载到Apache AGE Viewer?
将JSON数据加载到Apache AGE的操作方法
以下是把你提供的JSON图数据加载到Apache AGE的两种常用方法,分别适配小数据量手动插入和大数据量批量处理场景:
前提准备
确保你已完成以下基础配置:
- 安装并配置好Apache AGE扩展
- 创建PostgreSQL数据库并启用AGE扩展
- 创建目标图(示例使用
social_graph)
若未完成基础配置,执行以下语句:
CREATE EXTENSION IF NOT EXISTS age; LOAD 'age'; SET search_path = ag_catalog, "$user", public; -- 创建目标图 CREATE GRAPH social_graph;
方法一:手动逐条插入(适合小数据量)
直接通过Cypher语句分别插入顶点和边:
1. 插入顶点
针对JSON中的两个Person顶点,执行以下语句:
-- 插入John的顶点 SELECT * FROM cypher('social_graph', $$ CREATE (:Person {name: 'John', age: 25}) $$) AS (v agtype); -- 插入Alice的顶点 SELECT * FROM cypher('social_graph', $$ CREATE (:Person {name: 'Alice', age: 30}) $$) AS (v agtype);
2. 插入边
先匹配两个顶点,再创建FRIENDS_WITH边:
SELECT * FROM cypher('social_graph', $$ MATCH (a:Person {name: 'John'}), (b:Person {name: 'Alice'}) CREATE (a)-[:FRIENDS_WITH {since: '2022-01-01'}]->(b) $$) AS (e agtype);
方法二:批量加载(适合大数据量)
通过PL/pgSQL函数读取JSON数据,自动批量插入顶点和边:
1. 创建批量加载函数
CREATE OR REPLACE FUNCTION load_graph_from_json(json_data json) RETURNS void AS $$ DECLARE vertex_record json; edge_record json; source_id integer; target_id integer; BEGIN -- 批量插入顶点 FOR vertex_record IN SELECT json_array_elements(json_data->'vertices') LOOP EXECUTE format(' SELECT * FROM cypher(''social_graph'', $$ CREATE (:%s %L) $$) AS (v agtype); ', (vertex_record->>'label'), (vertex_record->>'properties')::text); END LOOP; -- 批量插入边 FOR edge_record IN SELECT json_array_elements(json_data->'edges') LOOP source_id := (edge_record->>'source')::integer; target_id := (edge_record->>'target')::integer; EXECUTE format(' SELECT * FROM cypher(''social_graph'', $$ MATCH (a), (b) WHERE id(a) = $1 AND id(b) = $2 CREATE (a)-[:%s %L]->(b) $$) AS (e agtype); ', (edge_record->>'label'), (edge_record->>'properties')::text) USING source_id, target_id; END LOOP; END; $$ LANGUAGE plpgsql;
2. 调用函数加载数据
将JSON内容保存为文件(例如graph_data.json),确保PostgreSQL进程有权访问该文件,然后执行:
-- 从文件读取JSON并加载 SELECT load_graph_from_json(pg_read_file('/path/to/graph_data.json')::json);
若无法直接读取文件,可通过psql的\copy命令将JSON内容导入临时表后再传入函数。
验证加载结果
执行以下Cypher语句确认数据是否成功加载:
查询所有顶点
SELECT * FROM cypher('social_graph', $$ MATCH (v:Person) RETURN v $$) AS (v agtype);
查询所有边
SELECT * FROM cypher('social_graph', $$ MATCH (a)-[e:FRIENDS_WITH]->(b) RETURN a, e, b $$) AS (a agtype, e agtype, b agtype);
内容的提问来源于stack exchange,提问作者Hammad Saleem
相关产品推荐
相关产品推荐

