use of com.baidu.hugegraph.structure.GraphElement in project incubator-hugegraph-toolchain by apache.
the class ParseTaskBuilder method buildTask.
private ParseTask buildTask(ElementBuilder builder, List<Line> lines) {
final LoadMetrics metrics = this.context.summary().metrics(this.struct);
final int batchSize = this.context.options().batchSize;
final ElementMapping mapping = builder.mapping();
final boolean needRemoveId = builder instanceof VertexBuilder && ((VertexLabel) builder.schemaLabel()).idStrategy().isPrimaryKey();
return new ParseTask(mapping, () -> {
List<List<Record>> batches = new ArrayList<>();
// One batch record
List<Record> records = new ArrayList<>(batchSize);
int count = 0;
for (Line line : lines) {
try {
// NOTE: don't remove entry in keyValues
@SuppressWarnings("unchecked") List<GraphElement> elements = builder.build(line.names(), line.values());
E.checkState(elements.size() <= batchSize, "The number of columns in a line cannot " + "exceed the size of a batch, but got %s > %s", elements.size(), batchSize);
// Prevent batch size from exceeding limit
if (records.size() + elements.size() > batchSize) {
LOG.debug("Create a new batch for {}", mapping);
// Add current batch and create a new batch
batches.add(records);
records = new ArrayList<>(batchSize);
}
for (GraphElement element : elements) {
if (needRemoveId) {
((Vertex) element).id(null);
}
records.add(new Record(line.rawLine(), element));
count++;
}
} catch (IllegalArgumentException e) {
metrics.increaseParseFailure(mapping);
ParseException pe = new ParseException(line.rawLine(), e);
this.handleParseFailure(mapping, pe);
}
}
if (!records.isEmpty()) {
batches.add(records);
}
metrics.plusParseSuccess(mapping, count);
return batches;
});
}
use of com.baidu.hugegraph.structure.GraphElement in project incubator-hugegraph-toolchain by apache.
the class InsertTask method insertBatch.
@SuppressWarnings("unchecked")
protected void insertBatch(List<Record> batch, boolean checkVertex) {
HugeClient client = this.context.client();
List<GraphElement> elements = new ArrayList<>(batch.size());
batch.forEach(r -> elements.add(r.element()));
if (this.type().isVertex()) {
client.graph().addVertices((List<Vertex>) (Object) elements);
} else {
client.graph().addEdges((List<Edge>) (Object) elements, checkVertex);
}
}
use of com.baidu.hugegraph.structure.GraphElement in project incubator-hugegraph-toolchain by apache.
the class InsertTask method updateBatch.
@SuppressWarnings("unchecked")
protected void updateBatch(List<Record> batch, boolean checkVertex) {
HugeClient client = this.context.client();
List<GraphElement> elements = new ArrayList<>(batch.size());
batch.forEach(r -> elements.add(r.element()));
// CreateIfNotExist dose not support false now
if (this.type().isVertex()) {
BatchVertexRequest.Builder req = new BatchVertexRequest.Builder();
req.vertices((List<Vertex>) (Object) elements).updatingStrategies(this.mapping.updateStrategies()).createIfNotExist(true);
client.graph().updateVertices(req.build());
} else {
BatchEdgeRequest.Builder req = new BatchEdgeRequest.Builder();
req.edges((List<Edge>) (Object) elements).updatingStrategies(this.mapping.updateStrategies()).checkVertex(checkVertex).createIfNotExist(true);
client.graph().updateEdges(req.build());
}
}
use of com.baidu.hugegraph.structure.GraphElement in project incubator-hugegraph-toolchain by apache.
the class BackupRestoreBaseManager method writeText.
protected long writeText(String path, HugeType type, List<?> list, boolean compress, String label, boolean allProperties, List<String> properties) {
OutputStream os = this.outputStream(path, compress);
ByteArrayOutputStream baos = new ByteArrayOutputStream(LBUF_SIZE);
StringBuilder builder = new StringBuilder(LBUF_SIZE);
long count = 0L;
try {
for (Object e : list) {
GraphElement element = (GraphElement) e;
if (label != null && !label.equals(element.label())) {
continue;
}
count++;
if (type == HugeType.VERTEX) {
builder.append(element.id()).append("\t");
} else {
Edge edge = (Edge) e;
builder.append(edge.sourceId()).append("\t").append(edge.targetId()).append("\t");
}
if (allProperties) {
for (Object value : element.properties().values()) {
builder.append(value).append(",");
}
} else {
for (String property : properties) {
builder.append(element.property(property)).append(",");
}
}
builder.setCharAt(builder.length() - 1, '\n');
}
baos.write(builder.toString().getBytes(API.CHARSET));
os.write(baos.toByteArray());
} catch (Throwable e) {
throw new ToolsException("Failed to serialize %s to %s", e, type, path);
}
return count;
}
Aggregations