diff --git a/builder/core/pom.xml b/builder/core/pom.xml
index 6171fabf..cf580383 100644
--- a/builder/core/pom.xml
+++ b/builder/core/pom.xml
@@ -23,6 +23,14 @@
builder-core
+
+ com.antgroup.openspg.reasoner
+ reasoner-local-runner
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-cloudext-warehouse
+
com.antgroup.openspg.server
api-http-client
@@ -35,10 +43,6 @@
com.antgroup.openspg.cloudext
cloudext-impl-graph-store-tugraph
-
- com.antgroup.openspg.cloudext
- cloudext-interface-table-store
-
com.antgroup.openspg.cloudext
cloudext-interface-search-engine
@@ -47,13 +51,6 @@
com.antgroup.openspg.cloudext
cloudext-impl-search-engine-elasticsearch
-
- com.antgroup.kg.reasoner
- local
- ${kgreasoner-version}
- system
- ${project.basedir}/../../server/lib/spgreasoner-local-0.0.1.jar
-
com.antgroup.openspg.server
core-schema-model
diff --git a/builder/core/src/main/java/com/antgroup/openspg/builder/core/physical/process/RelationMappingProcessor.java b/builder/core/src/main/java/com/antgroup/openspg/builder/core/physical/process/RelationMappingProcessor.java
index bc71daa6..52347dd9 100644
--- a/builder/core/src/main/java/com/antgroup/openspg/builder/core/physical/process/RelationMappingProcessor.java
+++ b/builder/core/src/main/java/com/antgroup/openspg/builder/core/physical/process/RelationMappingProcessor.java
@@ -9,7 +9,7 @@ import com.antgroup.openspg.builder.model.pipeline.config.RelationMappingNodeCon
import com.antgroup.openspg.builder.model.record.BaseRecord;
import com.antgroup.openspg.builder.model.record.BuilderRecord;
import com.antgroup.openspg.builder.model.record.RelationRecord;
-import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.record.impl.convertor.EdgeRecordConvertor;
+import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.util.EdgeRecordConvertor;
import com.antgroup.openspg.common.util.StringUtils;
import com.antgroup.openspg.core.schema.model.identifier.RelationIdentifier;
import com.antgroup.openspg.core.schema.model.predicate.Relation;
diff --git a/builder/core/src/main/java/com/antgroup/openspg/builder/core/physical/process/SPGTypeMappingProcessor.java b/builder/core/src/main/java/com/antgroup/openspg/builder/core/physical/process/SPGTypeMappingProcessor.java
index 9f599301..a7ba647c 100644
--- a/builder/core/src/main/java/com/antgroup/openspg/builder/core/physical/process/SPGTypeMappingProcessor.java
+++ b/builder/core/src/main/java/com/antgroup/openspg/builder/core/physical/process/SPGTypeMappingProcessor.java
@@ -22,7 +22,7 @@ import com.antgroup.openspg.builder.model.pipeline.config.SPGTypeMappingNodeConf
import com.antgroup.openspg.builder.model.record.BaseAdvancedRecord;
import com.antgroup.openspg.builder.model.record.BaseRecord;
import com.antgroup.openspg.builder.model.record.BuilderRecord;
-import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.record.impl.convertor.VertexRecordConvertor;
+import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.util.VertexRecordConvertor;
import com.antgroup.openspg.common.util.StringUtils;
import com.antgroup.openspg.core.schema.model.identifier.SPGTypeIdentifier;
import com.antgroup.openspg.core.schema.model.type.BaseSPGType;
diff --git a/builder/core/src/main/java/com/antgroup/openspg/builder/core/reason/ReasonProcessor.java b/builder/core/src/main/java/com/antgroup/openspg/builder/core/reason/ReasonProcessor.java
index 9b51f126..0c41dd15 100644
--- a/builder/core/src/main/java/com/antgroup/openspg/builder/core/reason/ReasonProcessor.java
+++ b/builder/core/src/main/java/com/antgroup/openspg/builder/core/reason/ReasonProcessor.java
@@ -1,10 +1,5 @@
package com.antgroup.openspg.builder.core.reason;
-import com.antgroup.kg.reasoner.catalog.impl.OpenKgCatalog;
-import com.antgroup.kg.reasoner.common.graph.vertex.IVertexId;
-import com.antgroup.kg.reasoner.graphstate.GraphState;
-import com.antgroup.kg.reasoner.graphstate.impl.CloudExtGraphState;
-import com.antgroup.kg.reasoner.lube.catalog.Catalog;
import com.antgroup.openspg.builder.core.physical.process.BaseProcessor;
import com.antgroup.openspg.builder.core.reason.impl.CausalConceptReasoner;
import com.antgroup.openspg.builder.core.reason.impl.InductiveConceptReasoner;
@@ -16,6 +11,11 @@ import com.antgroup.openspg.builder.model.record.BaseSPGRecord;
import com.antgroup.openspg.core.schema.model.semantic.DynamicTaxonomySemantic;
import com.antgroup.openspg.core.schema.model.semantic.LogicalCausationSemantic;
import com.antgroup.openspg.core.schema.model.type.ConceptList;
+import com.antgroup.openspg.reasoner.catalog.impl.OpenSPGCatalog;
+import com.antgroup.openspg.reasoner.common.graph.vertex.IVertexId;
+import com.antgroup.openspg.reasoner.graphstate.GraphState;
+import com.antgroup.openspg.reasoner.lube.catalog.Catalog;
+import com.antgroup.openspg.reasoner.warehouse.cloudext.CloudExtGraphState;
import com.antgroup.openspg.server.common.model.datasource.connection.GraphStoreConnectionInfo;
import com.google.common.collect.Lists;
import java.util.*;
@@ -85,8 +85,8 @@ public class ReasonProcessor extends BaseProcessorcore
model
runner/local
+ testdata
diff --git a/builder/testdata/pom.xml b/builder/testdata/pom.xml
new file mode 100644
index 00000000..7df3ebbd
--- /dev/null
+++ b/builder/testdata/pom.xml
@@ -0,0 +1,23 @@
+
+
+ 4.0.0
+
+ com.antgroup.openspg.builder
+ builder-parent
+ 0.0.1-SNAPSHOT
+
+
+ builder-testdata
+
+
+
+ com.antgroup.openspg.builder
+ builder-model
+
+
+ com.antgroup.openspg.server
+ testdata
+
+
+
diff --git a/builder/testdata/src/main/java/com/antgroup/openspg/builder/test/RiskMiningRecord.java b/builder/testdata/src/main/java/com/antgroup/openspg/builder/test/RiskMiningRecord.java
new file mode 100644
index 00000000..b9bc8ce4
--- /dev/null
+++ b/builder/testdata/src/main/java/com/antgroup/openspg/builder/test/RiskMiningRecord.java
@@ -0,0 +1,39 @@
+package com.antgroup.openspg.builder.test;
+
+import com.antgroup.openspg.builder.model.record.EntityRecord;
+import com.antgroup.openspg.builder.model.record.property.SPGPropertyRecord;
+import com.antgroup.openspg.builder.model.record.property.SPGPropertyValue;
+import com.antgroup.openspg.server.testdata.RiskMiningSchema;
+import com.google.common.collect.Lists;
+
+public class RiskMiningRecord {
+
+ public static final EntityRecord PERSON_RECORD1 =
+ new EntityRecord(
+ RiskMiningSchema.PERSON,
+ "0",
+ Lists.newArrayList(
+ new SPGPropertyRecord(
+ RiskMiningSchema.PERSON.getPropertyMap().get("name"),
+ new SPGPropertyValue("裘**")),
+ new SPGPropertyRecord(
+ RiskMiningSchema.PERSON.getPropertyMap().get("age"), new SPGPropertyValue("58")),
+ new SPGPropertyRecord(
+ RiskMiningSchema.PERSON.getPropertyMap().get("hasPhone"),
+ new SPGPropertyValue("154****7458"))));
+
+ public static final EntityRecord PERSON_RECORD1_NORMALIZED =
+ new EntityRecord(
+ RiskMiningSchema.PERSON,
+ "0",
+ Lists.newArrayList(
+ new SPGPropertyRecord(
+ RiskMiningSchema.PERSON.getPropertyMap().get("name"),
+ new SPGPropertyValue("裘**").setStds(Lists.newArrayList("裘**"))),
+ new SPGPropertyRecord(
+ RiskMiningSchema.PERSON.getPropertyMap().get("age"),
+ new SPGPropertyValue("58").setStds(Lists.newArrayList(58L))),
+ new SPGPropertyRecord(
+ RiskMiningSchema.PERSON.getPropertyMap().get("hasPhone"),
+ new SPGPropertyValue("154****7458").setStds(Lists.newArrayList("154****7458")))));
+}
diff --git a/cloudext/impl/object-store/local/pom.xml b/cloudext/impl/object-store/local/pom.xml
deleted file mode 100644
index a20049d3..00000000
--- a/cloudext/impl/object-store/local/pom.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- 4.0.0
-
- com.antgroup.openspg.cloudext
- cloudext-parent
- 0.0.1-SNAPSHOT
- ../../../pom.xml
-
-
- cloudext-impl-object-store-local
-
-
-
- com.antgroup.openspg.cloudext
- cloudext-interface-object-store
-
-
- commons-io
- commons-io
-
-
-
diff --git a/cloudext/impl/object-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/objectstore/local/LocalObjectStoreClient.java b/cloudext/impl/object-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/objectstore/local/LocalObjectStoreClient.java
deleted file mode 100644
index ab665712..00000000
--- a/cloudext/impl/object-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/objectstore/local/LocalObjectStoreClient.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2023 Ant Group CO., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied.
- */
-
-package com.antgroup.openspg.cloudext.impl.objectstore.local;
-
-import com.antgroup.openspg.cloudext.interfaces.objectstore.ObjectStoreClient;
-import com.antgroup.openspg.cloudext.interfaces.objectstore.cmd.ObjectStoreSaveCmd;
-import com.antgroup.openspg.cloudext.interfaces.objectstore.model.ObjectStorePath;
-import com.antgroup.openspg.server.common.model.datasource.connection.ObjectStoreConnectionInfo;
-import java.io.File;
-import java.io.IOException;
-import lombok.Getter;
-import org.apache.commons.io.FileUtils;
-
-public class LocalObjectStoreClient implements ObjectStoreClient {
-
- @Getter private final ObjectStoreConnectionInfo connInfo;
- private final String localRootDir;
-
- public LocalObjectStoreClient(ObjectStoreConnectionInfo connInfo) {
- this.connInfo = connInfo;
- this.localRootDir = (String) connInfo.getNotNullParam("localDir");
- }
-
- @Override
- public ObjectStorePath save(ObjectStoreSaveCmd cmd) {
- ObjectStorePath path = cmd.getPath();
- File file = new File("./" + localRootDir + "/" + path.getRelativePath());
- try {
- FileUtils.copyInputStreamToFile(cmd.getInputStream(), file);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
-
- path.setAbsolutePath(file.getAbsolutePath());
- return path;
- }
-}
diff --git a/cloudext/impl/object-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/objectstore/local/LocalObjectStoreClientDriver.java b/cloudext/impl/object-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/objectstore/local/LocalObjectStoreClientDriver.java
deleted file mode 100644
index 89c6f46f..00000000
--- a/cloudext/impl/object-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/objectstore/local/LocalObjectStoreClientDriver.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2023 Ant Group CO., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied.
- */
-
-package com.antgroup.openspg.cloudext.impl.objectstore.local;
-
-import com.antgroup.openspg.cloudext.interfaces.objectstore.ObjectStoreClient;
-import com.antgroup.openspg.cloudext.interfaces.objectstore.ObjectStoreClientDriver;
-import com.antgroup.openspg.cloudext.interfaces.objectstore.ObjectStoreClientDriverManager;
-import com.antgroup.openspg.server.common.model.datasource.connection.ObjectStoreConnectionInfo;
-
-public class LocalObjectStoreClientDriver implements ObjectStoreClientDriver {
-
- static {
- ObjectStoreClientDriverManager.registerDriver(new LocalObjectStoreClientDriver());
- }
-
- @Override
- public String driverScheme() {
- return "local";
- }
-
- @Override
- public ObjectStoreClient connect(ObjectStoreConnectionInfo connInfo) {
- return new LocalObjectStoreClient(connInfo);
- }
-}
diff --git a/cloudext/impl/search-engine/elasticsearch/src/main/java/com/antgroup/openspg/cloudext/impl/searchengine/elasticsearch/util/ElasticSearchRecordUtils.java b/cloudext/impl/search-engine/elasticsearch/src/main/java/com/antgroup/openspg/cloudext/impl/searchengine/elasticsearch/util/ElasticSearchRecordUtils.java
index e7fb2c72..868bbd7e 100644
--- a/cloudext/impl/search-engine/elasticsearch/src/main/java/com/antgroup/openspg/cloudext/impl/searchengine/elasticsearch/util/ElasticSearchRecordUtils.java
+++ b/cloudext/impl/search-engine/elasticsearch/src/main/java/com/antgroup/openspg/cloudext/impl/searchengine/elasticsearch/util/ElasticSearchRecordUtils.java
@@ -32,7 +32,7 @@ import com.antgroup.openspg.cloudext.interfaces.searchengine.model.request.query
import com.antgroup.openspg.cloudext.interfaces.searchengine.model.request.query.QueryGroup;
import com.antgroup.openspg.cloudext.interfaces.searchengine.model.request.query.TermQuery;
import com.antgroup.openspg.common.util.StringUtils;
-import com.antgroup.openspg.server.api.facade.JSON;
+import com.antgroup.openspg.server.api.facade.SchemaJsonUtils;
import com.dtflys.forest.http.ForestResponse;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
@@ -93,7 +93,8 @@ public class ElasticSearchRecordUtils {
throw new RuntimeException("mGetIdxRecords error, errorMsg=" + response.getContent());
}
- EsDocs esDocs = JSON.deserialize(response.getContent(), new TypeToken() {}.getType());
+ EsDocs esDocs =
+ SchemaJsonUtils.deserialize(response.getContent(), new TypeToken() {}.getType());
return esDocs.toIdxRecord();
}
@@ -119,7 +120,7 @@ public class ElasticSearchRecordUtils {
if (StringUtils.isBlank(hits)) {
return Collections.emptyList();
}
- EsHits esHits = JSON.deserialize(hits, new TypeToken() {}.getType());
+ EsHits esHits = SchemaJsonUtils.deserialize(hits, new TypeToken() {}.getType());
return esHits.toIdxRecord();
}
diff --git a/cloudext/impl/table-store/local/pom.xml b/cloudext/impl/table-store/local/pom.xml
deleted file mode 100644
index 88b3a7dd..00000000
--- a/cloudext/impl/table-store/local/pom.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- 4.0.0
-
- com.antgroup.openspg.cloudext
- cloudext-parent
- 0.0.1-SNAPSHOT
- ../../../pom.xml
-
-
- cloudext-impl-table-store-local
-
-
-
- com.antgroup.openspg.cloudext
- cloudext-interface-table-store
-
-
- com.opencsv
- opencsv
-
-
-
diff --git a/cloudext/impl/table-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/tablestore/local/LocalTableFileHandler.java b/cloudext/impl/table-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/tablestore/local/LocalTableFileHandler.java
deleted file mode 100644
index cf47173f..00000000
--- a/cloudext/impl/table-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/tablestore/local/LocalTableFileHandler.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2023 Ant Group CO., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied.
- */
-
-package com.antgroup.openspg.cloudext.impl.tablestore.local;
-
-import com.antgroup.openspg.cloudext.interfaces.tablestore.TableFileHandler;
-import com.antgroup.openspg.cloudext.interfaces.tablestore.model.TableRecord;
-import com.opencsv.CSVWriter;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Queue;
-import java.util.concurrent.ArrayBlockingQueue;
-
-public class LocalTableFileHandler implements TableFileHandler {
-
- private final CSVWriter csvWriter;
- private final String tableName;
- private static final int DEFAULT_BUFFER_SIZE = 1000;
- private final Queue buffer;
-
- public LocalTableFileHandler(CSVWriter csvWriter, String tableName) {
- this.csvWriter = csvWriter;
- this.tableName = tableName;
- buffer = new ArrayBlockingQueue<>(DEFAULT_BUFFER_SIZE);
- }
-
- @Override
- public String getTableName() {
- return tableName;
- }
-
- @Override
- public int write(TableRecord record) {
- if (record.getValues() != null && record.getValues().length > 0) {
- buffer.add(Arrays.stream(record.getValues()).map(Object::toString).toArray(String[]::new));
- if (buffer.size() == DEFAULT_BUFFER_SIZE) {
- flushBuffer();
- }
- return 1;
- }
- return 0;
- }
-
- @Override
- public int batchWrite(List records) {
- for (TableRecord record : records) {
- write(record);
- }
- return records.size();
- }
-
- private synchronized void flushBuffer() {
- while (!buffer.isEmpty()) {
- csvWriter.writeNext(buffer.poll());
- }
- }
-
- @Override
- public void close() throws Exception {
- if (csvWriter != null) {
- flushBuffer();
- csvWriter.close();
- }
- }
-}
diff --git a/cloudext/impl/table-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/tablestore/local/LocalTableStoreClient.java b/cloudext/impl/table-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/tablestore/local/LocalTableStoreClient.java
deleted file mode 100644
index 58130292..00000000
--- a/cloudext/impl/table-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/tablestore/local/LocalTableStoreClient.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2023 Ant Group CO., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied.
- */
-
-package com.antgroup.openspg.cloudext.impl.tablestore.local;
-
-import com.antgroup.openspg.cloudext.interfaces.tablestore.TableFileHandler;
-import com.antgroup.openspg.cloudext.interfaces.tablestore.TableStoreClient;
-import com.antgroup.openspg.cloudext.interfaces.tablestore.cmd.TableFileCreateCmd;
-import com.antgroup.openspg.cloudext.interfaces.tablestore.model.ColumnMeta;
-import com.antgroup.openspg.common.util.tuple.Tuple2;
-import com.antgroup.openspg.server.common.model.datasource.connection.TableStoreConnectionInfo;
-import com.opencsv.CSVWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Arrays;
-import lombok.Getter;
-
-public class LocalTableStoreClient implements TableStoreClient {
-
- @Getter private final TableStoreConnectionInfo connInfo;
- private final String localRootDir;
-
- public LocalTableStoreClient(TableStoreConnectionInfo connInfo) {
- this.connInfo = connInfo;
- this.localRootDir = (String) connInfo.getNotNullParam("localDir");
- new File("./" + localRootDir).mkdirs();
- }
-
- @Override
- public TableFileHandler create(TableFileCreateCmd cmd) {
- try {
- Tuple2 tuple2 = buildCsvWriter(cmd);
- return new LocalTableFileHandler(tuple2.first, tuple2.second);
- } catch (Throwable e) {
- throw new RuntimeException(e);
- }
- }
-
- private Tuple2 buildCsvWriter(TableFileCreateCmd cmd) throws IOException {
- String filePath = "./" + localRootDir + "/" + cmd.getName() + ".csv";
- CSVWriter csvWriter = new CSVWriter(new FileWriter(filePath));
-
- String[] columns =
- Arrays.stream(cmd.getColumns()).map(ColumnMeta::getName).toArray(String[]::new);
- csvWriter.writeNext(columns);
- return Tuple2.of(csvWriter, filePath);
- }
-}
diff --git a/cloudext/impl/table-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/tablestore/local/LocalTableStoreClientDriver.java b/cloudext/impl/table-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/tablestore/local/LocalTableStoreClientDriver.java
deleted file mode 100644
index 81a9b65d..00000000
--- a/cloudext/impl/table-store/local/src/main/java/com/antgroup/openspg/cloudext/impl/tablestore/local/LocalTableStoreClientDriver.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2023 Ant Group CO., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied.
- */
-
-package com.antgroup.openspg.cloudext.impl.tablestore.local;
-
-import com.antgroup.openspg.cloudext.interfaces.tablestore.TableStoreClient;
-import com.antgroup.openspg.cloudext.interfaces.tablestore.TableStoreClientDriver;
-import com.antgroup.openspg.cloudext.interfaces.tablestore.TableStoreClientDriverManager;
-import com.antgroup.openspg.server.common.model.datasource.connection.TableStoreConnectionInfo;
-
-public class LocalTableStoreClientDriver implements TableStoreClientDriver {
-
- static {
- TableStoreClientDriverManager.registerDriver(new LocalTableStoreClientDriver());
- }
-
- @Override
- public String driverScheme() {
- return "local";
- }
-
- @Override
- public TableStoreClient connect(TableStoreConnectionInfo connInfo) {
- return new LocalTableStoreClient(connInfo);
- }
-}
diff --git a/cloudext/interface/graph-store/pom.xml b/cloudext/interface/graph-store/pom.xml
index fb00db04..a45c60e0 100644
--- a/cloudext/interface/graph-store/pom.xml
+++ b/cloudext/interface/graph-store/pom.xml
@@ -32,5 +32,9 @@
com.antgroup.openspg.builder
builder-model
+
+ com.antgroup.openspg.builder
+ builder-testdata
+
diff --git a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/BaseSPGRecord2LPGStrategy.java b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/BaseSPGRecord2LPGStrategy.java
index fe080562..93a8b5d3 100644
--- a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/BaseSPGRecord2LPGStrategy.java
+++ b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/BaseSPGRecord2LPGStrategy.java
@@ -18,8 +18,8 @@ import com.antgroup.openspg.builder.model.record.RecordAlterOperationEnum;
import com.antgroup.openspg.builder.model.record.SPGRecordAlterItem;
import com.antgroup.openspg.builder.model.record.property.SPGPropertyRecord;
import com.antgroup.openspg.cloudext.interfaces.graphstore.BaseLPGGraphStoreClient;
-import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.record.impl.convertor.EdgeRecordConvertor;
-import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.record.impl.convertor.VertexRecordConvertor;
+import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.util.EdgeRecordConvertor;
+import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.util.VertexRecordConvertor;
import com.antgroup.openspg.cloudext.interfaces.graphstore.cmd.OneHopLPGRecordQuery;
import com.antgroup.openspg.cloudext.interfaces.graphstore.model.Direction;
import com.antgroup.openspg.cloudext.interfaces.graphstore.model.lpg.record.LPGRecordAlterItem;
diff --git a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/RelationRecord2LPGStrategy.java b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/RelationRecord2LPGStrategy.java
index c1020474..38b710a1 100644
--- a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/RelationRecord2LPGStrategy.java
+++ b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/RelationRecord2LPGStrategy.java
@@ -15,7 +15,7 @@ package com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.record.impl.
import com.antgroup.openspg.builder.model.record.RelationRecord;
import com.antgroup.openspg.builder.model.record.SPGRecordAlterItem;
-import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.record.impl.convertor.EdgeRecordConvertor;
+import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.util.EdgeRecordConvertor;
import com.antgroup.openspg.cloudext.interfaces.graphstore.model.lpg.record.LPGRecordAlterItem;
import com.google.common.collect.Lists;
import java.util.List;
diff --git a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/SPGTypeRecord2LPGStrategy.java b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/SPGTypeRecord2LPGStrategy.java
index f968c539..9a71f663 100644
--- a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/SPGTypeRecord2LPGStrategy.java
+++ b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/strategy/SPGTypeRecord2LPGStrategy.java
@@ -15,7 +15,7 @@ package com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.record.impl.
import com.antgroup.openspg.builder.model.record.BaseAdvancedRecord;
import com.antgroup.openspg.builder.model.record.SPGRecordAlterItem;
-import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.record.impl.convertor.VertexRecordConvertor;
+import com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.util.VertexRecordConvertor;
import com.antgroup.openspg.cloudext.interfaces.graphstore.model.lpg.record.LPGRecordAlterItem;
import com.antgroup.openspg.cloudext.interfaces.graphstore.model.lpg.record.VertexRecord;
import java.util.List;
diff --git a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/convertor/EdgeRecordConvertor.java b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/EdgeRecordConvertor.java
similarity index 74%
rename from cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/convertor/EdgeRecordConvertor.java
rename to cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/EdgeRecordConvertor.java
index b2796655..660efeef 100644
--- a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/convertor/EdgeRecordConvertor.java
+++ b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/EdgeRecordConvertor.java
@@ -11,7 +11,7 @@
* or implied.
*/
-package com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.record.impl.convertor;
+package com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.util;
import com.antgroup.openspg.builder.model.record.BaseAdvancedRecord;
import com.antgroup.openspg.builder.model.record.RelationRecord;
@@ -19,7 +19,6 @@ import com.antgroup.openspg.builder.model.record.property.SPGPropertyRecord;
import com.antgroup.openspg.cloudext.interfaces.graphstore.model.lpg.record.EdgeRecord;
import com.antgroup.openspg.cloudext.interfaces.graphstore.model.lpg.schema.EdgeTypeName;
import com.antgroup.openspg.core.schema.model.predicate.Relation;
-import com.antgroup.openspg.core.schema.model.type.SPGTypeRef;
import com.antgroup.openspg.server.common.model.exception.GraphStoreException;
import java.util.Collections;
import java.util.List;
@@ -29,6 +28,7 @@ import java.util.stream.Collectors;
/** Convertor for {@link EdgeRecord} and {@link RelationRecord}. */
public class EdgeRecordConvertor {
+ /** Convert the SPG record to an LPG record. */
public static EdgeRecord toEdgeRecord(RelationRecord relationRecord) {
Relation relationType = relationRecord.getRelationType();
return new EdgeRecord(
@@ -42,19 +42,9 @@ public class EdgeRecordConvertor {
}
/**
- * Convert {@link SPGPropertyRecord} in {@link BaseAdvancedRecord} into edge records.
- * Specifically, {@link BaseAdvancedRecord#getName()}, {@link BaseAdvancedRecord#getId()}, {@link
- * SPGPropertyRecord#getName()}, {@link SPGTypeRef#getName()} from {@link SPGPropertyRecord}, and
- * be assigned to start vertex's type name, start vertex's ID, edge label, and end vertex's type
- * name of {@link EdgeRecord}s. And end vertex's IDs of {@link EdgeRecord}s will be split from
- * {@link SPGPropertyRecord#getValue()}
- *
- * @param advancedRecord advanced record, such as {@link
- * com.antgroup.openspg.builder.model.record.EventRecord EventRecord}, {@link
- * com.antgroup.openspg.builder.model.record.EntityRecord EntityRecord} and {@link
- * com.antgroup.openspg.builder.model.record.ConceptRecord ConceptRecord}.
- * @param spgPropertyRecord record of SPG property.
- * @return a list of {@link EdgeRecord}s
+ * For an advanced SPG record, when one of its property types is also an advanced type, an edge
+ * will be created between the current instance and the instance corresponding to that property
+ * value.
*/
public static List toEdgeRecords(
BaseAdvancedRecord advancedRecord, SPGPropertyRecord spgPropertyRecord) {
@@ -77,6 +67,10 @@ public class EdgeRecordConvertor {
.collect(Collectors.toList());
}
+ /**
+ * Convert the LPG record to an SPG record, mainly used in the mapping or reasoning process of
+ * knowledge builder.
+ */
public static RelationRecord toRelationRecord(
Relation relationType, String srcId, String dstId, Map properties) {
return new RelationRecord(
diff --git a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/convertor/PropertyRecordConvertor.java b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/PropertyRecordConvertor.java
similarity index 95%
rename from cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/convertor/PropertyRecordConvertor.java
rename to cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/PropertyRecordConvertor.java
index a53def6d..ea661983 100644
--- a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/convertor/PropertyRecordConvertor.java
+++ b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/PropertyRecordConvertor.java
@@ -11,7 +11,7 @@
* or implied.
*/
-package com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.record.impl.convertor;
+package com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.util;
import com.antgroup.openspg.builder.model.record.property.BasePropertyRecord;
import com.antgroup.openspg.builder.model.record.property.SPGPropertyRecord;
@@ -29,6 +29,7 @@ import org.apache.commons.collections4.MapUtils;
/** Convertor for {@link LPGPropertyRecord} and {@link SPGPropertyRecord}. */
public class PropertyRecordConvertor {
+ /** Convert the SPG record to an LPG record. */
public static List toLPGProperties(
List extends BasePropertyRecord> propertyRecords) {
List resultProperties = new ArrayList<>(propertyRecords.size());
@@ -45,6 +46,7 @@ public class PropertyRecordConvertor {
return resultProperties;
}
+ /** Convert the LPG record to an SPG record. */
public static List toSPGProperties(
Map properties, BaseSPGType spgType) {
if (MapUtils.isEmpty(properties)) {
@@ -64,6 +66,7 @@ public class PropertyRecordConvertor {
return spgPropertyRecords;
}
+ /** Convert the LPG record to an SPG record. */
public static List toSPGProperties(
Map properties, Property spgProperty) {
if (!spgProperty.hasSubProperty()) {
diff --git a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/convertor/VertexRecordConvertor.java b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/VertexRecordConvertor.java
similarity index 91%
rename from cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/convertor/VertexRecordConvertor.java
rename to cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/VertexRecordConvertor.java
index 43bfd778..31bcb177 100644
--- a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/record/impl/convertor/VertexRecordConvertor.java
+++ b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/VertexRecordConvertor.java
@@ -11,7 +11,7 @@
* or implied.
*/
-package com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.record.impl.convertor;
+package com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.util;
import com.antgroup.openspg.builder.model.record.BaseAdvancedRecord;
import com.antgroup.openspg.builder.model.record.ConceptRecord;
@@ -39,6 +39,7 @@ import java.util.stream.Collectors;
*/
public class VertexRecordConvertor {
+ /** Convert the SPG record to an LPG record. */
public static VertexRecord toVertexRecord(BaseAdvancedRecord advancedRecord) {
return new VertexRecord(
advancedRecord.getId(),
@@ -46,6 +47,10 @@ public class VertexRecordConvertor {
PropertyRecordConvertor.toLPGProperties(advancedRecord.getProperties()));
}
+ /**
+ * Convert the SPG property record to an LPG record, which is currently used only for standard
+ * types, as a standard type will automatically generate an LPG record based on the property.
+ */
public static List toVertexRecords(SPGPropertyRecord propertyRecord) {
if (propertyRecord.isBasicType()) {
throw GraphStoreException.unexpectedSPGPropertyRecordType(propertyRecord);
@@ -57,6 +62,10 @@ public class VertexRecordConvertor {
.collect(Collectors.toList());
}
+ /**
+ * Convert the LPG record to an SPG record, mainly used in the mapping or reasoning process of
+ * knowledge builder.
+ */
public static BaseAdvancedRecord toAdvancedRecord(
BaseSPGType baseSpgType, String bizId, Map properties) {
BaseAdvancedRecord advancedRecord = null;
diff --git a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/BaseLPGRecord.java b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/BaseLPGRecord.java
index 0c0b6f73..d8c56eeb 100644
--- a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/BaseLPGRecord.java
+++ b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/BaseLPGRecord.java
@@ -18,6 +18,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import lombok.EqualsAndHashCode;
import lombok.Getter;
import org.apache.commons.collections4.CollectionUtils;
@@ -32,6 +33,7 @@ import org.apache.commons.collections4.CollectionUtils;
*
*/
@Getter
+@EqualsAndHashCode(callSuper = false)
public abstract class BaseLPGRecord extends BaseValObj {
private final LPGRecordTypeEnum recordType;
diff --git a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/LPGPropertyRecord.java b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/LPGPropertyRecord.java
index cf0c1824..4b54fb23 100644
--- a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/LPGPropertyRecord.java
+++ b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/LPGPropertyRecord.java
@@ -15,6 +15,7 @@ package com.antgroup.openspg.cloudext.interfaces.graphstore.model.lpg.record;
import com.antgroup.openspg.core.schema.model.type.BasicTypeEnum;
import com.antgroup.openspg.server.common.model.base.BaseValObj;
+import lombok.EqualsAndHashCode;
import lombok.Getter;
/**
@@ -34,6 +35,7 @@ import lombok.Getter;
*
*/
@Getter
+@EqualsAndHashCode(callSuper = false)
public class LPGPropertyRecord extends BaseValObj {
/** The property name */
diff --git a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/VertexRecord.java b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/VertexRecord.java
index 8f623310..937384cb 100644
--- a/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/VertexRecord.java
+++ b/cloudext/interface/graph-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/graphstore/model/lpg/record/VertexRecord.java
@@ -18,6 +18,8 @@ import com.antgroup.openspg.server.api.facade.ApiConstants;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
+import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
@@ -26,6 +28,7 @@ import lombok.Setter;
* VertexType} in LPG, identified by vertex id (id).
*/
@Getter
+@EqualsAndHashCode(callSuper = true)
public class VertexRecord extends BaseLPGRecord {
@Setter private String vertexType;
@@ -45,13 +48,13 @@ public class VertexRecord extends BaseLPGRecord {
return otherProperties;
}
- public Map> toPropertyMapWithIdAndVersion() {
+ public Map> toPropertyMapWithIdAndVersion() {
Map otherProperties = toPropertyMapWithId();
- Map> results = new HashMap<>(otherProperties.size());
+ Map> results = new HashMap<>(otherProperties.size());
otherProperties.forEach(
(key, value) -> {
- Map propertyVersion = new HashMap<>(1);
+ TreeMap propertyVersion = new TreeMap<>();
propertyVersion.put(ApiConstants.DEFAULT_VERSION, value);
results.put(key, propertyVersion);
});
diff --git a/cloudext/interface/graph-store/src/test/groovy/com/antgroup/openspg/cloudext/interfaces/graphstore/RiskMiningLPGRecord.groovy b/cloudext/interface/graph-store/src/test/groovy/com/antgroup/openspg/cloudext/interfaces/graphstore/RiskMiningLPGRecord.groovy
new file mode 100644
index 00000000..d3407632
--- /dev/null
+++ b/cloudext/interface/graph-store/src/test/groovy/com/antgroup/openspg/cloudext/interfaces/graphstore/RiskMiningLPGRecord.groovy
@@ -0,0 +1,19 @@
+package com.antgroup.openspg.cloudext.interfaces.graphstore
+
+import com.antgroup.openspg.builder.test.RiskMiningRecord
+import com.antgroup.openspg.cloudext.interfaces.graphstore.model.lpg.record.LPGPropertyRecord
+import com.antgroup.openspg.cloudext.interfaces.graphstore.model.lpg.record.VertexRecord
+import spock.lang.Specification
+
+class RiskMiningLPGRecord extends Specification {
+
+ public final static VertexRecord PERSON_RECORD1 = new VertexRecord(
+ RiskMiningRecord.PERSON_RECORD1.id,
+ RiskMiningRecord.PERSON_RECORD1.getName(),
+ [
+ new LPGPropertyRecord("name", "裘**"),
+ new LPGPropertyRecord("age", 58L),
+ new LPGPropertyRecord("hasPhone", "154****7458"),
+ ]
+ );
+}
diff --git a/cloudext/interface/graph-store/src/test/groovy/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/VertexRecordConvertorTest.groovy b/cloudext/interface/graph-store/src/test/groovy/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/VertexRecordConvertorTest.groovy
new file mode 100644
index 00000000..7b061768
--- /dev/null
+++ b/cloudext/interface/graph-store/src/test/groovy/com/antgroup/openspg/cloudext/interfaces/graphstore/adapter/util/VertexRecordConvertorTest.groovy
@@ -0,0 +1,17 @@
+package com.antgroup.openspg.cloudext.interfaces.graphstore.adapter.util
+
+import com.antgroup.openspg.builder.test.RiskMiningRecord
+import com.antgroup.openspg.cloudext.interfaces.graphstore.RiskMiningLPGRecord
+import spock.lang.Specification
+
+class VertexRecordConvertorTest extends Specification {
+
+ def testToVertexRecord() {
+ expect:
+ outputRecord == VertexRecordConvertor.toVertexRecord(inputRecord)
+
+ where:
+ inputRecord || outputRecord
+ RiskMiningRecord.PERSON_RECORD1_NORMALIZED || RiskMiningLPGRecord.PERSON_RECORD1
+ }
+}
diff --git a/cloudext/interface/object-store/pom.xml b/cloudext/interface/object-store/pom.xml
deleted file mode 100644
index d9525030..00000000
--- a/cloudext/interface/object-store/pom.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- 4.0.0
-
- com.antgroup.openspg.cloudext
- cloudext-parent
- 0.0.1-SNAPSHOT
- ../../pom.xml
-
-
- cloudext-interface-object-store
-
-
-
- com.antgroup.openspg
- common-util
-
-
-
diff --git a/cloudext/interface/object-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/objectstore/ObjectStoreClientDriver.java b/cloudext/interface/object-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/objectstore/ObjectStoreClientDriver.java
deleted file mode 100644
index d83db16b..00000000
--- a/cloudext/interface/object-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/objectstore/ObjectStoreClientDriver.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2023 Ant Group CO., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied.
- */
-
-package com.antgroup.openspg.cloudext.interfaces.objectstore;
-
-import com.antgroup.openspg.common.util.cloudext.CloudExtClientDriver;
-import com.antgroup.openspg.server.common.model.datasource.connection.ObjectStoreConnectionInfo;
-
-public interface ObjectStoreClientDriver
- extends CloudExtClientDriver {}
diff --git a/cloudext/interface/object-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/objectstore/ObjectStoreClientDriverManager.java b/cloudext/interface/object-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/objectstore/ObjectStoreClientDriverManager.java
deleted file mode 100644
index 1c996652..00000000
--- a/cloudext/interface/object-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/objectstore/ObjectStoreClientDriverManager.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2023 Ant Group CO., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied.
- */
-
-package com.antgroup.openspg.cloudext.interfaces.objectstore;
-
-import com.antgroup.openspg.common.util.DriverManagerUtils;
-import com.antgroup.openspg.server.common.model.datasource.connection.ObjectStoreConnectionInfo;
-import com.antgroup.openspg.server.common.model.exception.CloudExtException;
-import java.util.concurrent.CopyOnWriteArrayList;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class ObjectStoreClientDriverManager {
-
- private static final CopyOnWriteArrayList registeredDrivers =
- new CopyOnWriteArrayList<>();
-
- private ObjectStoreClientDriverManager() {}
-
- static {
- DriverManagerUtils.loadDrivers("cloudext.objectstore.drivers", ObjectStoreClientDriver.class);
- log.info("object-store DriverManager initialized");
- }
-
- public static synchronized void registerDriver(ObjectStoreClientDriver driver) {
- if (driver != null) {
- registeredDrivers.addIfAbsent(driver);
- } else {
- throw new NullPointerException();
- }
- log.info("registerDriver: {}", driver);
- }
-
- public static ObjectStoreClient getClient(ObjectStoreConnectionInfo config) {
- for (ObjectStoreClientDriver driver : registeredDrivers) {
- if (driver.acceptsConfig(config)) {
- return driver.connect(config);
- }
- }
- throw CloudExtException.driverNotExist(config);
- }
-}
diff --git a/cloudext/interface/object-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/objectstore/cmd/ObjectStoreSaveCmd.java b/cloudext/interface/object-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/objectstore/cmd/ObjectStoreSaveCmd.java
deleted file mode 100644
index b41dd3d4..00000000
--- a/cloudext/interface/object-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/objectstore/cmd/ObjectStoreSaveCmd.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2023 Ant Group CO., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied.
- */
-
-package com.antgroup.openspg.cloudext.interfaces.objectstore.cmd;
-
-import com.antgroup.openspg.cloudext.interfaces.objectstore.model.ObjectStorePath;
-import com.antgroup.openspg.server.common.model.base.BaseCmd;
-import java.io.InputStream;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@Getter
-@AllArgsConstructor
-public class ObjectStoreSaveCmd extends BaseCmd {
-
- private final ObjectStorePath path;
-
- private final InputStream inputStream;
-}
diff --git a/cloudext/interface/object-store/src/main/resources/META-INF/services/com.antgroup.openspg.cloudext.interfaces.objectstore.ObjectStoreClientDriver b/cloudext/interface/object-store/src/main/resources/META-INF/services/com.antgroup.openspg.cloudext.interfaces.objectstore.ObjectStoreClientDriver
deleted file mode 100644
index 01c378fa..00000000
--- a/cloudext/interface/object-store/src/main/resources/META-INF/services/com.antgroup.openspg.cloudext.interfaces.objectstore.ObjectStoreClientDriver
+++ /dev/null
@@ -1 +0,0 @@
-com.antgroup.openspg.cloudext.impl.objectstore.local.LocalObjectStoreClientDriver
diff --git a/cloudext/interface/table-store/pom.xml b/cloudext/interface/table-store/pom.xml
deleted file mode 100644
index 7246377e..00000000
--- a/cloudext/interface/table-store/pom.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- 4.0.0
-
- com.antgroup.openspg.cloudext
- cloudext-parent
- 0.0.1-SNAPSHOT
- ../../pom.xml
-
-
- cloudext-interface-table-store
-
-
-
- com.antgroup.openspg
- common-util
-
-
-
diff --git a/cloudext/interface/table-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/tablestore/TableStoreClientDriver.java b/cloudext/interface/table-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/tablestore/TableStoreClientDriver.java
deleted file mode 100644
index 1dfaad73..00000000
--- a/cloudext/interface/table-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/tablestore/TableStoreClientDriver.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2023 Ant Group CO., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied.
- */
-
-package com.antgroup.openspg.cloudext.interfaces.tablestore;
-
-import com.antgroup.openspg.common.util.cloudext.CloudExtClientDriver;
-import com.antgroup.openspg.server.common.model.datasource.connection.TableStoreConnectionInfo;
-
-public interface TableStoreClientDriver
- extends CloudExtClientDriver {}
diff --git a/cloudext/interface/table-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/tablestore/TableStoreClientDriverManager.java b/cloudext/interface/table-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/tablestore/TableStoreClientDriverManager.java
deleted file mode 100644
index 9d61ff82..00000000
--- a/cloudext/interface/table-store/src/main/java/com/antgroup/openspg/cloudext/interfaces/tablestore/TableStoreClientDriverManager.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2023 Ant Group CO., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied.
- */
-
-package com.antgroup.openspg.cloudext.interfaces.tablestore;
-
-import com.antgroup.openspg.common.util.DriverManagerUtils;
-import com.antgroup.openspg.server.common.model.datasource.connection.TableStoreConnectionInfo;
-import com.antgroup.openspg.server.common.model.exception.CloudExtException;
-import java.util.concurrent.CopyOnWriteArrayList;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class TableStoreClientDriverManager {
-
- private static final CopyOnWriteArrayList registeredDrivers =
- new CopyOnWriteArrayList<>();
-
- private TableStoreClientDriverManager() {}
-
- static {
- DriverManagerUtils.loadDrivers("cloudext.tablestore.drivers", TableStoreClientDriver.class);
- log.info("table-store DriverManager initialized");
- }
-
- public static synchronized void registerDriver(TableStoreClientDriver driver) {
- if (driver != null) {
- registeredDrivers.addIfAbsent(driver);
- } else {
- throw new NullPointerException();
- }
- log.info("registerDriver: {}", driver);
- }
-
- public static TableStoreClient getClient(TableStoreConnectionInfo config) {
- for (TableStoreClientDriver driver : registeredDrivers) {
- if (driver.acceptsConfig(config)) {
- return driver.connect(config);
- }
- }
- throw CloudExtException.driverNotExist(config);
- }
-}
diff --git a/cloudext/interface/table-store/src/main/resources/META-INF/services/com.antgroup.openspg.cloudext.interfaces.tablestore.TableStoreClientDriver b/cloudext/interface/table-store/src/main/resources/META-INF/services/com.antgroup.openspg.cloudext.interfaces.tablestore.TableStoreClientDriver
deleted file mode 100644
index 8c9e3f74..00000000
--- a/cloudext/interface/table-store/src/main/resources/META-INF/services/com.antgroup.openspg.cloudext.interfaces.tablestore.TableStoreClientDriver
+++ /dev/null
@@ -1 +0,0 @@
-com.antgroup.openspg.cloudext.impl.tablestore.local.LocalTableStoreClientDriver
diff --git a/cloudext/pom.xml b/cloudext/pom.xml
index 9923c6a0..3a915e2e 100644
--- a/cloudext/pom.xml
+++ b/cloudext/pom.xml
@@ -36,12 +36,8 @@
interface/graph-store
- interface/object-store
- interface/table-store
interface/search-engine
impl/graph-store/tugraph
- impl/object-store/local
- impl/table-store/local
impl/search-engine/elasticsearch
diff --git a/common/util/src/main/java/com/antgroup/openspg/common/util/JsonUtils.java b/common/util/src/main/java/com/antgroup/openspg/common/util/JsonUtils.java
index 19dbb4d1..7bdd8624 100644
--- a/common/util/src/main/java/com/antgroup/openspg/common/util/JsonUtils.java
+++ b/common/util/src/main/java/com/antgroup/openspg/common/util/JsonUtils.java
@@ -13,7 +13,7 @@
package com.antgroup.openspg.common.util;
-import com.antgroup.openspg.server.api.facade.JSON;
+import com.antgroup.openspg.server.api.facade.SchemaJsonUtils;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@@ -22,7 +22,7 @@ public class JsonUtils {
public static String toJsonString(Object object) {
String result = null;
try {
- result = JSON.serialize(object);
+ result = SchemaJsonUtils.serialize(object);
} catch (Exception e) {
log.error("toJsonString error, object={}", object, e);
result = StringUtils.toString(object);
diff --git a/dev/release/docker-compose-no-es.yml b/dev/release/docker-compose-no-es.yml
deleted file mode 100644
index 01fa39a2..00000000
--- a/dev/release/docker-compose-no-es.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-version: "3.7"
-services:
- openspg:
- restart: always
- image: baifuyu/openspg:latest
- container_name: release-openspg
- ports:
- - "8887:8887"
- depends_on:
- - mysql
- - tugraph
- command: [
- '--cloudext.repository.impl.jdbc.host=mysql',
- '--builder.operator.python.exec=/usr/bin/python3.8',
- '--builder.operator.python.paths=/usr/lib/python3.8/site-packages;/usr/local/lib/python3.8/dist-packages;'
- ]
- environment:
- - PYTHONPATH=/usr/lib/python3.8/site-packages:/usr/local/lib/python3.8/dist-packages
-
- mysql:
- restart: always
- image: baifuyu/openspg-mysql:latest
- container_name: release-openspg-mysql
- environment:
- TZ: Asia/Shanghai
- LANG: C.UTF-8
- ports:
- - "3306:3306"
- command: [
- '--character-set-server=utf8mb4',
- '--collation-server=utf8mb4_general_ci'
- ]
-
- tugraph:
- image: tugraph/tugraph-runtime-centos7:4.0.1
- container_name: release-openspg-tugraph
- # default username is admin and default password is 73@TuGraph
- ports:
- - "7070:7070"
- - "9090:9090"
- command: lgraph_server
-
-
-
-
-
diff --git a/dev/release/docker-compose.yml b/dev/release/docker-compose.yml
index fc433276..c115b8b2 100644
--- a/dev/release/docker-compose.yml
+++ b/dev/release/docker-compose.yml
@@ -1,19 +1,44 @@
version: "3.7"
services:
openspg:
- extends:
- file: docker-compose-no-es.yml
- service: openspg
+ restart: always
+ image: baifuyu/openspg:latest
+ container_name: release-openspg
+ ports:
+ - "8887:8887"
+ depends_on:
+ - mysql
+ - tugraph
+ command: [
+ '--cloudext.repository.impl.jdbc.host=mysql',
+ '--builder.operator.python.exec=/usr/bin/python3.8',
+ '--builder.operator.python.paths=/usr/lib/python3.8/site-packages;/usr/local/lib/python3.8/dist-packages;'
+ ]
+ environment:
+ - PYTHONPATH=/usr/lib/python3.8/site-packages:/usr/local/lib/python3.8/dist-packages
mysql:
- extends:
- file: docker-compose-no-es.yml
- service: mysql
+ restart: always
+ image: baifuyu/openspg-mysql:latest
+ container_name: release-openspg-mysql
+ environment:
+ TZ: Asia/Shanghai
+ LANG: C.UTF-8
+ ports:
+ - "3306:3306"
+ command: [
+ '--character-set-server=utf8mb4',
+ '--collation-server=utf8mb4_general_ci'
+ ]
tugraph:
- extends:
- file: docker-compose-no-es.yml
- service: tugraph
+ image: tugraph/tugraph-runtime-centos7:4.0.1
+ container_name: release-openspg-tugraph
+ # default username is admin and default password is 73@TuGraph
+ ports:
+ - "7070:7070"
+ - "9090:9090"
+ command: lgraph_server
elasticsearch:
image: elasticsearch:8.5.3
diff --git a/dev/test/docker-compose-no-es.yml b/dev/test/docker-compose-no-es.yml
deleted file mode 100644
index 3715d615..00000000
--- a/dev/test/docker-compose-no-es.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-version: "3.7"
-services:
- mysql:
- restart: always
- image: mariadb:10.5.8
- container_name: test-openspg-mysql
- environment:
- MYSQL_ROOT_PASSWORD: openspg
- MYSQL_DATABASE: openspg
- TZ: Asia/Shanghai
- LANG: C.UTF-8
- volumes:
- - "./mysql/sqlscript:/docker-entrypoint-initdb.d"
- ports:
- - "3306:3306"
- command: [
- '--character-set-server=utf8mb4',
- '--collation-server=utf8mb4_general_ci'
- ]
-
- tugraph:
- image: tugraph/tugraph-runtime-centos7:4.0.1
- container_name: test-openspg-tugraph
- # default username is admin and default password is 73@TuGraph
- ports:
- - "7070:7070"
- - "9090:9090"
- command: lgraph_server
-
-
-
-
diff --git a/dev/test/docker-compose.yml b/dev/test/docker-compose.yml
index 1af46703..a2e66231 100644
--- a/dev/test/docker-compose.yml
+++ b/dev/test/docker-compose.yml
@@ -1,14 +1,32 @@
version: "3.7"
services:
mysql:
- extends:
- file: docker-compose-no-es.yml
- service: mysql
+ restart: always
+ image: mariadb:10.5.8
+ container_name: test-openspg-mysql
+ environment:
+ MYSQL_ROOT_PASSWORD: openspg
+ MYSQL_DATABASE: openspg
+ TZ: Asia/Shanghai
+ LANG: C.UTF-8
+ volumes:
+ - "./mysql/sqlscript:/docker-entrypoint-initdb.d"
+ ports:
+ - "3306:3306"
+ command: [
+ '--character-set-server=utf8mb4',
+ '--collation-server=utf8mb4_general_ci'
+ ]
tugraph:
- extends:
- file: docker-compose-no-es.yml
- service: tugraph
+ image: tugraph/tugraph-runtime-centos7:4.0.1
+ container_name: test-openspg-tugraph
+ # default username is admin and default password is 73@TuGraph
+ ports:
+ - "7070:7070"
+ - "9090:9090"
+ command: lgraph_server
+
elasticsearch:
image: elasticsearch:8.5.3
diff --git a/pom.xml b/pom.xml
index 9b3a3730..593d4ecf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,6 +59,26 @@
+
+ com.antgroup.openspg.builder
+ builder-testdata
+ ${project.version}
+
+
+ com.antgroup.openspg.server
+ testdata
+ ${project.version}
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-local-runner
+ ${project.version}
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-cloudext-warehouse
+ ${project.version}
+
com.antgroup.openspg.server
common-model
@@ -99,31 +119,11 @@
cloudext-interface-search-engine
${project.version}
-
- com.antgroup.openspg.cloudext
- cloudext-interface-object-store
- ${project.version}
-
-
- com.antgroup.openspg.cloudext
- cloudext-interface-table-store
- ${project.version}
-
com.antgroup.openspg.cloudext
cloudext-impl-graph-store-tugraph
${project.version}
-
- com.antgroup.openspg.cloudext
- cloudext-impl-object-store-local
- ${project.version}
-
-
- com.antgroup.openspg.cloudext
- cloudext-impl-table-store-local
- ${project.version}
-
com.antgroup.openspg.cloudext
cloudext-impl-search-engine-elasticsearch
diff --git a/python/medical/.knext.cfg b/python/medical/.knext.cfg
index d8bc8587..880f4725 100644
--- a/python/medical/.knext.cfg
+++ b/python/medical/.knext.cfg
@@ -1,7 +1,7 @@
[local]
project_name = Medical1
description = Medical1
-project_id = 3
+project_id = 2
namespace = Medical1
project_dir = medical1
schema_dir = schema
diff --git a/python/medical/schema/medical1_schema_helper.py b/python/medical/schema/medical1_schema_helper.py
index 0688fac7..35e3c495 100644
--- a/python/medical/schema/medical1_schema_helper.py
+++ b/python/medical/schema/medical1_schema_helper.py
@@ -17,8 +17,8 @@ class Medical1:
description = "description"
id = "id"
name = "name"
- alias = "alias"
stdId = "stdId"
+ alias = "alias"
def __init__(self):
pass
@@ -28,11 +28,11 @@ class Medical1:
description = "description"
id = "id"
name = "name"
- complication = "complication"
- department = "department"
- applicableDrug = "applicableDrug"
diseaseSite = "diseaseSite"
+ complication = "complication"
+ applicableDrug = "applicableDrug"
commonSymptom = "commonSymptom"
+ department = "department"
def __init__(self):
pass
@@ -51,8 +51,8 @@ class Medical1:
description = "description"
id = "id"
name = "name"
- stdId = "stdId"
alias = "alias"
+ stdId = "stdId"
def __init__(self):
pass
diff --git a/reasoner/common/src/main/java/com/antgroup/openspg/reasoner/common/graph/vertex/IVertexId.java b/reasoner/common/src/main/java/com/antgroup/openspg/reasoner/common/graph/vertex/IVertexId.java
index 6a599d77..51372224 100644
--- a/reasoner/common/src/main/java/com/antgroup/openspg/reasoner/common/graph/vertex/IVertexId.java
+++ b/reasoner/common/src/main/java/com/antgroup/openspg/reasoner/common/graph/vertex/IVertexId.java
@@ -35,6 +35,9 @@ public interface IVertexId extends Serializable, Comparable {
/** get kgstate internal id */
long getInternalId();
+ /** get biz id */
+ String getBizId();
+
/** get vertex type id */
long getTypeId();
diff --git a/reasoner/common/src/main/java/com/antgroup/openspg/reasoner/common/graph/vertex/impl/VertexId.java b/reasoner/common/src/main/java/com/antgroup/openspg/reasoner/common/graph/vertex/impl/VertexId.java
index 0363631a..b8e0fe85 100644
--- a/reasoner/common/src/main/java/com/antgroup/openspg/reasoner/common/graph/vertex/impl/VertexId.java
+++ b/reasoner/common/src/main/java/com/antgroup/openspg/reasoner/common/graph/vertex/impl/VertexId.java
@@ -24,6 +24,7 @@ import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Base64;
import java.util.Comparator;
+import lombok.Getter;
public class VertexId implements IVertexId {
/**
@@ -33,6 +34,8 @@ public class VertexId implements IVertexId {
*/
private final byte[] vertexIdBytes;
+ @Getter private String bizId;
+
/** create vertex id */
public VertexId(long internalId, String type) {
this.vertexIdBytes = generateIdBytes(internalId, type);
@@ -40,6 +43,7 @@ public class VertexId implements IVertexId {
public VertexId(String bizId, String type) {
this.vertexIdBytes = generateIdBytes(generateInternalId(bizId, type), type);
+ this.bizId = bizId;
}
public VertexId(byte[] bytes) {
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/ExprUtil.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/ExprUtil.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/ExprUtil.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/ExprUtil.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/PatternOps.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/PatternOps.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/PatternOps.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/PatternOps.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/SolvedModel.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/SolvedModel.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/SolvedModel.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/SolvedModel.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/Var.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/Var.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/Var.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/Var.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Aggregate.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Aggregate.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Aggregate.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Aggregate.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/BoundedVarLenExpand.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/BoundedVarLenExpand.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/BoundedVarLenExpand.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/BoundedVarLenExpand.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/DDL.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/DDL.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/DDL.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/DDL.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/ExpandInto.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/ExpandInto.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/ExpandInto.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/ExpandInto.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Filter.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Filter.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Filter.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Filter.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/LinkedExpand.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/LinkedExpand.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/LinkedExpand.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/LinkedExpand.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/LogicalOperator.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/LogicalOperator.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/LogicalOperator.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/LogicalOperator.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Optional.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Optional.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Optional.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Optional.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/OrderAndLimit.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/OrderAndLimit.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/OrderAndLimit.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/OrderAndLimit.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/PatternJoin.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/PatternJoin.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/PatternJoin.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/PatternJoin.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/PatternScan.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/PatternScan.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/PatternScan.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/PatternScan.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Project.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Project.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Project.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Project.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Select.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Select.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Select.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Select.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Start.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Start.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/Start.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/Start.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/SubQuery.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/SubQuery.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/operators/SubQuery.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/operators/SubQuery.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/LogicalOptimizer.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/LogicalOptimizer.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/LogicalOptimizer.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/LogicalOptimizer.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/Rule.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/Rule.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/Rule.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/Rule.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/AggregatePushDown.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/AggregatePushDown.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/AggregatePushDown.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/AggregatePushDown.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/DistinctGet.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/DistinctGet.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/DistinctGet.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/DistinctGet.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/EdgeToProperty.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/EdgeToProperty.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/EdgeToProperty.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/EdgeToProperty.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/ExpandIntoPure.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/ExpandIntoPure.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/ExpandIntoPure.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/ExpandIntoPure.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/FilterMerge.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/FilterMerge.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/FilterMerge.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/FilterMerge.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/FilterPushDown.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/FilterPushDown.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/FilterPushDown.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/FilterPushDown.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/IdFilterPushDown.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/IdFilterPushDown.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/IdFilterPushDown.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/IdFilterPushDown.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/ProjectMerge.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/ProjectMerge.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/ProjectMerge.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/ProjectMerge.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/Pure.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/Pure.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/Pure.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/Pure.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/SolvedModelPure.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/SolvedModelPure.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/optimizer/rules/SolvedModelPure.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/optimizer/rules/SolvedModelPure.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/LogicalPlanner.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/LogicalPlanner.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/LogicalPlanner.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/LogicalPlanner.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/LogicalPlannerContext.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/LogicalPlannerContext.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/LogicalPlannerContext.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/LogicalPlannerContext.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/PatternMatchPlanner.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/PatternMatchPlanner.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/PatternMatchPlanner.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/PatternMatchPlanner.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/ProjectPlanner.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/ProjectPlanner.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/ProjectPlanner.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/ProjectPlanner.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/SubQueryMerger.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/SubQueryMerger.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/SubQueryMerger.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/SubQueryMerger.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/SubQueryPlanner.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/SubQueryPlanner.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/planning/SubQueryPlanner.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/planning/SubQueryPlanner.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/Dag.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/Dag.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/Dag.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/Dag.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/Validator.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/Validator.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/Validator.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/Validator.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/semantic/Explain.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/semantic/Explain.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/semantic/Explain.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/semantic/Explain.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/semantic/SemanticExplainer.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/semantic/SemanticExplainer.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/semantic/SemanticExplainer.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/semantic/SemanticExplainer.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/semantic/rules/ConceptExplain.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/semantic/rules/ConceptExplain.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/semantic/rules/ConceptExplain.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/semantic/rules/ConceptExplain.scala
diff --git a/reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/semantic/rules/SpatioTemporalExplain.scala b/reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/semantic/rules/SpatioTemporalExplain.scala
similarity index 100%
rename from reasoner/lube-logical/src/main/scala/com/antgroup/kg/reasoner/lube/logical/validate/semantic/rules/SpatioTemporalExplain.scala
rename to reasoner/lube-logical/src/main/scala/com/antgroup/openspg/reasoner/lube/logical/validate/semantic/rules/SpatioTemporalExplain.scala
diff --git a/reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/EmptyCatalog.scala b/reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/EmptyCatalog.scala
similarity index 100%
rename from reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/EmptyCatalog.scala
rename to reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/EmptyCatalog.scala
diff --git a/reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/ExprUtilTests.scala b/reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/ExprUtilTests.scala
similarity index 100%
rename from reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/ExprUtilTests.scala
rename to reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/ExprUtilTests.scala
diff --git a/reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/LogicalOperatorOps.scala b/reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/LogicalOperatorOps.scala
similarity index 100%
rename from reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/LogicalOperatorOps.scala
rename to reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/LogicalOperatorOps.scala
diff --git a/reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/LogicalOperatorTests.scala b/reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/LogicalOperatorTests.scala
similarity index 100%
rename from reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/LogicalOperatorTests.scala
rename to reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/LogicalOperatorTests.scala
diff --git a/reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/LogicalPlannerTests.scala b/reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/LogicalPlannerTests.scala
similarity index 100%
rename from reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/LogicalPlannerTests.scala
rename to reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/LogicalPlannerTests.scala
diff --git a/reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/OptimizerTests.scala b/reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/OptimizerTests.scala
similarity index 100%
rename from reasoner/lube-logical/src/test/scala/com/antgroup/kg/reasoner/lube/logical/OptimizerTests.scala
rename to reasoner/lube-logical/src/test/scala/com/antgroup/openspg/reasoner/lube/logical/OptimizerTests.scala
diff --git a/reasoner/pom.xml b/reasoner/pom.xml
index c4d6ae41..49bc8177 100644
--- a/reasoner/pom.xml
+++ b/reasoner/pom.xml
@@ -31,7 +31,10 @@
lube-logical
lube-physical
warehouse/warehouse-common
+ warehouse/cloudext-warehouse
kgdsl-parser
+ runner/runner-common
+ runner/local-runner
catalog/openspg-catalog
@@ -87,11 +90,31 @@
reasoner-kgdsl-parser
${project.version}
+
+ com.antgroup.openspg.reasoner
+ reasoner-runner-common
+ ${project.version}
+
com.antgroup.openspg.reasoner
reasoner-openspg-catalog
${project.version}
+
+ com.antgroup.openspg.reasoner
+ reasoner-warehouse-common
+ ${project.version}
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-cloudext-warehouse
+ ${project.version}
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-local-runner
+ ${project.version}
+
org.antlr
@@ -247,6 +270,12 @@
odps-sdk-commons
${odps.version}
+
+ com.google.protobuf
+ protobuf-java
+ 3.8.0
+ provided
+
@@ -298,93 +327,6 @@
-
-
- com.alipay.cloudsdk
- cloud-sdk-common
- 1.2.1.20221206
-
-
- org.apache.httpcomponents
- httpcore
-
-
-
-
- com.alipay.cloudsdk
- logservice-cloud-sdk
- 1.1.0-SNAPSHOT
-
-
- com.alipay.cloudsdk
- logservice-cloud-driver-sls
- 1.1.0-SNAPSHOT
-
-
- com.alipay.cloudsdk
- logservice-cloud-driver-kafka
- 1.1.0-SNAPSHOT
-
-
-
- com.alipay.cloudsdk
- object-storage-cloud-sdk
- 2.0.0.20221213-SNAPSHOT
-
-
-
- com.alipay.cloudsdk
- object-storage-cloud-driver-oss
- 2.0.0.20221115-SNAPSHOT
-
-
-
- com.alipay.cloudsdk
- object-storage-cloud-driver-minio
- 2.0.0.20221115-SNAPSHOT
-
-
-
- com.alipay.cloudsdk
- object-storage-cloud-driver-s3
- 2.0.0.20221213-SNAPSHOT
-
-
- io.netty
- netty-transport
-
-
- io.netty
- netty-transport-classes-epoll
-
-
- io.netty
- netty-handler
-
-
- io.netty
- netty-common
-
-
- io.netty
- netty-codec
-
-
- io.netty
- netty-codec-http
-
-
- io.netty
- netty-codec-http2
-
-
- io.netty
- netty-buffer
-
-
-
-
-
com.opencsv
opencsv
diff --git a/reasoner/runner/local-runner/pom.xml b/reasoner/runner/local-runner/pom.xml
new file mode 100644
index 00000000..15e4f8b4
--- /dev/null
+++ b/reasoner/runner/local-runner/pom.xml
@@ -0,0 +1,119 @@
+
+
+
+ 4.0.0
+
+ com.antgroup.openspg.reasoner
+ reasoner-parent
+ 0.0.1-SNAPSHOT
+ ../../pom.xml
+
+
+ reasoner-local-runner
+
+
+ 8
+ 8
+
+
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-common
+
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-lube-api
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-kgdsl-parser
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-lube-physical
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-openspg-catalog
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-runner-common
+
+
+ org.apache.hive
+ hive-jdbc
+
+
+ com.alipay.cloudsdk
+ object-storage-cloud-driver-minio
+
+
+ com.alipay.cloudsdk
+ object-storage-cloud-driver-s3
+
+
+ org.apache.parquet
+ parquet-hadoop-bundle
+
+
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-warehouse-common
+
+
+
+ org.scala-lang
+ scala-compiler
+
+
+ org.scala-lang
+ scala-reflect
+
+
+ org.scala-lang
+ scala-library
+
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ org.projectlombok
+ lombok
+
+
+ junit
+ junit
+
+
+ org.scalatest
+ scalatest_${scala.binary.version}
+
+
+ org.apache.hadoop
+ hadoop-common
+
+
+ com.antgroup.openspg.reasoner
+ reasoner-common
+
+
+
+
diff --git a/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/KGReasonerLocalRunner.java b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/KGReasonerLocalRunner.java
new file mode 100644
index 00000000..61c3d15c
--- /dev/null
+++ b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/KGReasonerLocalRunner.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2023 Ant Group CO., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied.
+ */
+
+package com.antgroup.openspg.reasoner.runner.local;
+
+import com.antgroup.openspg.reasoner.catalog.CatalogFactory;
+import com.antgroup.openspg.reasoner.common.constants.Constants;
+import com.antgroup.openspg.reasoner.common.graph.vertex.IVertexId;
+import com.antgroup.openspg.reasoner.graphstate.GraphState;
+import com.antgroup.openspg.reasoner.graphstate.impl.MemGraphState;
+import com.antgroup.openspg.reasoner.lube.catalog.Catalog;
+import com.antgroup.openspg.reasoner.lube.parser.ParserInterface;
+import com.antgroup.openspg.reasoner.lube.physical.operators.PhysicalOperator;
+import com.antgroup.openspg.reasoner.lube.physical.operators.Select;
+import com.antgroup.openspg.reasoner.lube.physical.operators.Start;
+import com.antgroup.openspg.reasoner.lube.physical.util.PhysicalOperatorUtil;
+import com.antgroup.openspg.reasoner.parser.KgDslParser;
+import com.antgroup.openspg.reasoner.rule.RuleRunner;
+import com.antgroup.openspg.reasoner.runner.ConfigKey;
+import com.antgroup.openspg.reasoner.runner.local.impl.LocalPropertyGraph;
+import com.antgroup.openspg.reasoner.runner.local.impl.LocalReasonerSession;
+import com.antgroup.openspg.reasoner.runner.local.impl.LocalRunnerThreadPool;
+import com.antgroup.openspg.reasoner.runner.local.load.graph.AbstractLocalGraphLoader;
+import com.antgroup.openspg.reasoner.runner.local.model.LocalReasonerResult;
+import com.antgroup.openspg.reasoner.runner.local.model.LocalReasonerTask;
+import com.antgroup.openspg.reasoner.runner.local.rdg.LocalRDG;
+import com.antgroup.openspg.reasoner.runner.local.rdg.LocalRow;
+import com.antgroup.openspg.reasoner.runner.local.rdg.TypeTags;
+import com.antgroup.openspg.reasoner.util.Convert2ScalaUtil;
+import com.antgroup.openspg.reasoner.utils.RunnerUtil;
+import com.google.common.collect.Lists;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import scala.Tuple2;
+import scala.collection.JavaConversions;
+
+@Slf4j
+public class KGReasonerLocalRunner {
+
+ /** run dsl task on local runner */
+ public LocalReasonerResult run(LocalReasonerTask task) {
+ try {
+ return doRun(task);
+ } catch (Throwable e) {
+ log.error("KGReasonerLocalRunner,error", e);
+ return new LocalReasonerResult("KGReasonerLocalRunner,error " + e.getMessage());
+ }
+ }
+
+ private LocalReasonerResult doRun(LocalReasonerTask task) {
+ // load graph
+ GraphState graphState = loadGraph(task);
+
+ // plan
+ LocalReasonerSession session = task.getSession();
+ List> dslDagList = task.getDslDagList();
+ if (CollectionUtils.isEmpty(dslDagList)) {
+ if (StringUtils.isEmpty(task.getDsl())) {
+ throw new RuntimeException("please provide dsl");
+ }
+
+ // create catalog
+ Catalog catalog = task.getCatalog();
+ if (null == catalog) {
+ catalog = CatalogFactory.createCatalog(task.getParams(), task.getConnInfo());
+ catalog.init();
+ }
+
+ if (!task.getParams().containsKey(Constants.START_ALIAS)
+ && !task.getParams().containsKey(Constants.START_LABEL)
+ && task.getStartIdList() != null
+ && task.getStartIdList().size() > 0) {
+ task.getParams().put(Constants.START_LABEL, task.getStartIdList().get(0)._2);
+ }
+ ParserInterface parser = new KgDslParser();
+ session = new LocalReasonerSession(parser, catalog, TypeTags.rdgTypeTag(), graphState);
+ dslDagList =
+ Lists.newArrayList(
+ JavaConversions.asJavaCollection(
+ session.plan(
+ task.getDsl(), Convert2ScalaUtil.toScalaImmutableMap(task.getParams()))));
+ }
+
+ LocalReasonerResult result = null;
+ for (int i = 0; i < dslDagList.size(); ++i) {
+ Map idFilterMaps =
+ JavaConversions.mapAsJavaMap(session.getIdFilterParameters());
+ Map taskRunningContext =
+ RunnerUtil.getTaskRunningContext(session, task.getParams());
+
+ RuleRunner.getInstance().putRuleRunningContext(task.getId(), taskRunningContext);
+ boolean isLastDsl = (i + 1 == dslDagList.size());
+
+ if (isLastDsl) {
+ Start start =
+ PhysicalOperatorUtil.getStartOp(
+ dslDagList.get(i),
+ com.antgroup.openspg.reasoner.runner.local.rdg.TypeTags.rdgTypeTag());
+
+ if (idFilterMaps != null && idFilterMaps.size() != 0) {
+ String startAliasName = start.alias();
+ if (idFilterMaps.containsKey(startAliasName)) {
+ String parameter = idFilterMaps.get(startAliasName);
+ Object obj = taskRunningContext.get(parameter);
+ List originIds = new ArrayList<>();
+ if (obj instanceof Object[]) {
+ Object[] ids = (Object[]) obj;
+ for (Object id : ids) {
+ originIds.add(id.toString());
+ }
+ } else {
+ originIds.add(obj.toString());
+ }
+ List> startIdList = new ArrayList<>();
+
+ for (String type : JavaConversions.setAsJavaSet(start.types())) {
+ for (Object id : originIds) {
+ startIdList.add(new Tuple2<>(id.toString(), type));
+ }
+ }
+ task.setStartIdList(startIdList);
+ }
+ }
+ }
+ PhysicalOperator physicalOpRoot = dslDagList.get(i);
+ LocalPropertyGraph localPropertyGraph =
+ (LocalPropertyGraph)
+ physicalOpRoot.context().graphSession().getGraph(Catalog.defaultGraphName());
+ localPropertyGraph.setTask(task);
+ localPropertyGraph.setThreadPoolExecutor(LocalRunnerThreadPool.getThreadPoolExecutor(task));
+ localPropertyGraph.setExecutorTimeoutMs(task.getExecutorTimeoutMs());
+ if (CollectionUtils.isNotEmpty(task.getStartIdList()) && isLastDsl) {
+ localPropertyGraph.setStartIdTuple2List(task.getStartIdList());
+ } else {
+ localPropertyGraph.setStartIdTuple2List(null);
+ }
+
+ if (physicalOpRoot instanceof Select) {
+ String isGraphOutput =
+ String.valueOf(
+ task.getParams().computeIfAbsent(ConfigKey.KG_REASONER_OUTPUT_GRAPH, k -> "false"));
+ if ("true".equals(isGraphOutput)) {
+ LocalRDG rdg = ((Select) physicalOpRoot).in().rdg();
+ result = rdg.getRDGGraph();
+ } else {
+ LocalRow row = (LocalRow) ((Select) physicalOpRoot).row();
+ result = row.getResult();
+ }
+ } else {
+ LocalRDG rdg = physicalOpRoot.rdg();
+ result = rdg.getResult();
+ }
+ log.info("dsl,index=" + i + ",result=" + result.toString());
+ }
+
+ return result;
+ }
+
+ protected GraphState loadGraph(LocalReasonerTask task) {
+ GraphState graphState = task.getGraphState();
+ if (null != graphState) {
+ return graphState;
+ }
+
+ String graphLoadClass = task.getGraphLoadClass();
+ MemGraphState memGraphState = new MemGraphState();
+ AbstractLocalGraphLoader graphLoader;
+ try {
+ graphLoader =
+ (AbstractLocalGraphLoader) Class.forName(graphLoadClass).getConstructor().newInstance();
+ } catch (Exception e) {
+ throw new RuntimeException("can not create graph loader from name " + graphLoadClass, e);
+ }
+ graphLoader.setGraphState(memGraphState);
+ graphLoader.load();
+ task.setGraphState(memGraphState);
+ return memGraphState;
+ }
+}
diff --git a/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/LocalRunnerMain.java b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/LocalRunnerMain.java
new file mode 100644
index 00000000..1728fd42
--- /dev/null
+++ b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/LocalRunnerMain.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2023 Ant Group CO., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied.
+ */
+
+package com.antgroup.openspg.reasoner.runner.local;
+
+import com.alibaba.fastjson.JSON;
+import com.antgroup.openspg.reasoner.runner.local.model.LocalReasonerResult;
+import com.antgroup.openspg.reasoner.runner.local.model.LocalReasonerTask;
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class LocalRunnerMain {
+
+ /** result */
+ public static LocalReasonerResult result = null;
+
+ /** KGReasoner main */
+ public static void main(String[] args) {
+ String taskInfoJson = new String(Base64.getDecoder().decode(args[0]), StandardCharsets.UTF_8);
+ LocalReasonerTask task = JSON.parseObject(taskInfoJson, LocalReasonerTask.class);
+ KGReasonerLocalRunner runner = new KGReasonerLocalRunner();
+ result = runner.run(task);
+ if (null != result) {
+ log.info(result.toString());
+ }
+ }
+}
diff --git a/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/impl/LocalPropertyGraph.java b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/impl/LocalPropertyGraph.java
new file mode 100644
index 00000000..aa9c6a02
--- /dev/null
+++ b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/impl/LocalPropertyGraph.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright 2023 Ant Group CO., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied.
+ */
+
+package com.antgroup.openspg.reasoner.runner.local.impl;
+
+import com.antgroup.openspg.reasoner.common.graph.property.IProperty;
+import com.antgroup.openspg.reasoner.common.graph.vertex.IVertex;
+import com.antgroup.openspg.reasoner.common.graph.vertex.IVertexId;
+import com.antgroup.openspg.reasoner.graphstate.GraphState;
+import com.antgroup.openspg.reasoner.kggraph.KgGraph;
+import com.antgroup.openspg.reasoner.lube.logical.RepeatPathVar;
+import com.antgroup.openspg.reasoner.lube.physical.PropertyGraph;
+import com.antgroup.openspg.reasoner.recorder.EmptyRecorder;
+import com.antgroup.openspg.reasoner.recorder.IExecutionRecorder;
+import com.antgroup.openspg.reasoner.runner.ConfigKey;
+import com.antgroup.openspg.reasoner.runner.local.model.LocalReasonerTask;
+import com.antgroup.openspg.reasoner.runner.local.rdg.LocalRDG;
+import com.google.common.collect.Lists;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.ThreadPoolExecutor;
+import org.apache.commons.collections4.CollectionUtils;
+import scala.Tuple2;
+import scala.collection.JavaConversions;
+import scala.collection.immutable.Set;
+
+public class LocalPropertyGraph implements PropertyGraph {
+ /** task info */
+ private LocalReasonerTask task;
+
+ /** start id from input */
+ private List> startIdTuple2List;
+
+ /** graph state */
+ private final GraphState graphState;
+
+ /** executor */
+ private ThreadPoolExecutor threadPoolExecutor;
+
+ /** executor timeout ms */
+ private long executorTimeoutMs = 40 * 1000;
+
+ /** default path limit */
+ private long defaultPathLimit = 3000;
+
+ /** local property graph */
+ public LocalPropertyGraph(GraphState graphState) {
+ this.graphState = graphState;
+ }
+
+ @Override
+ public LocalRDG createRDG(String alias, Set types) {
+ LocalRDG result =
+ new LocalRDG(
+ graphState,
+ getStartIdList(types),
+ threadPoolExecutor,
+ executorTimeoutMs,
+ alias,
+ getTaskId(),
+ getExecutionRecorder());
+ result.setMaxPathLimit(getMaxPathLimit());
+ result.setStrictMaxPathLimit(getStrictMaxPathLimit());
+ return result;
+ }
+
+ @Override
+ public LocalRDG createRDG(String alias, LocalRDG rdg) {
+ java.util.Set startIdSet = new HashSet<>();
+ for (KgGraph kgGraph : rdg.getKgGraphList()) {
+ List> vertexList = kgGraph.getVertex(alias);
+ for (IVertex vertex : vertexList) {
+ startIdSet.add(vertex.getId());
+ }
+ }
+ LocalRDG result =
+ new LocalRDG(
+ graphState,
+ Lists.newArrayList(startIdSet),
+ threadPoolExecutor,
+ executorTimeoutMs,
+ alias,
+ getTaskId(),
+ getExecutionRecorder());
+ result.setMaxPathLimit(getMaxPathLimit());
+ result.setStrictMaxPathLimit(getStrictMaxPathLimit());
+ return result;
+ }
+
+ @Override
+ public LocalRDG createRDGFromPath(RepeatPathVar repeatVar, String alias, LocalRDG rdg) {
+ return null;
+ }
+
+ private String getTaskId() {
+ if (task == null) {
+ return "";
+ }
+ return task.getId();
+ }
+
+ private List getStartIdList(Set types) {
+ if (CollectionUtils.isNotEmpty(this.startIdTuple2List)) {
+ List startIdList = new ArrayList<>();
+ for (Tuple2 tuple2 : this.startIdTuple2List) {
+ startIdList.add(IVertexId.from(tuple2._1(), tuple2._2()));
+ }
+ return startIdList;
+ }
+ List startIdList = new ArrayList<>();
+ Iterator> it =
+ this.graphState.getVertexIterator(JavaConversions.setAsJavaSet(types));
+ while (it.hasNext()) {
+ IVertex vertex = it.next();
+ startIdList.add(vertex.getId());
+ }
+ return startIdList;
+ }
+
+ /**
+ * Setter method for property startIdList.
+ *
+ * @param startIdTuple2List value to be assigned to property startIdList
+ */
+ public void setStartIdTuple2List(List> startIdTuple2List) {
+ this.startIdTuple2List = startIdTuple2List;
+ }
+
+ /**
+ * Setter method for property threadPoolExecutor.
+ *
+ * @param threadPoolExecutor value to be assigned to property threadPoolExecutor
+ */
+ public void setThreadPoolExecutor(ThreadPoolExecutor threadPoolExecutor) {
+ this.threadPoolExecutor = threadPoolExecutor;
+ }
+
+ /**
+ * Setter method for property timeoutMillSeconds.
+ *
+ * @param executorTimeoutMs value to be assigned to property timeoutMillSeconds
+ */
+ public void setExecutorTimeoutMs(long executorTimeoutMs) {
+ this.executorTimeoutMs = executorTimeoutMs;
+ }
+
+ /** max path limit */
+ private Long getMaxPathLimit() {
+ Object maxPathLimitObj = null;
+ if (null != task && null != this.task.getParams()) {
+ maxPathLimitObj = this.task.getParams().get(ConfigKey.KG_REASONER_MAX_PATH_LIMIT);
+ }
+ if (null == maxPathLimitObj) {
+ return defaultPathLimit;
+ }
+ return 2 * Long.parseLong(String.valueOf(maxPathLimitObj));
+ }
+
+ /** return strict max path limit */
+ private Long getStrictMaxPathLimit() {
+ Object maxPathLimitObj = null;
+ if (null != task && null != this.task.getParams()) {
+ maxPathLimitObj = this.task.getParams().get(ConfigKey.KG_REASONER_STRICT_MAX_PATH_THRESHOLD);
+ }
+ if (null == maxPathLimitObj) {
+ return null;
+ }
+ return Long.parseLong(String.valueOf(maxPathLimitObj));
+ }
+
+ private IExecutionRecorder getExecutionRecorder() {
+ if (null == task) {
+ return new EmptyRecorder();
+ }
+ return task.getExecutionRecorder();
+ }
+
+ /**
+ * Setter method for property task.
+ *
+ * @param task value to be assigned to property task
+ */
+ public void setTask(LocalReasonerTask task) {
+ this.task = task;
+ }
+}
diff --git a/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/impl/LocalReasonerSession.java b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/impl/LocalReasonerSession.java
new file mode 100644
index 00000000..636c9822
--- /dev/null
+++ b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/impl/LocalReasonerSession.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2023 Ant Group CO., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied.
+ */
+
+package com.antgroup.openspg.reasoner.runner.local.impl;
+
+import com.antgroup.openspg.reasoner.common.graph.vertex.IVertexId;
+import com.antgroup.openspg.reasoner.graphstate.GraphState;
+import com.antgroup.openspg.reasoner.graphstate.impl.MemGraphState;
+import com.antgroup.openspg.reasoner.lube.catalog.Catalog;
+import com.antgroup.openspg.reasoner.lube.parser.ParserInterface;
+import com.antgroup.openspg.reasoner.lube.physical.PropertyGraph;
+import com.antgroup.openspg.reasoner.runner.local.rdg.LocalRDG;
+import com.antgroup.openspg.reasoner.session.KGReasonerSession;
+import com.antgroup.openspg.reasoner.warehouse.common.config.GraphLoaderConfig;
+import scala.reflect.api.TypeTags.TypeTag;
+
+public class LocalReasonerSession extends KGReasonerSession {
+
+ private final GraphState graphState;
+
+ /** session implement */
+ public LocalReasonerSession(ParserInterface parser, Catalog catalog, TypeTag typeTag) {
+ super(parser, catalog, typeTag);
+ this.graphState = new MemGraphState();
+ }
+
+ /** session implement */
+ public LocalReasonerSession(
+ ParserInterface parser,
+ Catalog catalog,
+ TypeTag typeTag,
+ GraphState graphState) {
+ super(parser, catalog, typeTag);
+ this.graphState = graphState;
+ }
+
+ @Override
+ public PropertyGraph loadGraph(GraphLoaderConfig graphLoaderConfig) {
+ return new LocalPropertyGraph(this.graphState);
+ }
+}
diff --git a/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/impl/LocalRunnerThreadPool.java b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/impl/LocalRunnerThreadPool.java
new file mode 100644
index 00000000..ca72ea72
--- /dev/null
+++ b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/impl/LocalRunnerThreadPool.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2023 Ant Group CO., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied.
+ */
+
+package com.antgroup.openspg.reasoner.runner.local.impl;
+
+import com.antgroup.openspg.reasoner.runner.local.model.LocalReasonerTask;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy;
+import java.util.concurrent.TimeUnit;
+
+public class LocalRunnerThreadPool {
+
+ private LocalRunnerThreadPool() {}
+
+ /**
+ * when the number of threads is greater than the core, this is the maximum time that excess idle
+ * threads will wait for new tasks before terminating.
+ */
+ private static final long KEEP_ALIVE_TIME_SECONDS = 5 * 60;
+
+ private static final int DEFAULT_CORE_POOL_SIZE = 10;
+ private static final int DEFAULT_MAXIMUM_POOL_SIZE = 30;
+
+ private static final int WORK_QUEUE_SIZE = 1000;
+
+ private static volatile ThreadPoolExecutor DEFAULT_THREAD_POOL_EXECUTOR = null;
+
+ /** get thread pool */
+ public static ThreadPoolExecutor getThreadPoolExecutor(LocalReasonerTask task) {
+ if (null == task || null == task.getThreadPoolExecutor()) {
+ return getDefaultThreadPoolExecutor();
+ }
+ return task.getThreadPoolExecutor();
+ }
+
+ private static ThreadPoolExecutor getDefaultThreadPoolExecutor() {
+ if (null != DEFAULT_THREAD_POOL_EXECUTOR) {
+ return DEFAULT_THREAD_POOL_EXECUTOR;
+ }
+ synchronized (LocalRunnerThreadPool.class) {
+ if (null != DEFAULT_THREAD_POOL_EXECUTOR) {
+ return DEFAULT_THREAD_POOL_EXECUTOR;
+ }
+ DEFAULT_THREAD_POOL_EXECUTOR =
+ new ThreadPoolExecutor(
+ DEFAULT_CORE_POOL_SIZE,
+ DEFAULT_MAXIMUM_POOL_SIZE,
+ KEEP_ALIVE_TIME_SECONDS,
+ TimeUnit.SECONDS,
+ new LinkedBlockingQueue<>(WORK_QUEUE_SIZE),
+ runnable -> new Thread(runnable, "LocalRDG-" + nextThreadNum()),
+ new CallerRunsPolicy());
+ }
+ return DEFAULT_THREAD_POOL_EXECUTOR;
+ }
+
+ private static int threadInitNumber = 0;
+
+ private static synchronized int nextThreadNum() {
+ return threadInitNumber++;
+ }
+}
diff --git a/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/load/graph/AbstractLocalGraphLoader.java b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/load/graph/AbstractLocalGraphLoader.java
new file mode 100644
index 00000000..72b6020a
--- /dev/null
+++ b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/load/graph/AbstractLocalGraphLoader.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2023 Ant Group CO., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied.
+ */
+
+package com.antgroup.openspg.reasoner.runner.local.load.graph;
+
+import com.antgroup.openspg.reasoner.common.graph.edge.IEdge;
+import com.antgroup.openspg.reasoner.common.graph.property.IProperty;
+import com.antgroup.openspg.reasoner.common.graph.vertex.IVertex;
+import com.antgroup.openspg.reasoner.common.graph.vertex.IVertexId;
+import com.antgroup.openspg.reasoner.graphstate.GraphState;
+import com.antgroup.openspg.reasoner.graphstate.generator.AbstractGraphGenerator;
+import java.util.List;
+import java.util.Map;
+import scala.Tuple2;
+
+public abstract class AbstractLocalGraphLoader extends AbstractGraphGenerator {
+
+ private GraphState graphState;
+
+ /** set graph state */
+ public void setGraphState(GraphState graphState) {
+ this.graphState = graphState;
+ }
+
+ /** load graph */
+ public void load() {
+ List> vertexList = getVertexList();
+ for (IVertex vertex : vertexList) {
+ this.graphState.addVertex(vertex);
+ }
+
+ Map>, List>>>
+ edgeMap = getEdgeAggregated();
+ for (IVertexId id : edgeMap.keySet()) {
+ List> inEdgeList = edgeMap.get(id)._1();
+ List> outEdgeList = edgeMap.get(id)._2();
+ this.graphState.addEdges(id, inEdgeList, outEdgeList);
+ }
+ }
+}
diff --git a/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/loader/EmptyLocalGraphLoader.java b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/loader/EmptyLocalGraphLoader.java
new file mode 100644
index 00000000..911c42b4
--- /dev/null
+++ b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/loader/EmptyLocalGraphLoader.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2023 Ant Group CO., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied.
+ */
+
+package com.antgroup.openspg.reasoner.runner.local.loader;
+
+import com.antgroup.openspg.reasoner.common.graph.edge.IEdge;
+import com.antgroup.openspg.reasoner.common.graph.property.IProperty;
+import com.antgroup.openspg.reasoner.common.graph.vertex.IVertex;
+import com.antgroup.openspg.reasoner.runner.local.load.graph.AbstractLocalGraphLoader;
+import java.util.ArrayList;
+import java.util.List;
+
+public class EmptyLocalGraphLoader extends AbstractLocalGraphLoader {
+ @Override
+ public List> genVertexList() {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public List> genEdgeList() {
+ return new ArrayList<>();
+ }
+}
diff --git a/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/loader/MockLocalGraphLoader.java b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/loader/MockLocalGraphLoader.java
new file mode 100644
index 00000000..c2a5441d
--- /dev/null
+++ b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/loader/MockLocalGraphLoader.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2023 Ant Group CO., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied.
+ */
+
+package com.antgroup.openspg.reasoner.runner.local.loader;
+
+import com.antgroup.openspg.reasoner.common.graph.edge.IEdge;
+import com.antgroup.openspg.reasoner.common.graph.property.IProperty;
+import com.antgroup.openspg.reasoner.common.graph.vertex.IVertex;
+import com.antgroup.openspg.reasoner.runner.local.load.graph.AbstractLocalGraphLoader;
+import java.util.ArrayList;
+import java.util.List;
+
+public class MockLocalGraphLoader extends AbstractLocalGraphLoader {
+ private String demoGraphStr;
+
+ /**
+ * mock local graph loader
+ *
+ * @param demoGraphStr
+ */
+ public MockLocalGraphLoader(String demoGraphStr) {
+ this.demoGraphStr = demoGraphStr;
+ }
+
+ @Override
+ public String getDemoGraph() {
+ return this.demoGraphStr;
+ }
+
+ @Override
+ public List> genVertexList() {
+ return new ArrayList<>();
+ }
+
+ @Override
+ public List> genEdgeList() {
+ return new ArrayList<>();
+ }
+}
diff --git a/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/model/LocalReasonerResult.java b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/model/LocalReasonerResult.java
new file mode 100644
index 00000000..55a08722
--- /dev/null
+++ b/reasoner/runner/local-runner/src/main/java/com/antgroup/openspg/reasoner/runner/local/model/LocalReasonerResult.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright 2023 Ant Group CO., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied.
+ */
+
+package com.antgroup.openspg.reasoner.runner.local.model;
+
+import com.antgroup.openspg.reasoner.common.graph.edge.IEdge;
+import com.antgroup.openspg.reasoner.common.graph.property.IProperty;
+import com.antgroup.openspg.reasoner.common.graph.vertex.IVertex;
+import com.antgroup.openspg.reasoner.common.graph.vertex.IVertexId;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+
+public class LocalReasonerResult {
+
+ private final boolean graphResult;
+
+ private final String errMsg;
+
+ // select result
+ private final List columns;
+ private final List