更新时间:2024-11-01 GMT+08:00

一般图数据格式

在导入图数据之前,您需要了解GES中支持的图数据格式。

  • GES仅支持载入具有标准CSV格式的原始图数据,如果您的原始数据并不符合指定的格式,则需要将数据整理为GES支持的格式。
  • GES支持的图数据格式包含三部分:点文件、边文件以及元数据。
    • 点文件用于存放点数据。
    • 边文件用于存放边数据。
    • 元数据用于描述点文件和边文件中的数据格式。

概念说明

GES基于属性图模型导入图数据,因此,您需要了解属性图(Property graph)的基本概念。

一个属性图是由点、边、标签(Label)和属性(Property)组成的有向图。

  • 点又称作节点(Node),边又称作关系(Relationship),点和关系是最重要的实体。
  • 元数据是用于描述点或边的属性信息,元数据由多个标签组成,每个标签由一个或多个属性组成。
  • 为点或边设置标签,那么拥有相同标签的点属于一个分组,是一个集合。
  • 点和边只能设置一个标签。

元数据

元数据的组成结构如下所示:

图1 元数据组成结构

GES的元数据用于定义点和边的属性信息,为XML格式的文件。

在元数据中包含了标签(Label)和属性(Property)。

  • 标签(Label)

    标签是属性的集合,描述了一个点或边拥有的所有属性的数据格式。

    在不同的标签中,如果定义了相同的属性名称(Property name),则定义的cardinality和dataType需要跟已定义的一致。2.3.18版本以后不再有该限制,即支持不同Label下的同名属性类型不同。

  • 属性(Property)

    属性指的是单个属性的数据格式,包含3个字段。

    • Property name:自定义属性名称,长度限制为1到256位,且不能包含<,>,&和ASCII码为14,15,30的特殊字符。

      同一个标签中不能包含相同的Property name。

    • cardinality:数据的复合类型,取值为single、list和set。
      • single是单值类型,表示该属性的数据是一个单值,如一个数字或一个字符串。

        当数据文件中single属性的数值为“value1;value2”这样的值时,将被识别为单值“value1;value2”。

      • list和set是多值类型,表示该属性的数据由多个值组成,不同的值用分号分隔。
        • list:数值有放入顺序,可重复,例如,“1;1;1”表示3个“1”。
        • set:数值无放入顺序,不可重复,重复数值会覆盖掉,例如,“1;1;1”只表示1个“1”。

        list和set类型不支持char array数据类型。

    • dataType:数据类型,支持的的数据类型如下表所示。
      表1 支持的数据类型

      类型

      描述

      char

      字符。

      char array

      定长字符串(需指定最大长度,用maxDataSize参数实现)。

      说明:
      • 您可以设置maxDataSize参数来限制该类型数据的最大长度,详见图_元数据示例
      • 只有single类型支持该数据类型。
      • 如果是数据类型是字符串类型,建议设置为char array,比设置为string类型,导入速度快。

      float

      float浮点类型(32位浮点)。

      double

      double浮点类型(64位浮点)。

      bool

      bool类型,取值(0/1)或者(true/false)。

      long

      长整数类型(取值范围-2^63 to 2^63-1)。

      int

      整数类型(取值范围-2^31 to 2^31-1)。

      date

      日期,目前支持格式如下所示:

      • YYYY-MM-DD HH:MM:SS
      • YYYY-MM-DD
      说明:

      MM和DD均须写为两位数,即个位数字前加上“0”,例如“05/01”。

      enum

      枚举类型(需指定枚举类型的个数以及每个枚举值),详见图_元数据示例

      string

      不定长字符串类型。

      说明:

      由于string为不定长类型,影响数据导入效率,建议使用char array替代;

      char array的长度根据业务需要自行定义,建议不超过32个字符。

元数据示例如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>
<PMML version="3.0"
  xmlns="http://www.dmg.org/PMML-3-0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema_instance" >
  <labels>
    <label name="default">
    </label>
    <label name="movie">
        <properties>
            <property name="ChineseTitle" cardinality="single" dataType="int" />
            <property name="Year" cardinality="single" dataType="string"/>
            <property name="Genres" cardinality="single" dataType="string"/> 
        </properties>
    </label>
	<label name="user">
        <properties>
            <property name="ChineseName" cardinality="single" dataType="int" />
            <property name="Gender" cardinality="single" dataType="string"/>
            <property name="age" cardinality="single" dataType="enum" typeNameCount="7" 
			typeName1="Under 18" typeName2="18-24" typeName3="25-34" typeName4="35-44" typeName5="45-49"
			 typeName6="50-55" typeName7="56+"/> 
			<property name="occupation" cardinality="single" dataType="enum" typeNameCount="21" 
			typeName1="other or not specified" typeName2="academic/educator" typeName3="artist" typeName4="clerical/admin" typeName5="college/grad student"
			 typeName6="customer service" typeName7="doctor/health care" typeName8="executive/managerial" typeName9="farmer" typeName10="homemaker"
			  typeName11="K-12 student" typeName12="lawyer" typeName13="programmer" typeName14="retired" typeName15="sales/marketing"
			   typeName16="scientist" typeName17="self-employed" typeName18="technician/engineer" typeName19="tradesman/craftsman" typeName20="unemployed"
			    typeName21="writer"/>
			<property name="Zip-code" cardinality="single" dataType="char array" maxDataSize="12"/>
        </properties>
    </label>
	<label name="rate">
        <properties> 
            <property name="Rating" cardinality="single" dataType="int" />
            <property name="Datetime" cardinality="single" dataType="string"/>
        </properties>
    </label>  
</labels>
</PMML>

点文件

点文件罗列了各个点的数据信息。一行为一个点的数据。格式如下所示,id是点数据的唯一标识。

id,label,property 1,property 2,property 3,…
  • 点id的名称,建议您不要使用中划线(-)命名,会影响Gremlin查询的使用。
  • 点id的类型不需要设置,默认为string。
  • 请注意label前后不要任意加空格,逗号表示分隔符,空格会被识别成label的一部分,可能会出现识别不了或提示label不存在的情况。

示例:

Vivian,user,薇薇安,F,25-34,artist,98133
Eric,user,埃里克,M,18-24,college/grad student,40205

边文件

边文件罗列了各个边的数据信息,一行为一条边的数据。GES中图规格是以边的数量进行定义的,如一百万边。格式如下所示,id 1、id 2是一条边的两个端点的id。

id 1, id 2, label, property 1, property 2, …

示例:

Eric,Lethal Weapon,rate,4,2000-11-21 15:33:18
Vivian,Eric,friends

注意:在持久化版中想要把两个端点和标签都相同的边存入进去,则需要sortKey列,放在属性后面即最后一列。

导入时指定sortKeyColumn参数,如果sortKey有值,则会根据图的sortKey类型正确读入,如果没有值需要在属性的末尾添加逗号,导入时会读入空表示将sortKey设置为空,即NULL。

id 1, id 2, label, property 1, property 2, …,sortKey

示例:

Eric,Lethal Weapon,rate,4,2000-11-21 15:33:18,5
Vivian,Eric,friends,