
# 一般图数据格式
在导入图数据之前，您需要了解GES中支持的图数据格式。
- GES仅支持载入具有标准CSV格式和TXT格式的原始图数据，如果您的原始数据并不符合指定的格式，则需要将数据整理为GES支持的格式。
- GES支持的图数据格式包含三部分：点文件、边文件以及元数据。
  - 点文件：用于存放点数据，为无Header的CSV格式。
  
  - 边文件：用于存放边数据，为无Header的CSV格式。
  
  - 元数据：用于描述点文件和边文件中的数据格式，定义图的Schema（即点/边的Label及其属性结构），为XML格式。
   
#### 概念说明
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表示关系类型（标签）。
图1图数据格式的示例   
![](https://support.huaweicloud.com/usermanual-ges/zh-cn_image_0000002374925481.png)
#### 元数据
元数据的组成结构如下所示：
图2元数据组成结构   
![](https://support.huaweicloud.com/usermanual-ges/zh-cn_image_0000002374885353.png)
GES的元数据用于定义点和边的属性信息，为XML格式的文件。
在元数据中包含了标签（Label）和属性（Property）。
- **标签（Label）**
  标签是属性的集合，描述了一个点或边拥有的所有属性的数据格式。
  ![](https://support.huaweicloud.com/usermanual-ges/public_sys-resources/note_3.0-zh-cn.png)
  在不同的标签中，如果定义了相同的属性名称（Property name），则定义的cardinality和dataType需要跟已定义的一致。2.3.18版本以后不再有该限制，即支持不同Label下的同名属性类型不同。
  
- **属性（Property）**
  属性指的是单个属性的数据格式，包含3个字段。
  - Property name：自定义属性名称，长度限制为1到256位，且不能包含\<，\>，\&和ASCII码为14，15，30的特殊字符。
    ![](https://support.huaweicloud.com/usermanual-ges/public_sys-resources/note_3.0-zh-cn.png)
    同一个标签中不能包含相同的Property name。
    
  
  - cardinality：数据的复合类型，取值为single、list和set。
    - single是单值类型，表示该属性的数据是一个单值，如一个数字或一个字符串。
      ![](https://support.huaweicloud.com/usermanual-ges/public_sys-resources/note_3.0-zh-cn.png)
      当数据文件中single属性的数值为"value1;value2"这样的值时，将被识别为单值"value1;value2"。
      
    
    - list和set是多值类型，表示该属性的数据由多个值组成，不同的值用分号分隔。
      - list：数值有放入顺序，可重复，例如，"1;1;1"表示3个"1"。
      
      - set：数值无放入顺序，不可重复，重复数值会覆盖掉，例如，"1;1;1"只表示1个"1"。
      
      
      ![](https://support.huaweicloud.com/usermanual-ges/public_sys-resources/note_3.0-zh-cn.png)
      list和set类型不支持char array数据类型。
      
     
  
  - dataType：数据类型，支持的的数据类型如下表所示。
    表1支持的数据类型 
    | 类型         | 描述                                                                                                                                                                                                                                                                                                                                                                                                                           |
    |:---|:---|
    | char       | 字符。                                                                                                                                                                                                                                                                                                                                                                                                                          |
    | char array | 定长字符串（需指定最大长度，用maxDataSize参数实现）。 说明： - 您可以设置maxDataSize参数来限制该类型数据的最大长度，详见[图_元数据示例]。  - 只有single类型支持该数据类型。  - 当字符串长度非固定或字符串较长时，建议使用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,…
```
![](https://support.huaweicloud.com/usermanual-ges/public_sys-resources/note_3.0-zh-cn.png)
- 点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,
```
