数据类型
Ultipa 属性与 Go 数据类型的对应关系:
Ultipa | Go |
---|---|
string | string |
text | string |
float | float32 |
double | float64 |
int32 | int32 |
uint32 | uint32 |
int64 | int64 |
uint64 | uint64 |
datetime | interface{} |
timestamp | interface{} |
可以使用 utils.StringAsInterface(str string, t ultipa.PropertyType) (interface{}, error)
将数据的字符串形式转为相应的 Ultipa 属性类型。
需注意,string
中的数据格式如果与 ultipa.PropertyType
不一致,转换会失败。例如:
- 将
abc
转为ultipa.PropertyType_INT32
时,由于 'abc' 不是数字,转换会失败; - 将
2020-1-3 3:34:1
转为ultipa.PropertyType_datetime
时,由于时间格式未遵守 'yyyy-mm-dd hh:mm:ss',转换会失败。
InsertNodesBatchBySchema()
InsertNodesBatchBySchema()
可以为某一个点 schema 导入多条数据,需保证数据携带的属性与声明 schema 时携带的属性一致。
方法及相关类:
InsertNodesBatchBySchema(schema *structs.Schema,
rows []*structs.Node,
config *configuration.InsertRequestConfig
) (*http.InsertResponse, error)
Schema struct {
Name string
Properties []*Property
Desc string
Type string
DBType ultipa.DBType
Total int
}
Property struct {
Name string
Desc string
Lte bool
Schema string
Type ultipa.PropertyType
}
Node struct {
Name string
ID types.ID
UUID types.UUID
Schema string
Values *Values
}
示例:为图集 test 的点 schema 'customer' 插入多条数据,采用普通插入模式
func TestMisc(t *testing.T) {
// 创建名为 conn 的连接并使用 default 图集,此部分代码省略
schema := &structs.Schema{
Name: "customer",
DBType: ultipa.DBType_DBNODE,
Properties: []*structs.Property{
{
Name: "name",
Type: ultipa.PropertyType_STRING,
},
{
Name: "age",
Type: ultipa.PropertyType_INT32,
},
},
}
var nodes []*structs.Node
node1 := structs.NewNode()
node1.Set("name", "Paal")
node1.Set("age", int32(34))
nodes = append(nodes, node1)
node2 := structs.NewNode()
node2.Set("name", "Alice")
node2.Set("age", int32(23))
nodes = append(nodes, node2)
_, err := conn.InsertNodesBatchBySchema(schema, nodes, &configuration.InsertRequestConfig{
RequestConfig: &configuration.RequestConfig{
GraphName: "test",
},
InsertType: ultipa.InsertType_NORMAL,
})
if err != nil {
log.Fatalln(err)
}
}
InsertNodesBatchAuto()
InsertNodesBatchAuto()
可以同时为多个点 schema 导入多条数据,需保证数据携带 schema,且携带的属性与图集中该 schema 的属性一致。
方法及相关类:
InsertNodesBatchAuto(nodes []*structs.Node,
config *configuration.InsertRequestConfig
) (*http.InsertBatchAutoResponse, error)
Node struct {
Name string
ID types.ID
UUID types.UUID
Schema string
Values *Values
}
示例:为图集 test 的多个点 schema 插入多条数据,采用插入更新模式
func TestMisc(t *testing.T) {
// 创建名为 conn 的连接并使用 default 图集,此部分代码省略
var nodes []*structs.Node
node1 := structs.NewNode()
node1.Schema = "customer"
node1.ID = "ULTIPA8000000000000029"
node1.Set("name", "Paal")
node1.Set("age", int32(36))
nodes = append(nodes, node1)
node2 := structs.NewNode()
node2.Schema = "card"
node2.Set("balance", float32(25756.27))
nodes = append(nodes, node2)
_, err := conn.InsertNodesBatchAuto(nodes, &configuration.InsertRequestConfig{
RequestConfig: &configuration.RequestConfig{
GraphName: "test",
},
InsertType: ultipa.InsertType_UPSERT,
})
if err != nil {
log.Fatalln(err)
}
}
InsertEdgesBatchBySchema()
InsertEdgesBatchBySchema()
可以为某一个边 schema 导入多条数据,需保证数据携带的属性与声明 schema 时携带的属性一致。
方法及相关类:
InsertEdgesBatchBySchema(schema *structs.Schema,
rows []*structs.Edge,
config *configuration.InsertRequestConfig
) (*http.InsertResponse, error)
Schema struct {
Name string
Properties []*Property
Desc string
Type string
DBType ultipa.DBType
Total int
}
Property struct {
Name string
Desc string
Lte bool
Schema string
Type ultipa.PropertyType
}
Edge struct {
Name string
From types.ID
To types.ID
FromUUID types.UUID
ToUUID types.UUID
UUID types.UUID
Schema string
Values *Values
}
示例:为图集 test 的边 schema 'transfer' 插入多条数据,采用普通插入模式,允许自动插入点的起点/终点
func TestMisc(t *testing.T) {
// 创建名为 conn 的连接并使用 default 图集,此部分代码省略
schema := &structs.Schema{
Name: "transfer",
DBType: ultipa.DBType_DBEDGE,
Properties: []*structs.Property{
{
Name: "amount",
Type: ultipa.PropertyType_FLOAT,
},
},
}
var edges []*structs.Edge
edge1 := structs.NewEdge()
edge1.From = "ULTIPA8000000000000002"
edge1.To = "ULTIPA8000000000000003"
edge1.Set("amount", float32(2500))
edges = append(edges, edge1)
edge2 := structs.NewEdge()
edge2.From = "ULTIPA8000000000000007"
edge2.To = "ULTIPA8000000000000005"
edge2.Set("amount", float32(125.5))
edges = append(edges, edge2)
_, err := conn.InsertEdgesBatchBySchema(schema, edges, &configuration.InsertRequestConfig{
RequestConfig: &configuration.RequestConfig{
GraphName: "test",
},
InsertType: ultipa.InsertType_NORMAL,
CreateNodeIfNotExist: true,
})
if err != nil {
log.Fatalln(err)
}
InsertEdgesBatchAuto()
InsertEdgesBatchAuto()
可以同时为多个边 schema 导入多条数据,需保证数据携带 schema,且携带的属性与图集中该 schema 的属性一致。
方法及相关类:
InsertEdgesBatchAuto(edges []*structs.Edge,
config *configuration.InsertRequestConfig
) (*http.InsertBatchAutoResponse, error)
Edge struct {
Name string
From types.ID
To types.ID
FromUUID types.UUID
ToUUID types.UUID
UUID types.UUID
Schema string
Values *Values
}
示例:为图集 test 的多个边 schema 插入多条数据,采用插入覆盖模式,允许自动插入点的起点/终点
func TestMisc(t *testing.T) {
// 创建名为 conn 的连接并使用 default 图集,此部分代码省略
var edges []*structs.Edge
edge1 := structs.NewEdge()
edge1.Schema = "transfer"
edge1.UUID = uint64(27)
edge1.From = "ULTIPA8000000000000002"
edge1.To = "ULTIPA8000000000000003"
edge1.Set("amount", float32(245.4))
edges = append(edges, edge1)
edge2 := structs.NewEdge()
edge2.Schema = "default"
edge2.From = "ULTIPA800000000000001A"
edge2.To = "ULTIPA800000000000001B"
edges = append(edges, edge2)
_, err := conn.InsertEdgesBatchAuto(edges, &configuration.InsertRequestConfig{
RequestConfig: &configuration.RequestConfig{
GraphName: "test",
},
InsertType: ultipa.InsertType_OVERWRITE,
CreateNodeIfNotExist: true,
})
if err != nil {
log.Fatalln(err)
}
}