一般图数据格式
在导入图数据之前,您需要了解GES中支持的图数据格式。
- GES仅支持载入具有标准CSV格式的原始图数据,如果您的原始数据并不符合指定的格式,则需要将数据整理为GES支持的格式。
- GES支持的图数据格式包含三部分:点文件、边文件以及元数据。
- 点文件用于存放点数据。
- 边文件用于存放边数据。
- 元数据用于描述点文件和边文件中的数据格式。
概念说明
GES基于属性图模型导入图数据,因此,您需要了解属性图(Property graph)的基本概念。
一个属性图是由点、边、标签(Label)和属性(Property)组成的有向图。
- 点又称作节点(Node),边又称作关系(Relationship),点和关系是最重要的实体。
- 元数据是用于描述点或边的属性信息,元数据由多个标签组成,每个标签由一个或多个属性组成。
- 为点或边设置标签,那么拥有相同标签的点属于一个分组,是一个集合。
- 点和边只能设置一个标签。
如下示例中,此图数据由3个点和3条边组成,Vivian、Eric和Lethal Weapon表示点,(Vivian,Eric)、(Vivian,Lethal Weapon)和(Eric、Lethal Weapon)表示边,user和movie表示点的类型(标签),rate和friends表示关系类型(标签)。
- 标签(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数据类型。
- single是单值类型,表示该属性的数据是一个单值,如一个数字或一个字符串。
- 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个字符。
- Property name:自定义属性名称,长度限制为1到256位,且不能包含<,>,&和ASCII码为14,15,30的特殊字符。
元数据示例如下所示:
<?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,