本节介绍用于插入点、边的方法。
方法 | 机制 | 使用场景 | 备注 |
---|---|---|---|
insertNodes() insertEdges() |
使用UQL | 插入少量点或边 | |
insertNodesBatchBySchema() insertEdgesBatchBySchema() |
使用gRPC将数据直接发送到服务器 | 插入大量相同schema的点或边 | 有更严格的格式要求,并且必须使用与嬴图属性类型对应的Java数据类型来给属性赋值(参见属性类型映射) |
insertNodesBatchAuto() insertEdgesBatchAuto() |
插入大量不同schema的点或边 |
属性类型映射
嬴图属性类型和Java数据类型的映射关系如下:
嬴图属性类型 |
Java数据类型 |
示例 |
---|---|---|
INT32 |
Integer |
18 |
UINT32 , INT64 , UINT64 |
Long |
1715169600L |
FLOAT |
Float |
170.5f |
DOUBLE |
Double |
170.5 |
DECIMAL |
BigDecimal |
65.32 , new BigDecimal("123.4567") |
STRING , TEXT |
String |
"John Doe" |
DATETIME |
String [1], Date , LocalDateTime |
"1993-05-06" , new Date(1715169600l) , LocalDateTime.of(2025, 4, 22, 10, 30) |
TIMESTAMP |
String [1], Date |
"1993-05-06" , new Date(1715169600l) |
BOOL |
Boolean |
true , false |
POINT |
com.ultipa.sdk.data.Point |
new Point(132.1, -1.5) |
BLOB |
byte[] , String |
"abc" , new byte[]{1, 2, 3} |
LIST |
List<> |
Arrays.asList("tennis", "violin") |
SET |
Set<> |
new HashSet<>(Arrays.asList(2004, 3025, 1025)) |
[1] 支持的日期字符串格式包括[YY]YY-MM-DD HH:MM:SS
、[YY]YY-MM-DD HH:MM:SSZ
、[YY]YY-MM-DDTHH:MM:SSZ
、[YY]YY-MM-DDTHH:MM:SSXX
、[YY]YY-MM-DDTHH:MM:SSXXX
、[YY]YY-MM-DD HH:MM:SS.SSS
以及它们的变体。
示例图结构
本节示例的点、边插入和删除基于如下的Schema和属性定义进行:

