CSV数据文件格式
本文介绍需要导入至图数据库GDB实例的CSV数据文件格式。
背景信息
CSV数据文件遵循RFC 4180 CSV规范。更多信息,请参见CSV文件的一般格式和MIME类型。
所有文件必须采用UTF-8格式编码。
注意事项
必须将点和边分别放到单独的文件。
说明加载程序可以在单个加载任务中加载多个点文件和多个边文件。
每一个加载任务的加载文件集必须位于Bucket的同一文件夹中,不能使用文件名和文件扩展名来区分点文件和边文件。
每个文件都包含一个逗号分隔的标题行,此标题行由系统列标题和属性列标题组成。
标题行是数据文件的第一行,由
\n
或\r\n
结束,行内不支持使用双引号、换行符等特殊字符,除分隔符逗号(,)外的其余字符均被解析为标题内容。
系统列标题
标题类型 | 参数/语法 | 是否必需 | 说明 |
点标题 |
| 是 | 点的ID。 |
| 是 | 点的标签,只支持单个标签。 | |
边标题 |
| 是 | 边的ID。 |
| 是 | 源点的点ID。 | |
| 是 | 目标点的点ID。 | |
| 是 | 边的标签,只支持单个标签。 |
属性列标题
属性列为普通属性时,您可以通过以下语法指定属性列,类型名称不区分大小写。
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)[]
行格式
项目 | 说明 |
分隔符 | 行中字段是用逗号分隔的,行间是用换行符( |
空白字段 | 非必需列(如用户定义的属性) 允许使用空白字段。空白字段仍需要逗号分隔符。 |
顶点ID | 每个顶点文件中所有顶点的 |
边ID | 每个边文件中所有边的 |
标签 | 标签是字符串类型,区分大小写。 |
字符串值 | 引号是可选的,当包含逗号等特殊字符时需要使用双引号("")括起来。 |
| SET属性字段,表示数据字段是属性 重要 覆盖写入一个SET属性时,相当于追加一个属性值。如果原来是一个普通属性,更新后是一个SET属性。 |
| SET属性字段,表示数据字段是属性 |
属性覆盖逻辑
原属性逻辑 | 新属性逻辑 | 结果 |
普通属性 | 普通属性 | 原属性值被覆盖,保留最后一次的写入。 |
普通属性 | SET属性 | 更新后是SET属性,原属性值会合并成SET中的一个属性值。 |
SET属性 | SET属性 | SET属性追加,属性值是并集。 |
SET属性 | 普通属性 | 更新后是一个普通属性,属性值是最后一次的写入。 |
CSV文件格式规范
与SET属性相关的格式规范具体如下:
SET属性单值字段:保持与原解析格式一致,解析后的值是SET属性的一个属性值。
SET属性数组字段:使用分号(;)分隔数组元素,例如整型数组字段
32;45;12
。SET属性数组字段:可以使用双引号("")将整个字段括起来,解析时会去掉字段前后的双引号,例如整型数组字段
"32;45;12"
。SET属性数组字段类型是字符串:单个数组元素不能包含有分号(;)字符,会被解析成元素分隔符。
数据类型
属性值类型 | 字段类型 | 取值范围 |
Bool或Boolean | Boolean |
|
整数 | 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 |
|
普通示例
图数据库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" |