从文件导入图数据

您可以使用以下说明从文件创建图。本文档说明:

  • 包含从文件加载图的函数的相关信息
  • 启用从文件创建图的函数说明
  • 加载函数作为输入的 CSV 文件结构
  • 从文件加载国家和城市的简单源代码示例

用户可以分两步加载图:

  • 第一步加载顶点
  • 第二步加载边

用户必须在从文件加载数据之前创建图和标签

加载图函数

以下是从文件创建顶点和边的函数详细信息。

函数 load_labels_from_file 用于从 CSV 文件加载顶点。

load_labels_from_file('<graph name>',
                      '<label name>',
                      '<file path>')

通过添加第四个参数,用户可以排除 id 字段。当文件中没有 id 字段时使用此选项

load_labels_from_file('<graph name>',
                      '<label name>',
                      '<file path>',
                      false)

函数 load_edges_from_file 可用于从 CSV 文件加载边。请参阅以下文件结构。

注意:确保边文件中的 id 与顶点文件中的 id 一致。

load_edges_from_file('<graph name>',
                    '<label name>',
                    '<file path>');

CSV 格式说明

以下是顶点和边的 CSV 文件结构说明。

  • 节点的 CSV 文件应按以下格式:
字段名称 字段描述
id 应为文件的第一列,所有值应为正整数。当 id_field_existsfalse 时,这是一个可选字段。但当 id_field_exists 设置为 false 时,它应该存在。
Properties 所有其他列包含节点的属性。标题行应包含属性名称。
  • 类似地,边的 CSV 文件应按以下格式:
字段名称 字段描述
start_id 边起始节点的节点 id。此 id 应存在于 nodes.csv 文件中。
start_vertex_type 节点的类别
end_id 边终止节点的结束 id
end_vertex_type 节点的类别
properties 边的属性。标题应包含属性名称。

示例文件可在 regress/age_load/data 中查看。

SQL 脚本示例

  • 加载并创建图
LOAD 'age';

SET search_path TO ag_catalog;
SELECT create_graph('agload_test_graph');
  • 创建标签 Country 并从 csv 文件加载顶点。注意此 CSV 文件有 id 字段

SELECT create_vlabel('agload_test_graph','Country');
SELECT load_labels_from_file('agload_test_graph',
                             'Country',
                             'age/regress/age_load/data/countries.csv');
  • 创建标签 City 并从 csv 文件加载顶点。注意此 CSV 文件有 id 字段
SELECT create_vlabel('agload_test_graph','City');
SELECT load_labels_from_file('agload_test_graph',
                             'City',
                             'age/regress/age_load/data/cities.csv');
  • 创建标签 has_city 并从 csv 文件加载边。
SELECT create_elabel('agload_test_graph','has_city');
SELECT load_edges_from_file('agload_test_graph', 'has_city',
     'age/regress/age_load/data/edges.csv');
  • 检查图是否已正确加载
SELECT table_catalog, table_schema, table_name, table_type
FROM information_schema.tables
WHERE table_schema = 'agload_test_graph';

SELECT COUNT(*) FROM agload_test_graph."Country";
SELECT COUNT(*) FROM agload_test_graph."City";
SELECT COUNT(*) FROM agload_test_graph."has_city";

SELECT COUNT(*) FROM cypher('agload_test_graph', $$MATCH(n) RETURN n$$) as (n agtype);
SELECT COUNT(*) FROM cypher('agload_test_graph', $$MATCH (a)-[e]->(b) RETURN e$$) as (n agtype);

创建文件中没有 id 字段的顶点

  • 创建标签 Country2 并从 csv 文件加载顶点。注意此 CSV 文件没有 id 字段
SELECT create_vlabel('agload_test_graph','Country2');
SELECT load_labels_from_file('agload_test_graph',
                             'Country2',
                             'age/regress/age_load/data/countries.csv',
                             false);
  • 创建标签 City2 并从 csv 文件加载顶点。注意此 CSV 文件没有 id 字段
SELECT create_vlabel('agload_test_graph','City2');
SELECT load_labels_from_file('agload_test_graph',
                             'City2',
                             'age/regress/age_load/data/cities.csv',
                             false);
  • 检查图是否已正确加载,并对自动创建的 id 和从文件中获取的 id 进行差异分析。
  • 标签 CountryCity 使用文件中的 id 字段创建
  • 标签 Country2City2 在文件中没有 id 字段的情况下创建
SELECT COUNT(*) FROM agload_test_graph."Country2";
SELECT COUNT(*) FROM agload_test_graph."City2";

SELECT id FROM agload_test_graph."Country" LIMIT 10;
SELECT id FROM agload_test_graph."Country2" LIMIT 10;

SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country {iso2 : 'BE'})
    RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype);
SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country2 {iso2 : 'BE'})
    RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype);

SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country {iso2 : 'AT'})
    RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype);
SELECT * FROM cypher('agload_test_graph', $$MATCH(n:Country2 {iso2 : 'AT'})
    RETURN id(n), n.name, n.iso2 $$) as ("id(n)" agtype, "n.name" agtype, "n.iso2" agtype);

SELECT drop_graph('agload_test_graph', true);