参考此示例创建这个图结构。
insertNodes()
向图中某个Schema插入点。
参数
nodes:List<Node>
:待插入的点列表。schemaName: String
:Schema名称。InsertRequestConfig
(可选):请求配置。
返回值
Response
:请求结果。
// Inserts two 'user' nodes into the graph 'social'
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setGraph("social");
List<Node> nodes = new ArrayList<>();
Node node1 = new Node();
node1.setId("U1");
node1.setValues(Value.newBuilder()
.add("name", "Alice")
.add("age", 18)
.add("score", 65.32)
.add("birthday", "1993-5-4")
.add("active", false)
.add("location", new Point(132.1, -1.5))
.add("profile", "abc")
.add("interests", Arrays.asList("tennis", "violin"))
.add("permissionCodes", new HashSet<>(Arrays.asList(2004, 3025, 1025)))
.build());
nodes.add(node1);
Node node2 = new Node();
node2.setId("U2");
node2.setValues(Value.newBuilder().add("name", "Bob").build());
nodes.add(node2);
Response response = driver.insertNodes("user", nodes, insertRequestConfig);
if (response.getStatus().getCode() == Ultipa.ErrorCode.valueOf("SUCCESS")) {
System.out.println(response.getStatus().getCode());
} else {
System.out.println(response.getStatus().getMsg());
}
SUCCESS
insertEdges()
向图中某个Schema插入边。
参数
edges:List<Edge>
:待插入的边列表;每个Edge
的from
和to
属性必填。schemaName: String
:Schema名称。InsertRequestConfig
(可选):请求配置。
返回值
Response
:请求结果。
// Inserts two 'follows' edges to the graph 'social'
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setGraph("social");
List<Edge> edges = new ArrayList<>();
Edge edge1 = new Edge();
edge1.setFrom("U1");
edge1.setTo("U2");
edge1.setValues(Value.newBuilder()
.add("createdOn", "2024-5-6")
.add("weight", 3.2)
.build());
edges.add(edge1);
Edge edge2 = new Edge();
edge2.setFrom("U2");
edge2.setTo("U1");
edge2.setValues(Value.newBuilder().add("createdOn", 1715169600).build());
edges.add(edge2);
Response response = driver.insertEdges("follows", edges, insertRequestConfig);
if (response.getStatus().getCode() == Ultipa.ErrorCode.valueOf("SUCCESS")) {
System.out.println(response.getStatus().getCode());
} else {
System.out.println(response.getStatus().getMsg());
}
SUCCESS
insertNodesBatchBySchema()
通过gRPC向图中某个Schema插入点。此方法针对批量插入进行了优化。
参数
schema: Schema
:目标Schema;属性name
必填,properties
包含图中对应Schema关联的部分或所有属性。nodes:List<Node>
:待插入的点列表;每个Node
的values
属性必须与Schema.properties
结构相同。InsertRequestConfig
(可选):请求配置。
返回值
InsertResponse
:插入请求结果。
// Inserts two 'user' nodes into the graph 'social'
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setGraph("social");
Schema schema = new Schema();
schema.setName("user");
schema.setProperties(new ArrayList<Property>() {{
add(new Property() {{
setName("name");
setType(Ultipa.PropertyType.STRING);
}});
/*add(new Property() {{
setName("age");
setType(Ultipa.PropertyType.INT32);
}});*/
add(new Property() {{
setName("score");
setType(Ultipa.PropertyType.DECIMAL);
setDecimalExtra(25, 10);
}});
add(new Property() {{
setName("birthday");
setType(Ultipa.PropertyType.DATETIME);
}});
add(new Property() {{
setName("active");
setType(Ultipa.PropertyType.BOOL);
}});
add(new Property() {{
setName("location");
setType(Ultipa.PropertyType.POINT);
}});
add(new Property() {{
setName("profile");
setType(Ultipa.PropertyType.BLOB);
}});
add(new Property() {{
setName("interests");
setType(Ultipa.PropertyType.LIST);
setSubType(Lists.newArrayList(Ultipa.PropertyType.STRING));
}});
add(new Property() {{
setName("permissionCodes");
setType(Ultipa.PropertyType.SET);
setSubType(Lists.newArrayList(Ultipa.PropertyType.INT32));
}});
}});
List<Node> nodes = new ArrayList<>();
Node node1 = new Node();
node1.setId("U1");
node1.setValues(Value.newBuilder()
.add("name", "Alice")
//.add("age", 18)
.add("score", 65.32)
.add("birthday", "1993-05-04")
.add("active", false)
.add("location", new Point(132.1, -1.5))
.add("profile", "abc")
.add("interests", Arrays.asList("tennis", "violin"))
.add("permissionCodes", new HashSet<>(Arrays.asList(2004, 3025, 1025)))
.build());
nodes.add(node1);
Node node2 = new Node();
node2.setId("U2");
node2.setValues(Value.newBuilder()
.add("name", "Bob")
//.add("age", null)
.add("score", null)
.add("birthday", null)
.add("active", null)
.add("location", null)
.add("profile", null)
.add("interests", null)
.add("permissionCodes", null)
.build());
nodes.add(node2);
InsertResponse insertResponse = driver.insertNodesBatchBySchema(schema, nodes, insertRequestConfig);
if (!insertResponse.getErrorItems().isEmpty()) {
System.out.println("Error items: " + insertResponse.getErrorItems());
} else {
System.out.println("All nodes inserted successfully");
}
All nodes inserted successfully
insertEdgesBatchBySchema()
通过gRPC向图中某个Schema插入边。此方法针对批量插入进行了优化。
参数
schema: Schema
:目标Schema;属性name
必填,properties
包含图中对应Schema关联的部分或所有属性。edges:List<Edge>
:待插入的边列表;每个Edge
的from
和to
属性必填,values
必须与Schema.properties
结构相同。InsertRequestConfig
(可选):请求配置。
返回值
InsertResponse
:插入请求结果。
// Inserts two 'follows' edges into the graph 'social'
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setGraph("social");
Schema schema = new Schema();
schema.setName("follows");
schema.setProperties(new ArrayList<Property>() {{
add(new Property() {{
setName("createdOn");
setType(Ultipa.PropertyType.TIMESTAMP);
}});
/*add(new Property() {{
setName("weight");
setType(Ultipa.PropertyType.FLOAT);
}});*/
}});
List<Edge> edges = new ArrayList<>();
Edge edge1 = new Edge();
edge1.setFrom("U1");
edge1.setTo("U2");
edge1.setValues(Value.newBuilder()
.add("createdOn", "2024-05-06")
//.add("weight", 3.2f)
.build());
edges.add(edge1);
Edge edge2 = new Edge();
edge2.setFrom("U2");
edge2.setTo("U1");
edge2.setValues(Value.newBuilder()
.add("createdOn", new Date(1715169600l))
//.add("weight", null)
.build());
edges.add(edge2);
InsertResponse insertResponse = driver.insertEdgesBatchBySchema(schema, edges, insertRequestConfig);
if (!insertResponse.getErrorItems().isEmpty()) {
System.out.println("Error items: " + insertResponse.getErrorItems());
} else {
System.out.println("All edges inserted successfully");
}
All edges inserted successfully
insertNodesBatchAuto()
通过gRPC向图中一个或多个Schema插入点。此方法针对批量插入进行了优化。
参数
nodes:List<Node>
:待插入的点列表;每个Node
的schema
必填,并且values
必须包含图中对应schema
关联的所有属性。InsertRequestConfig
(可选):请求配置。
返回值
Map<String, InsertResponse>
:Schema名称,插入请求结果。
// Inserts two 'user' nodes and a 'product' node into the graph 'social'
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setGraph("social");
List<Node> nodes = new ArrayList<>();
Node node1 = new Node();
node1.setId("U1");
node1.setSchema("user");
node1.setValues(Value.newBuilder()
.add("name", "Alice")
.add("age", 18)
.add("score", 65.32)
.add("birthday", "1993-05-04")
.add("active", false)
.add("location", new Point(132.1, -1.5))
.add("profile", "abc")
.add("interests", Arrays.asList("tennis", "violin"))
.add("permissionCodes", new HashSet<>(Arrays.asList(2004, 3025, 1025)))
.build());
nodes.add(node1);
Node node2 = new Node();
node2.setId("U2");
node2.setSchema("user");
node2.setValues(Value.newBuilder()
.add("name", "Bob")
.add("age", null)
.add("score", null)
.add("birthday", null)
.add("active", null)
.add("location", null)
.add("profile", null)
.add("interests", null)
.add("permissionCodes", null)
.build());
nodes.add(node2);
Node node3 = new Node();
node3.setSchema("product");
node3.setValues(Value.newBuilder()
.add("name", "Wireless Earbud")
.add("price", 93.2f)
.build());
nodes.add(node3);
Map<String, InsertResponse> result = driver.insertNodesBatchAuto(nodes, insertRequestConfig);
for (Map.Entry<String, InsertResponse> entry : result.entrySet()) {
String schemaName = entry.getKey();
InsertResponse insertResponse = entry.getValue();
if (!insertResponse.getErrorItems().isEmpty()) {
System.out.println("Error items of" + schemaName + "nodes: " + insertResponse.getErrorItems());
} else {
System.out.println("All " + schemaName + " nodes inserted successfully");
}
}
All product nodes inserted successfully
All user nodes inserted successfully
insertEdgesBatchAuto()
通过gRPC向图中一个或多个Schema插入边。此方法针对批量插入进行了优化。
参数
edges:List<Edge>
:待插入的边列表;每个Edge
的schema
、from
和to
必填,并且values
必须包含图中对应schema
关联的所有属性。InsertRequestConfig
(可选):请求配置。
返回值
Map<String, InsertResponse>
:Schema名称,插入请求结果。
// Inserts two 'follows' edges and a 'purchased' edge into the graph 'social'
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setGraph("social");
List<Edge> edges = new ArrayList<>();
Edge edge1 = new Edge();
edge1.setFrom("U1");
edge1.setTo("U2");
edge1.setSchema("follows");
edge1.setValues(Value.newBuilder()
.add("createdOn", "2024-05-06")
.add("weight", 3.2f)
.build());
edges.add(edge1);
Edge edge2 = new Edge();
edge2.setFrom("U2");
edge2.setTo("U1");
edge2.setSchema("follows");
edge2.setValues(Value.newBuilder()
.add("createdOn", new Date(1715169600l))
.add("weight", null)
.build());
edges.add(edge2);
Edge edge3 = new Edge();
edge3.setFrom("U2");
edge3.setTo("6809fdd90000020021000108");
edge3.setSchema("purchased");
edges.add(edge3);
Map<String, InsertResponse> result = driver.insertEdgesBatchAuto(edges, insertRequestConfig);
for (Map.Entry<String, InsertResponse> entry : result.entrySet()) {
String schemaName = entry.getKey();
InsertResponse insertResponse = entry.getValue();
if (!insertResponse.getErrorItems().isEmpty()) {
System.out.println("Error items of" + schemaName + "edges: " + insertResponse.getErrorItems());
} else {
System.out.println("All " + schemaName + " edges inserted successfully");
}
}
All purchased edges inserted successfully
All follows edges inserted successfully
完整示例
package com.ultipa.www.sdk.api;
import com.google.common.collect.Lists;
import com.ultipa.sdk.UltipaDriver;
import com.ultipa.sdk.connect.conf.InsertRequestConfig;
import com.ultipa.sdk.connect.conf.UltipaConfig;
import com.ultipa.sdk.data.Point;
import com.ultipa.sdk.operate.entity.*;
import com.ultipa.sdk.operate.response.InsertResponse;
import java.util.*;
public class Main {
public static void main(String[] args) {
UltipaConfig ultipaConfig = UltipaConfig.config()
// URI example: .hosts(Lists.newArrayList("d3026ac361964633986849ec43b84877s.eu-south-1.cloud.ultipa.com:8443"))
.hosts(Lists.newArrayList("192.168.1.85:60061","192.168.1.88:60061","192.168.1.87:60061"))
.username("<username>")
.password("<password>");
UltipaDriver driver = null;
try {
driver = new UltipaDriver(ultipaConfig);
// Inserts two 'user' nodes, a 'product' node, two 'follows' edges, and a 'purchased' edge into the graph 'social'
InsertRequestConfig insertRequestConfig = new InsertRequestConfig();
insertRequestConfig.setGraph("social");
List<Node> nodes = new ArrayList<>();
Node node1 = new Node();
node1.setId("U1");
node1.setSchema("user");
node1.setValues(Value.newBuilder()
.add("name", "Alice")
.add("age", 18)
.add("score", 65.32)
.add("birthday", "1993-05-04")
.add("active", false)
.add("location", new Point(132.1, -1.5))
.add("profile", "abc")
.add("interests", Arrays.asList("tennis", "violin"))
.add("permissionCodes", new HashSet<>(Arrays.asList(2004, 3025, 1025)))
.build());
nodes.add(node1);
Node node2 = new Node();
node2.setId("U2");
node2.setSchema("user");
node2.setValues(Value.newBuilder()
.add("name", "Bob")
.add("age", null)
.add("score", null)
.add("birthday", null)
.add("active", null)
.add("location", null)
.add("profile", null)
.add("interests", null)
.add("permissionCodes", null)
.build());
nodes.add(node2);
Node node3 = new Node();
node3.setId("P1");
node3.setSchema("product");
node3.setValues(Value.newBuilder()
.add("name", "Wireless Earbud")
.add("price", 93.2f)
.build());
nodes.add(node3);
List<Edge> edges = new ArrayList<>();
Edge edge1 = new Edge();
edge1.setFrom("U1");
edge1.setTo("U2");
edge1.setSchema("follows");
edge1.setValues(Value.newBuilder()
.add("createdOn", "2024-05-06")
.add("weight", 3.2f)
.build());
edges.add(edge1);
Edge edge2 = new Edge();
edge2.setFrom("U2");
edge2.setTo("U1");
edge2.setSchema("follows");
edge2.setValues(Value.newBuilder()
.add("createdOn", new Date(1715169600l))
.add("weight", null)
.build());
edges.add(edge2);
Edge edge3 = new Edge();
edge3.setFrom("U2");
edge3.setTo("P1");
edge3.setSchema("purchased");
edges.add(edge3);
Map<String, InsertResponse> result_n = driver.insertNodesBatchAuto(nodes, insertRequestConfig);
for (Map.Entry<String, InsertResponse> entry : result_n.entrySet()) {
String schemaName = entry.getKey();
InsertResponse insertResponse = entry.getValue();
if (!insertResponse.getErrorItems().isEmpty()) {
System.out.println("Error items of" + schemaName + "nodes: " + insertResponse.getErrorItems());
} else {
System.out.println("All " + schemaName + " nodes inserted successfully");
}
}
Map<String, InsertResponse> result_e = driver.insertEdgesBatchAuto(edges, insertRequestConfig);
for (Map.Entry<String, InsertResponse> entry : result_e.entrySet()) {
String schemaName = entry.getKey();
InsertResponse insertResponse = entry.getValue();
if (!insertResponse.getErrorItems().isEmpty()) {
System.out.println("Error items of" + schemaName + "edges: " + insertResponse.getErrorItems());
} else {
System.out.println("All " + schemaName + " edges inserted successfully");
}
}
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
if (driver != null) {
driver.close();
}
}
}
}