CSV数据文件格式

本文介绍需要导入至图数据库GDB实例的CSV数据文件格式。

背景信息

CSV数据文件遵循RFC 4180 CSV规范。更多信息,请参见CSV文件的一般格式和MIME类型

重要

所有文件必须采用UTF-8格式编码。

注意事项

  • 必须将点和边分别放到单独的文件。

    说明

    加载程序可以在单个加载任务中加载多个点文件和多个边文件。

  • 每一个加载任务的加载文件集必须位于Bucket的同一文件夹中,不能使用文件名和文件扩展名来区分点文件和边文件。

  • 每个文件都包含一个逗号分隔的标题行,此标题行由系统列标题和属性列标题组成。

    标题行是数据文件的第一行,由\n\r\n结束,行内不支持使用双引号、换行符等特殊字符,除分隔符逗号(,)外的其余字符均被解析为标题内容。

系统列标题

标题类型

参数/语法

是否必需

说明

点标题

~id

点的ID。

~label

点的标签,只支持单个标签。

边标题

~id

边的ID。

~from

源点的点ID。

~to

目标点的点ID。

~label

边的标签,只支持单个标签。

属性列标题

  • 属性列为普通属性时,您可以通过以下语法指定属性列,类型名称不区分大小写。

    propertyname:type
    重要
    • 列标题中不允许使用空格,因此,属性名称也不能包含空格。

    • 属性不支持List数据类型,只能有一个值。

    示例:指定名为age、类型为Int的属性的列标题。

    文件中的每行都需要在该位置具有整数或保留为空。

    age:Int
  • 属性列为SET类型数据时,您可以使用以下几种语法指定属性列。

    重要

    图数据库GDB中仅点支持SET属性,边不支持SET属性,边中设置了SET属性均会导致错误。

    #兼容默认格式,普通单值属性。
    propertyname:type
    
    #普通单值属性
    propertyname:type(single)
    
    #SET属性,数据行中包含单值。
    propertyname:type(set)
    
    #SET属性,数据行中包含多值。
    propertyname:type[]
    
    #SET属性,数据行中包含多值。
    propertyname:type(set)[]

行格式

项目

说明

分隔符

行中字段是用逗号分隔的,行间是用换行符(\n)或回车换行符(\r\n)分隔的。

空白字段

非必需列(如用户定义的属性) 允许使用空白字段。空白字段仍需要逗号分隔符。

顶点ID

每个顶点文件中所有顶点的~id 值都必须是唯一的。~id 值相同的多个顶点行适用于图形中的单个顶点。

边ID

每个边文件中所有边的~id 值都必须是唯一的。~id 值相同的多个边行适用于图形中的单个边。

标签

标签是字符串类型,区分大小写。

字符串值

引号是可选的,当包含逗号等特殊字符时需要使用双引号("")括起来。

propertyname:type(set)

SET属性字段,表示数据字段是属性propertyname的一个属性值,类型是type

重要

覆盖写入一个SET属性时,相当于追加一个属性值。如果原来是一个普通属性,更新后是一个SET属性。

propertyname:type(set)[]

SET属性字段,表示数据字段是属性propertyname的属性值数组,数组元素类型是type。数组元素之间使用分号(;)分隔。

属性覆盖逻辑

原属性逻辑

新属性逻辑

结果

普通属性

普通属性

原属性值被覆盖,保留最后一次的写入。

普通属性

SET属性

更新后是SET属性,原属性值会合并成SET中的一个属性值。

SET属性

SET属性

SET属性追加,属性值是并集。

SET属性

普通属性

更新后是一个普通属性,属性值是最后一次的写入。

CSV文件格式规范

与SET属性相关的格式规范具体如下:

  • SET属性单值字段:保持与原解析格式一致,解析后的值是SET属性的一个属性值。

  • SET属性数组字段:使用分号(;)分隔数组元素,例如整型数组字段 32;45;12

  • SET属性数组字段:可以使用双引号("")将整个字段括起来,解析时会去掉字段前后的双引号,例如整型数组字段"32;45;12"

  • SET属性数组字段类型是字符串:单个数组元素不能包含有分号(;)字符,会被解析成元素分隔符。

数据类型

属性值类型

字段类型

取值范围

Bool或Boolean

Boolean

  • FALSE或false

  • TRUE或true

整数

char

-128 ~ 127

short

-32768 ~ 32767

int

-2^31 ~ 2^31 -1

long

-2^63 ~ 2^63 -1

小数

说明

支持十进制计数法或科学计数法。不支持(+/-)INFINITY或NaN。

float

32位IEEE 754浮点

double

64位IEEE 754浮点

字符串

string

  • 双引号是可选的。

  • 字符串中如果包含逗号(,)、换行(\r\n\n),双引号("")等特殊字符,需要使用双引号("")括起来。示例:"Hello,World"

  • 如果用双引号括起来的字符串中包含有双引号,可根据CSV规则使用两个双引号转义。示例:"Hello""World"""

  • 字符串中不包含特殊字符,可以不使用双引号括起来。

  • 支持长度为零的空字符串,表示为:””,不使用双引号的空白域表示不存在,为nullptr

普通示例

  • 图数据库GDB数据文件(以TinkerPop modern图为例)

    示意图

  • CSV数据文件如下所示:

    点文件

    ~id

    ~label

    name:string

    lang:string

    age:int

    1

    person

    marko

    29

    2

    person

    vadas

    27

    3

    software

    lop

    java

    4

    person

    josh

    32

    5

    software

    ripple

    java

    6

    person

    peter

    35

    边文件

    ~id

    ~from

    ~to

    ~label

    weight:double

    7

    1

    2

    knows

    0.5

    8

    1

    4

    knows

    1.0

    9

    1

    3

    created

    0.4

    10

    4

    5

    created

    1.0

    11

    4

    3

    created

    0.4

    12

    6

    3

    created

    0.2

SET属性示例

CSV数据文件

~id

~label

fruits:string(set)[]

codes:long(set)[]

1

person

apple;pear

22

2

person

banana;bitterorange

25;81

3

person

"cherry;blackberry;grape"

3;12

4

person

"54;11"