You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:29:55