fix(builder): update version 0.5.1 #andy (#407)

This commit is contained in:
Andy 2024-11-21 20:00:04 -08:00 committed by GitHub
parent 783825700f
commit 918a1fb9ab
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
27 changed files with 551 additions and 306 deletions

View File

@ -30,6 +30,8 @@ import org.jgrapht.graph.builder.GraphTypeBuilder;
@AllArgsConstructor @AllArgsConstructor
public class LogicalPlan implements Serializable { public class LogicalPlan implements Serializable {
private static final long serialVersionUID = -4487139289740223319L;
/** DAG (Directed Acyclic Graph) of the logical execution plan. */ /** DAG (Directed Acyclic Graph) of the logical execution plan. */
private final Graph<BaseLogicalNode<?>, DefaultEdge> dag; private final Graph<BaseLogicalNode<?>, DefaultEdge> dag;

View File

@ -30,6 +30,8 @@ import org.jgrapht.graph.builder.GraphTypeBuilder;
@AllArgsConstructor @AllArgsConstructor
public class PhysicalPlan implements Serializable { public class PhysicalPlan implements Serializable {
private static final long serialVersionUID = -5866035535857620657L;
/** DAG (Directed Acyclic Graph) of the physical execution plan. */ /** DAG (Directed Acyclic Graph) of the physical execution plan. */
private final Graph<BaseProcessor<?>, DefaultEdge> dag; private final Graph<BaseProcessor<?>, DefaultEdge> dag;

View File

@ -32,6 +32,7 @@ import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -41,14 +42,16 @@ public class LLMNlExtractProcessor extends BasePythonProcessor<LLMNlExtractNodeC
private ExecuteNode node; private ExecuteNode node;
private static final ThreadPoolExecutor executor = private static final RejectedExecutionHandler handler =
new ThreadPoolExecutor( (r, executor) -> {
30, try {
60, executor.getQueue().put(r);
60 * 60, } catch (InterruptedException e) {
TimeUnit.SECONDS, Thread.currentThread().interrupt();
new LinkedBlockingQueue<>(1000), }
new ThreadPoolExecutor.CallerRunsPolicy()); };
private static ThreadPoolExecutor executor;
public LLMNlExtractProcessor(String id, String name, LLMNlExtractNodeConfig config) { public LLMNlExtractProcessor(String id, String name, LLMNlExtractNodeConfig config) {
super(id, name, config); super(id, name, config);
@ -58,6 +61,16 @@ public class LLMNlExtractProcessor extends BasePythonProcessor<LLMNlExtractNodeC
public void doInit(BuilderContext context) throws BuilderException { public void doInit(BuilderContext context) throws BuilderException {
super.doInit(context); super.doInit(context);
this.node = context.getExecuteNodes().get(getId()); this.node = context.getExecuteNodes().get(getId());
if (executor == null) {
executor =
new ThreadPoolExecutor(
context.getModelExecuteNum(),
context.getModelExecuteNum(),
60 * 60,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(100),
handler);
}
} }
@Override @Override

View File

@ -146,6 +146,10 @@ public class ParagraphSplitProcessor extends BasePythonProcessor<ParagraphSplitN
case "json": case "json":
className = "JSONReader"; className = "JSONReader";
break; break;
case "doc":
case "docx":
className = "DocxReader";
break;
} }
node.addTraceLog("invoke chunk operator:%s", className); node.addTraceLog("invoke chunk operator:%s", className);
pythonInterpreter.exec("from kag.builder.component.reader import " + className); pythonInterpreter.exec("from kag.builder.component.reader import " + className);

View File

@ -93,7 +93,7 @@ public class CommonUtils {
return records; return records;
} }
private static String labelPrefix(String namespace, String label) { public static String labelPrefix(String namespace, String label) {
if (label.contains(DOT)) { if (label.contains(DOT)) {
return label; return label;
} }

View File

@ -26,6 +26,8 @@ import lombok.experimental.Accessors;
@Accessors(chain = true) @Accessors(chain = true)
public class BuilderContext implements Serializable { public class BuilderContext implements Serializable {
private static final long serialVersionUID = 2446709406202543546L;
private long projectId; private long projectId;
private String project; private String project;
private String jobName; private String jobName;
@ -41,6 +43,7 @@ public class BuilderContext implements Serializable {
private int batchSize = 1; private int batchSize = 1;
private int parallelism = 1; private int parallelism = 1;
private boolean enableLeadTo; private boolean enableLeadTo;
private Integer modelExecuteNum = 5;
private Map<String, ExecuteNode> executeNodes; private Map<String, ExecuteNode> executeNodes;
private String schemaUrl; private String schemaUrl;

View File

@ -39,10 +39,12 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Consumer; import java.util.function.Consumer;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@Slf4j @Slf4j
public class Neo4jSinkWriter extends BaseSinkWriter<Neo4jSinkNodeConfig> { public class Neo4jSinkWriter extends BaseSinkWriter<Neo4jSinkNodeConfig> {
@ -53,8 +55,16 @@ public class Neo4jSinkWriter extends BaseSinkWriter<Neo4jSinkNodeConfig> {
private Neo4jStoreClient client; private Neo4jStoreClient client;
private Project project; private Project project;
private static final String DOT = "."; private static final String DOT = ".";
ExecutorService nodeExecutor; ExecutorService executor;
ExecutorService edgeExecutor;
RejectedExecutionHandler handler =
(r, executor) -> {
try {
executor.getQueue().put(r);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
};
public Neo4jSinkWriter(String id, String name, Neo4jSinkNodeConfig config) { public Neo4jSinkWriter(String id, String name, Neo4jSinkNodeConfig config) {
super(id, name, config); super(id, name, config);
@ -69,22 +79,14 @@ public class Neo4jSinkWriter extends BaseSinkWriter<Neo4jSinkNodeConfig> {
} }
client = new Neo4jStoreClient(context.getGraphStoreUrl()); client = new Neo4jStoreClient(context.getGraphStoreUrl());
project = JSON.parseObject(context.getProject(), Project.class); project = JSON.parseObject(context.getProject(), Project.class);
nodeExecutor = executor =
new ThreadPoolExecutor( new ThreadPoolExecutor(
NUM_THREADS, NUM_THREADS,
NUM_THREADS, NUM_THREADS,
2 * 60L, 2 * 60L,
TimeUnit.SECONDS, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1000), new LinkedBlockingQueue<>(100),
new ThreadPoolExecutor.CallerRunsPolicy()); handler);
edgeExecutor =
new ThreadPoolExecutor(
NUM_THREADS,
NUM_THREADS,
2 * 60L,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1000),
new ThreadPoolExecutor.CallerRunsPolicy());
} }
@Override @Override
@ -115,7 +117,7 @@ public class Neo4jSinkWriter extends BaseSinkWriter<Neo4jSinkNodeConfig> {
try { try {
node.addTraceLog("Start Writer Nodes processor..."); node.addTraceLog("Start Writer Nodes processor...");
List<Future<Void>> nodeFutures = List<Future<Void>> nodeFutures =
submitTasks(nodeExecutor, subGraphRecord.getResultNodes(), this::writeNode); submitTasks(executor, subGraphRecord.getResultNodes(), this::writeNode);
awaitAllTasks(nodeFutures); awaitAllTasks(nodeFutures);
node.addTraceLog("Writer Nodes succeed"); node.addTraceLog("Writer Nodes succeed");
} catch (InterruptedException | ExecutionException e) { } catch (InterruptedException | ExecutionException e) {
@ -125,7 +127,7 @@ public class Neo4jSinkWriter extends BaseSinkWriter<Neo4jSinkNodeConfig> {
try { try {
node.addTraceLog("Start Writer Edges processor..."); node.addTraceLog("Start Writer Edges processor...");
List<Future<Void>> edgeFutures = List<Future<Void>> edgeFutures =
submitTasks(edgeExecutor, subGraphRecord.getResultEdges(), this::writeEdge); submitTasks(executor, subGraphRecord.getResultEdges(), this::writeEdge);
awaitAllTasks(edgeFutures); awaitAllTasks(edgeFutures);
node.addTraceLog("Writer Edges succeed"); node.addTraceLog("Writer Edges succeed");
} catch (InterruptedException | ExecutionException e) { } catch (InterruptedException | ExecutionException e) {
@ -174,7 +176,10 @@ public class Neo4jSinkWriter extends BaseSinkWriter<Neo4jSinkNodeConfig> {
try { try {
Long statr = System.currentTimeMillis(); Long statr = System.currentTimeMillis();
RecordAlterOperationEnum operation = context.getOperation(); RecordAlterOperationEnum operation = context.getOperation();
if (node.getId() == null || node.getName() == null) { if (StringUtils.isBlank(node.getId())
|| StringUtils.isBlank(node.getName())
|| StringUtils.isBlank(node.getLabel())) {
log.info(String.format("write Node ignore node:%s", JSON.toJSONString(node)));
return; return;
} }
String label = labelPrefix(node.getLabel()); String label = labelPrefix(node.getLabel());
@ -212,7 +217,10 @@ public class Neo4jSinkWriter extends BaseSinkWriter<Neo4jSinkNodeConfig> {
try { try {
Long statr = System.currentTimeMillis(); Long statr = System.currentTimeMillis();
RecordAlterOperationEnum operation = context.getOperation(); RecordAlterOperationEnum operation = context.getOperation();
if (edge.getFrom() == null || edge.getTo() == null) { if (StringUtils.isBlank(edge.getFrom())
|| StringUtils.isBlank(edge.getTo())
|| StringUtils.isBlank(edge.getLabel())) {
log.info(String.format("write Edge ignore edge:%s", JSON.toJSONString(edge)));
return; return;
} }
List<EdgeRecord> edgeRecords = Lists.newArrayList(); List<EdgeRecord> edgeRecords = Lists.newArrayList();

View File

@ -37,7 +37,7 @@ public class Neo4jDriverManager {
Config config = Config config =
Config.builder() Config.builder()
.withMaxConnectionPoolSize(200) .withMaxConnectionPoolSize(200)
.withMaxConnectionLifetime(2, TimeUnit.HOURS) .withMaxConnectionLifetime(4, TimeUnit.HOURS)
.withMaxTransactionRetryTime(300, TimeUnit.SECONDS) .withMaxTransactionRetryTime(300, TimeUnit.SECONDS)
.withConnectionAcquisitionTimeout(300, TimeUnit.SECONDS) .withConnectionAcquisitionTimeout(300, TimeUnit.SECONDS)
.build(); .build();

View File

@ -13,6 +13,7 @@
package com.antgroup.openspg.common.util.neo4j; package com.antgroup.openspg.common.util.neo4j;
import com.antgroup.openspg.common.util.Md5Utils;
import com.antgroup.openspg.common.util.tuple.Tuple2; import com.antgroup.openspg.common.util.tuple.Tuple2;
import com.antgroup.openspg.core.schema.model.predicate.IndexTypeEnum; import com.antgroup.openspg.core.schema.model.predicate.IndexTypeEnum;
import com.antgroup.openspg.core.schema.model.predicate.Property; import com.antgroup.openspg.core.schema.model.predicate.Property;
@ -21,6 +22,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -35,8 +37,6 @@ import org.neo4j.driver.summary.ResultSummary;
@Slf4j @Slf4j
public class Neo4jGraphUtils { public class Neo4jGraphUtils {
private static final String ALL_GRAPH = "allGraph";
private Driver driver; private Driver driver;
private String database; private String database;
private Neo4jIndexUtils neo4jIndex; private Neo4jIndexUtils neo4jIndex;
@ -127,7 +127,7 @@ public class Neo4jGraphUtils {
return labels; return labels;
} }
public void createAllGraph() { public void createAllGraph(String allGraph) {
Session session = driver.session(SessionConfig.forDatabase(this.database)); Session session = driver.session(SessionConfig.forDatabase(this.database));
String existsQuery = String existsQuery =
String.format( String.format(
@ -135,14 +135,14 @@ public class Neo4jGraphUtils {
+ "WHERE exists " + "WHERE exists "
+ "CALL gds.graph.drop('%s') YIELD graphName " + "CALL gds.graph.drop('%s') YIELD graphName "
+ "RETURN graphName", + "RETURN graphName",
ALL_GRAPH, ALL_GRAPH); allGraph, allGraph);
Result result = session.run(existsQuery); Result result = session.run(existsQuery);
ResultSummary summary = result.consume(); ResultSummary summary = result.consume();
log.debug( log.debug(
"create pagerank graph exists graph_name: {} database: {} succeed " "create pagerank graph exists graph_name: {} database: {} succeed "
+ "executed: {} consumed: {}", + "executed: {} consumed: {}",
ALL_GRAPH, allGraph,
database, database,
summary.resultAvailableAfter(TimeUnit.MILLISECONDS), summary.resultAvailableAfter(TimeUnit.MILLISECONDS),
summary.resultConsumedAfter(TimeUnit.MILLISECONDS)); summary.resultConsumedAfter(TimeUnit.MILLISECONDS));
@ -152,13 +152,33 @@ public class Neo4jGraphUtils {
"CALL gds.graph.project('%s','*','*') " "CALL gds.graph.project('%s','*','*') "
+ "YIELD graphName, nodeCount AS nodes, relationshipCount AS rels " + "YIELD graphName, nodeCount AS nodes, relationshipCount AS rels "
+ "RETURN graphName, nodes, rels", + "RETURN graphName, nodes, rels",
ALL_GRAPH); allGraph);
result = session.run(projectQuery); result = session.run(projectQuery);
summary = result.consume(); summary = result.consume();
log.debug( log.debug(
"create pagerank graph graph_name: {} database: {} succeed " + "executed: {} consumed: {}", "create pagerank graph graph_name: {} database: {} succeed " + "executed: {} consumed: {}",
ALL_GRAPH, allGraph,
database,
summary.resultAvailableAfter(TimeUnit.MILLISECONDS),
summary.resultConsumedAfter(TimeUnit.MILLISECONDS));
}
public void dropAllGraph(String allGraph) {
Session session = driver.session(SessionConfig.forDatabase(this.database));
String existsQuery =
String.format(
"CALL gds.graph.exists('%s') YIELD exists "
+ "WHERE exists "
+ "CALL gds.graph.drop('%s') YIELD graphName "
+ "RETURN graphName",
allGraph, allGraph);
Result result = session.run(existsQuery);
ResultSummary summary = result.consume();
log.debug(
"drop pagerank graph graph_name: {} database: {} succeed executed: {} consumed: {}",
allGraph,
database, database,
summary.resultAvailableAfter(TimeUnit.MILLISECONDS), summary.resultAvailableAfter(TimeUnit.MILLISECONDS),
summary.resultConsumedAfter(TimeUnit.MILLISECONDS)); summary.resultConsumedAfter(TimeUnit.MILLISECONDS));
@ -167,12 +187,18 @@ public class Neo4jGraphUtils {
public List<Map<String, Object>> getPageRankScores( public List<Map<String, Object>> getPageRankScores(
List<Map<String, String>> startNodes, String targetType) { List<Map<String, String>> startNodes, String targetType) {
Session session = driver.session(SessionConfig.forDatabase(this.database)); Session session = driver.session(SessionConfig.forDatabase(this.database));
createAllGraph(); String allGraph = "allGraph_" + Md5Utils.md5Of(UUID.randomUUID().toString());
return session.writeTransaction(tx -> getPageRankScores(tx, startNodes, targetType)); createAllGraph(allGraph);
try {
return session.writeTransaction(
tx -> getPageRankScores(tx, allGraph, startNodes, targetType));
} finally {
dropAllGraph(allGraph);
}
} }
private List<Map<String, Object>> getPageRankScores( private List<Map<String, Object>> getPageRankScores(
Transaction tx, List<Map<String, String>> startNodes, String returnType) { Transaction tx, String allGraph, List<Map<String, String>> startNodes, String returnType) {
List<String> matchClauses = new ArrayList<>(); List<String> matchClauses = new ArrayList<>();
List<String> matchIdentifiers = new ArrayList<>(); List<String> matchIdentifiers = new ArrayList<>();
@ -205,7 +231,7 @@ public class Neo4jGraphUtils {
+ "RETURN id(m) AS g_id, gds.util.asNode(nodeId).id AS id, score " + "RETURN id(m) AS g_id, gds.util.asNode(nodeId).id AS id, score "
+ "ORDER BY score DESC", + "ORDER BY score DESC",
matchQuery, matchQuery,
ALL_GRAPH, allGraph,
matchIdentifierStr, matchIdentifierStr,
Neo4jCommonUtils.escapeNeo4jIdentifier(returnType)); Neo4jCommonUtils.escapeNeo4jIdentifier(returnType));
@ -231,6 +257,16 @@ public class Neo4jGraphUtils {
}); });
} }
public void dropDatabase(String database) {
Session session = driver.session(SessionConfig.forDatabase(this.database));
session.writeTransaction(
tx -> {
tx.run(String.format("DROP DATABASE %s IF EXISTS", database));
tx.commit();
return null;
});
}
public void deleteAllData(String database) { public void deleteAllData(String database) {
if (!this.database.equals(database)) { if (!this.database.equals(database)) {
throw new IllegalArgumentException( throw new IllegalArgumentException(

View File

@ -17,12 +17,13 @@ services:
command: [ command: [
"java", "java",
"-Dfile.encoding=UTF-8", "-Dfile.encoding=UTF-8",
"-Xms4096m", "-Xms2048m",
"-Xmx4096m", "-Xmx8192m",
"-jar", "-jar",
"arks-sofaboot-0.0.1-SNAPSHOT-executable.jar", "arks-sofaboot-0.0.1-SNAPSHOT-executable.jar",
'--server.repository.impl.jdbc.host=mysql', '--server.repository.impl.jdbc.host=mysql',
'--server.repository.impl.jdbc.password=openspg', '--server.repository.impl.jdbc.password=openspg',
'--builder.model.execute.num=5',
'--cloudext.graphstore.url=neo4j://release-openspg-neo4j:7687?user=neo4j&password=neo4j@openspg&database=neo4j', '--cloudext.graphstore.url=neo4j://release-openspg-neo4j:7687?user=neo4j&password=neo4j@openspg&database=neo4j',
'--cloudext.searchengine.url=neo4j://release-openspg-neo4j:7687?user=neo4j&password=neo4j@openspg&database=neo4j' '--cloudext.searchengine.url=neo4j://release-openspg-neo4j:7687?user=neo4j&password=neo4j@openspg&database=neo4j'
] ]

View File

@ -11,7 +11,7 @@
FROM mariadb:10.5.8 FROM mariadb:10.5.8
ADD sql/initdb.sql /docker-entrypoint-initdb.d ADD sql /docker-entrypoint-initdb.d
EXPOSE 3306 EXPOSE 3306

View File

@ -10,6 +10,8 @@
# or implied. # or implied.
docker buildx build -f Dockerfile --platform linux/arm64/v8,linux/amd64 --push \ docker buildx build -f Dockerfile --platform linux/arm64/v8,linux/amd64 --push \
-t openspg/openspg-mysql:0.5 \ -t spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-mysql:0.5.1 \
-t spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-mysql:latest \
-t openspg/openspg-mysql:0.5.1 \
-t openspg/openspg-mysql:latest \ -t openspg/openspg-mysql:latest \
. .

View File

@ -11,250 +11,73 @@
use openspg; use openspg;
CREATE TABLE `kg_project_info` ( CREATE TABLE `kg_reason_session` (
`id` bigint(20) NOT NULL AUTO_INCREMENT comment '主键', `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(255) NOT NULL comment '项目名称', `project_id` bigint(20) unsigned NOT NULL COMMENT '项目ID',
`description` varchar(1024) DEFAULT NULL comment '项目描述信息', `user_id` bigint(20) unsigned NOT NULL COMMENT '用户ID',
`status` varchar(20) NOT NULL DEFAULT 'INVALID' comment 'DELETE:删除 VALID:有效 INVALID无效', `name` varchar(1024) NOT NULL COMMENT '会话名称',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间', `description` longtext DEFAULT NULL COMMENT '会话描述信息',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间', `gmt_create` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',
`namespace` varchar(64) NOT NULL DEFAULT '' comment '命名空间', `gmt_modified` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '修改时间',
`biz_domain_id` bigint(20) DEFAULT NULL comment '业务域主键', PRIMARY KEY (`id`),
`config` text DEFAULT NULL comment '项目配置信息', KEY `idx_project_id` (`project_id`,`id`)
PRIMARY KEY(`id`), ) DEFAULT CHARSET=utf8mb4 COMMENT='图谱推理任务会话表';
UNIQUE KEY `uk_name`(`name`),
KEY `idx_biz_domain_id`(`biz_domain_id`) CREATE TABLE `kg_reason_task` (
) DEFAULT CHARSET = utf8mb4 COMMENT = '图谱项目信息表'; `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`project_id` bigint(20) unsigned NOT NULL COMMENT '项目ID',
`user_id` bigint(20) unsigned NOT NULL COMMENT '用户ID',
`session_id` bigint(20) unsigned NOT NULL COMMENT '会话ID',
`gmt_create` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '修改时间',
`mark` varchar(16) DEFAULT 'NULL' COMMENT '收藏状态',
`status` varchar(32) DEFAULT NULL COMMENT '状态',
`dsl` longtext DEFAULT NULL COMMENT 'DSL执行语句',
`nl` longtext DEFAULT NULL COMMENT '自然语言查询语句',
`params` longtext DEFAULT NULL COMMENT '参数',
`result_message` longtext DEFAULT NULL COMMENT '执行结果,错误信息',
`result_table` longtext DEFAULT NULL COMMENT '执行结果,表格数据',
`result_nodes` longtext DEFAULT NULL COMMENT '执行结果,点数据',
`result_edges` longtext DEFAULT NULL COMMENT '执行结果,边数据',
`result_paths` longtext DEFAULT NULL COMMENT '执行结果,路径数据',
PRIMARY KEY (`id`),
KEY `idx_session_id_id` (`session_id`,`id`),
KEY `idx_project_user_mark` (`project_id`,`user_id`,`mark`),
KEY `idx_user_mark_id` (`user_id`,`mark`,`id`)
) DEFAULT CHARSET=utf8mb4 COMMENT='图谱推理任务表';
CREATE TABLE `kg_reason_tutorial` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`project_id` bigint(20) unsigned NOT NULL COMMENT '项目ID',
`gmt_create` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '修改时间',
`enable` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态',
`name` varchar(1024) DEFAULT NULL COMMENT '名称',
`dsl` longtext DEFAULT NULL COMMENT 'DSL执行语句',
`nl` longtext DEFAULT NULL COMMENT '自然语言查询语句',
`params` longtext DEFAULT NULL COMMENT '参数',
`description` longtext DEFAULT NULL COMMENT '描述信息',
PRIMARY KEY (`id`),
KEY `idx_project_status` (`project_id`,`enable`)
) DEFAULT CHARSET=utf8mb4 COMMENT='图谱推理教程信息表';
CREATE TABLE `kg_builder_job` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`project_id` bigint(20) unsigned NOT NULL COMMENT '项目ID',
`gmt_create` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT '修改时间',
`create_user` varchar(32) DEFAULT 'NULL' COMMENT '创建人',
`modify_user` varchar(32) DEFAULT 'NULL' COMMENT '修改人',
`task_id` bigint(20) unsigned DEFAULT NULL COMMENT '实例任务ID',
`job_name` varchar(64) NOT NULL COMMENT '名称',
`chunk_num` bigint(20) unsigned DEFAULT 0 COMMENT '分段数',
`file_url` varchar(256) NOT NULL COMMENT '文件地址',
`status` varchar(32) DEFAULT NULL COMMENT '状态',
`type` varchar(32) DEFAULT NULL COMMENT '类型',
`extension` longtext DEFAULT NULL COMMENT '扩展信息',
PRIMARY KEY (`id`),
KEY `idx_project_id` (`project_id`),
KEY `idx_task_id` (`task_id`)
) DEFAULT CHARSET=utf8mb4 COMMENT='图谱构建任务表';
CREATE TABLE `kg_biz_domain` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`name` varchar(100) DEFAULT NULL comment '名称',
`status` varchar(20) DEFAULT NULL comment '状态。VALID - 有效 DELETE - 逻辑删除',
`description` varchar(1024) DEFAULT NULL comment '描述',
`global_config` varchar(10240) DEFAULT NULL comment '全局配置',
PRIMARY KEY(`id`),
KEY `idx_status`(`status`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '业务域表';
CREATE TABLE `kg_sys_lock` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`method_name` varchar(128) DEFAULT NULL comment '方法名',
`method_value` varchar(128) DEFAULT NULL comment '方法值',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_mname`(`method_name`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '系统内置表,用于分布式锁实现';
CREATE TABLE `kg_ontology_entity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`original_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment '类型的原始ID',
`name` varchar(255) NOT NULL comment '类型具体名称比如Car',
`name_zh` varchar(255) NOT NULL comment '类型具体中文名称',
`entity_category` varchar(20) NOT NULL comment '\'BASIC\':该类型为基本类型,\'ADVANCED\':该类型为实体类型',
`layer` varchar(20) DEFAULT NULL comment '类型所属层次“CORE”核心层“EXTENSION”:扩展层',
`description` varchar(1024) DEFAULT NULL comment '当前类型的说明/描述信息',
`description_zh` varchar(1024) DEFAULT NULL comment '当前类型的中文说明/描述信息即jsonLd中的\"@id\"',
`status` char(1) NOT NULL DEFAULT '0' comment '9删除 1有效 0:无效 默认',
`with_index` varchar(20) NOT NULL DEFAULT 'TRUE' comment 'TRUE\':\'FALSE\':',
`scope` varchar(20) DEFAULT NULL comment '公有私有标识:PUBLIC,PRIVATE',
`version` int(11) NOT NULL DEFAULT '0' comment '版本',
`version_status` varchar(50) NOT NULL DEFAULT 'ONLINE' comment '迭代版本状态:ONLINE:线上版本、LATEST:最新版本、EFFICIENT:生效版本、HISTORY:历史版本、DISCARDED:废弃版本',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`transformer_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment '算子ID',
`operator_config` text DEFAULT NULL comment '算子配置,json格式文本',
`config` mediumtext DEFAULT NULL comment '实体类型配置',
`unique_name` varchar(255) DEFAULT NULL comment '唯一名称',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_name`(`name`),
UNIQUE KEY `uk_origianl_id_version`(`original_id`, `version`),
KEY `idx_version_status`(`version_status`),
KEY `idx_originalid_versionstatus`(`original_id`, `version_status`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '本体类型';
CREATE TABLE `kg_ontology_entity_parent` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`entity_id` bigint(20) NOT NULL comment '类型唯一标识',
`parent_id` bigint(20) NOT NULL comment '父类型唯一标识,根节点“-1”',
`status` char(1) NOT NULL DEFAULT '0' comment '9删除 1有效 0:无效 默认',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`path` varchar(4096) DEFAULT NULL comment '继承路径',
`deep_inherit` char(1) DEFAULT NULL comment '是否是深度继承,取值YN',
`history_path` varchar(4096) DEFAULT NULL comment '历史继承关系',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_type_parent_id`(`entity_id`, `parent_id`),
KEY `idx_parent_id`(`parent_id`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '本体继承关系表';
CREATE TABLE `kg_ontology_entity_property_range` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`domain_id` bigint(20) unsigned NOT NULL comment '类型唯一标识或边属性边唯一标识',
`property_name` varchar(255) NOT NULL comment '数据或者对象属性英文名',
`range_id` bigint(20) unsigned NOT NULL comment '属性值域唯一标识或边属性属性值域唯一标识',
`property_name_zh` varchar(255) NOT NULL comment '数据或者对象属性中文名',
`constraint_id` bigint(20) unsigned NOT NULL comment '数据属性约束ID',
`property_category` varchar(20) NOT NULL comment 'BASIC\':\'ADVANCED\':',
`map_type` varchar(20) NOT NULL DEFAULT 'TYPE' comment '标识映射是类型-》属性-》值域还是边的属性-》边属性的属性-》边属性的属性的值域,\"TYPE\":类型映射 \"EDGE\":边属性映射',
`version` int(11) NOT NULL DEFAULT '0' comment '版本',
`status` char(1) NOT NULL comment '9删除 1有效 0:无效 默认 和其他schema表对齐',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`original_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment 'spo多版本的原始ID',
`store_property_name` varchar(255) DEFAULT NULL comment '数据属性对应的存储属性名',
`transformer_id` bigint(20) NOT NULL DEFAULT '0' comment '算子ID',
`property_desc` varchar(1024) DEFAULT NULL comment '属性描述',
`property_desc_zh` varchar(1024) DEFAULT NULL comment '属性中文描述',
`project_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment '项目ID',
`original_domain_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment '类型或边的唯一原始标识',
`original_range_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment '类型的唯一原始标识',
`version_status` varchar(50) DEFAULT NULL comment '迭代版本状态:ONLINE:线上版本、LATEST:最新版本、EFFICIENT:生效版本、HISTORY:历史版本、DISCARDED:废弃版本',
`relation_source` varchar(2550) DEFAULT NULL comment '记录关系对应的属性(用于属性转关系)',
`direction` varchar(10) DEFAULT NULL comment 'BOTH:表示双向边',
`mask_type` varchar(20) DEFAULT NULL comment '数据加密规则。',
`index_type` varchar(1024) DEFAULT NULL comment '索引规则。',
`multiver_config` varchar(1024) DEFAULT NULL comment '多版本配置,json格式文本',
`property_source` bigint(20) DEFAULT NULL comment '属性的来源对应全局属性的id',
`property_config` text DEFAULT NULL comment '针对属性的配置信息,如运营配置',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_spo`(`domain_id`, `property_name`, `range_id`, `map_type`, `version`),
KEY `idx_original_id`(`original_id`),
KEY `idx_version_status`(`version_status`),
KEY `idx_relation`(`domain_id`, `property_category`, `map_type`, `version_status`),
KEY `idx_property_name`(`property_name`),
KEY `uk_spo_v2`(`original_domain_id`, `property_name`, `original_range_id`, `map_type`, `version`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '本体三元组表';
CREATE TABLE `kg_project_entity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`project_id` bigint(20) unsigned NOT NULL comment '项目id',
`entity_id` bigint(20) unsigned NOT NULL comment '本体类型id',
`version` int(11) NOT NULL DEFAULT '0' comment '版本',
`version_status` varchar(50) NOT NULL DEFAULT 'ONLINE' comment '迭代版本状态:ONLINE:线上版本、EFFICTIVE:生效版本、RELEASED:已发布版本、DISCARD:废弃版本',
`referenced` char(1) NOT NULL comment '标志是否是引用的类型。Y:是N:不是',
`type` varchar(64) DEFAULT 'ENTITY_TYPE' comment '引入的资源类型关系RELATION_TYPE和实体类型ENTITY_TYPE默认ENTITY_TYPE',
`ref_source` varchar(64) DEFAULT NULL comment '引用来源corekg:COREKG, 项目:PROJECT',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_project_id_entity_id`(`project_id`, `entity_id`, `version`),
KEY `idx_version_status`(`version_status`),
KEY `idx_projectid_versionstatus`(`project_id`, `version_status`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '项目和本体类型关联表';
CREATE TABLE `kg_ontology_semantic` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`resource_id` varchar(128) NOT NULL comment '关联资源id',
`semantic_type` varchar(64) NOT NULL comment '谓词',
`original_resource_id` varchar(64) NOT NULL comment '被关联资源id',
`resource_type` varchar(64) DEFAULT NULL comment '资源类型entity_type、relation_type、property可为空也可有其他类型',
`status` int(11) NOT NULL comment '状态0:删除 1有效',
`config` text DEFAULT NULL comment '预留,谓词额外信息',
`rule_id` varchar(128) DEFAULT NULL comment '关联规则ID',
`subject_meta_type` varchar(128) DEFAULT NULL comment '主体元概念名',
`object_meta_type` varchar(128) DEFAULT NULL comment '客体元概念名',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_spo`(`resource_id`, `semantic_type`, `original_resource_id`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '语义关联维护表';
CREATE TABLE `kg_semantic_rule` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`name` varchar(255) DEFAULT NULL comment '名称',
`expression` mediumtext NOT NULL comment '内容',
`version_id` int(11) NOT NULL comment '版本号',
`status` varchar(60) NOT NULL comment '状态',
`user_no` varchar(255) NOT NULL comment '用户ID',
`is_master` tinyint(4) DEFAULT NULL comment '是否主版本',
`rule_id` varchar(512) DEFAULT NULL comment '规则ID',
`effect_scope` varchar(60) DEFAULT NULL comment '生效范围',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_id_version`(`rule_id`, `version_id`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '语义规则表';
CREATE TABLE `kg_ontology_property_constraint` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`name` varchar(255) NOT NULL comment '该约束的名称,英文',
`name_zh` varchar(255) NOT NULL comment '该约束的中文名称',
`is_require` char(1) NOT NULL DEFAULT 'N' comment '空约束,属性值域是否可以为空,\"N\":可为空 \"Y\":不可为空',
`up_down_boundary` char(1) NOT NULL DEFAULT '0' comment '\">\":1;\">=\":2;\"<\":3;\"<=\":4;1\">\"\"<\":5 \">\"\"<=\":6 \">=\"\"<\":7 \">=\"\"<=\":8,默认0无校验',
`max_value` varchar(255) DEFAULT NULL comment '该属性在该类别下的最大值仅当数值类型Number及其子类时有效',
`min_value` varchar(255) DEFAULT NULL comment '该属性在该类别下的最小值仅当值类型是Number及其子类时有效',
`value_pattern` varchar(1024) DEFAULT NULL comment '正则表达的值规范多用于文本类型Text',
`description` varchar(1024) NOT NULL comment '当前约束的说明/描述信息',
`description_zh` varchar(1024) NOT NULL comment '当前约束的中文说明/描述信息',
`is_unique` char(1) DEFAULT 'N' comment 'Y:属性唯一约束, N:无唯一约束',
`is_enum` char(1) DEFAULT 'N' comment 'Y 是枚举类型,N 不是',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`enum_value` text comment '枚举值',
`is_multi_value` char(1) DEFAULT NULL comment '是否多值Y多值',
PRIMARY KEY(`id`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '本体属性约束表';
CREATE TABLE `kg_ontology_release` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`project_id` bigint(20) NOT NULL comment '项目ID',
`version` int(11) NOT NULL comment '发布版本',
`schema_view` longtext DEFAULT NULL comment '当前版本schema视图',
`user_id` varchar(20) NOT NULL comment '发布人',
`description` text NOT NULL comment '发布描述',
`status` varchar(20) NOT NULL comment '状态',
`change_procedure_id` text DEFAULT NULL comment '变更流程id',
`operation_detail` text DEFAULT NULL comment '(废弃)本次发布的操作详情',
`error_detail` text DEFAULT NULL comment '失败详情',
`operation_info` mediumtext DEFAULT NULL comment '本次发布的操作详情',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_project_version`(`project_id`, `version`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '本体建模发布版本';
CREATE TABLE `kg_ontology_ext` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`resource_id` varchar(128) NOT NULL comment '实体类型id、关系类型id、属性id',
`resource_type` varchar(64) NOT NULL comment '操作的类型枚举:实体类型、关系类型、属性',
`ext_type` varchar(64) NOT NULL comment '扩展类型:标签、回流、颜色',
`field` varchar(64) NOT NULL comment '扩展属性所属域,比如区分用户',
`config` mediumtext DEFAULT NULL comment '配置内容',
`creator` varchar(64) NOT NULL comment '创建者',
`modifier` varchar(64) NOT NULL comment '更新者',
`status` int(10) unsigned NOT NULL comment '状态 1有效 0无效',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_id_type_field`(`resource_id`, `resource_type`, `ext_type`, `field`)
) AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT = 'schema的扩展属性';
INSERT INTO kg_biz_domain (`id`,`gmt_create`,`gmt_modified`,`name`,`status`,`description`,`global_config`) VALUES(1,'2023-09-01 00:00:00','2023-09-01 00:00:00','defaultTenant','VALID','',null);
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(1,1,'Thing','事物','ADVANCED','EXTENSION','Base class for all schema types, all of which inherit the type either directly or indirectly','所有schema类型的基类它们都直接或者间接继承该类型','1','TRUE','PUBLIC',44,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,null,'Thing');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(2,2,'Text','文本','BASIC','CORE','文本','基本数据类型-文本','1','TRUE','PUBLIC',0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REQUIRE","name":"Required","nameZh":"值非空","value":null},{"id":"UNIQUE","name":"Unique","nameZh":"值唯一","value":null},{"id":"ENUM","name":"Enum","nameZh":"枚举","value":null},{"id":"MULTIVALUE","name":"Multi value","nameZh":"多值","value":null},{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":null}]}','Text');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(4,4,'Integer','整型','BASIC','CORE','整型数字','基本数据类型-整型','1','TRUE','PUBLIC',0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REQUIRE","name":"Required","nameZh":"值非空","value":null},{"id":"ENUM","name":"Enum","nameZh":"枚举","value":null},{"id":"MINIMUM_GT","name":"Greater than","nameZh":"大于","value":null},{"id":"MINIMUM_GT_OE","name":"Greater than or equal","nameZh":"大于等于","value":null},{"id":"MAXIMUM_LT","name":"Less than","nameZh":"小于","value":null},{"id":"MAXIMUM_LT_OE","name":"Less than or equal","nameZh":"小于等于","value":null}]}','Integer');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(5,5,'Float','浮点数','BASIC','CORE','浮点数','基本数据类型-浮点数','1','TRUE','PUBLIC',0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REQUIRE","name":"Required","nameZh":"值非空","value":null},{"id":"ENUM","name":"Enum","nameZh":"枚举","value":null},{"id":"MINIMUM_GT","name":"Greater than","nameZh":"大于","value":null},{"id":"MINIMUM_GT_OE","name":"Greater than or equal","nameZh":"大于等于","value":null},{"id":"MAXIMUM_LT","name":"Less than","nameZh":"小于","value":null},{"id":"MAXIMUM_LT_OE","name":"Less than or equal","nameZh":"小于等于","value":null}]}','Float');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(10,10,'STD.ChinaMobile','国内手机号','STANDARD','CORE','中国国内使用的手机号码由11位数字组成','中国国内使用的手机号码由11位数字组成','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"MULTIVALUE","name":"Multi value","nameZh":"多值","value":null},{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(16[5,6])|(17[0-8])|(18[0-9])|(19[1,5,8,9]))[0-9]{8}$"}],"spreadable":true}','STD.ChinaMobile');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(11,11,'STD.Email','电子邮箱','STANDARD','CORE','电子邮箱地址','电子邮箱地址','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"MULTIVALUE","name":"Multi value","nameZh":"多值","value":null},{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"^([a-zA-Z0-9]*[-_.]?[a-zA-Z0-9]+)*@([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)+[.][A-Za-z]{2,3}([.][A-Za-z]{2})?$"}],"spreadable":true}','STD.Email');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(13,13,'STD.IdCardNo','身份证','STANDARD','CORE','中国身份证号码一般由18位数字和字母组成','中国身份证号码一般由18位数字和字母组成','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"MULTIVALUE","name":"Multi value","nameZh":"多值","value":null},{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"^[1-9]{1}[0-9]{5}(19|20)[0-9]{2}((0[1-9]{1})|(1[0-2]{1}))((0[1-9]{1})|([1-2]{1}[0-9]{1}|(3[0-1]{1})))[0-9]{3}[0-9xX]{1}$"}],"spreadable":true}','STD.IdCardNo');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(14,14,'STD.MacAddress','MAC地址','STANDARD','CORE','网卡MAC地址','网卡MAC地址','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"MULTIVALUE","name":"Multi value","nameZh":"多值","value":null},{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"([A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2}"}],"spreadable":true}','STD.MacAddress');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(19,19,'STD.Date','日期','STANDARD','CORE','8位数字组成的日期','8位数字组成的日期','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"[1,2][0-9][0-9][0-9](0[1-9]|1[0-2])(0[1-9]|[1,2][0-9]|3[0,1])"}]}','STD.Date');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(27,27,'STD.ChinaTelCode','国内通讯号','STANDARD','CORE','国内通讯号码包含常见座机和手机号码','国内通讯号码包含常见座机和手机号码','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"^(400[0-9]{7})|(800[0-9]{7})|(0[0-9]{2,3}-[0-9]{7,8})|((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(16[5,6])|(17[0-8])|(18[0-9])|(19[1,5,8,9]))[0-9]{8}$"}],"spreadable":true}','STD.ChinaTelCode');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(29,29,'STD.Timestamp','时间戳','STANDARD','CORE','10位或者13位的时间戳','10位或者13位的时间戳','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"^([0-9]{10})|([0-9]{13})$"}]}','STD.Timestamp');
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(1,10,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,10','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(2,11,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,11','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(4,13,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,13','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(5,14,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,14','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(8,19,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,19','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(12,27,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,27','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(14,29,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,29','N', null);
INSERT INTO kg_ontology_entity_property_range (`id`,`domain_id`,`property_name`,`range_id`,`property_name_zh`,`constraint_id`,`property_category`,`map_type`,`version`,`status`,`gmt_create`,`gmt_modified`,`original_id`,`store_property_name`,`transformer_id`,`property_desc`,`property_desc_zh`,`project_id`,`original_domain_id`,`original_range_id`,`version_status`,`relation_source`,`direction`,`mask_type`,`multiver_config`,`property_source`,`property_config`) VALUES(1,1,'description',2,'描述',0,'BASIC','TYPE',44,'1','2022-03-21 19:24:54','2023-08-27 09:39:04',1,'description',0,null,null,0,1,2,'ONLINE',null,null,null,null,null,null);
INSERT INTO kg_ontology_entity_property_range (`id`,`domain_id`,`property_name`,`range_id`,`property_name_zh`,`constraint_id`,`property_category`,`map_type`,`version`,`status`,`gmt_create`,`gmt_modified`,`original_id`,`store_property_name`,`transformer_id`,`property_desc`,`property_desc_zh`,`project_id`,`original_domain_id`,`original_range_id`,`version_status`,`relation_source`,`direction`,`mask_type`,`multiver_config`,`property_source`,`property_config`) VALUES(2,1,'id',2,'实体主键',0,'BASIC','TYPE',44,'1','2022-03-21 19:24:54','2023-08-27 09:39:04',2,'id',0,null,null,0,1,2,'ONLINE',null,null,null,null,null,null);
INSERT INTO kg_ontology_entity_property_range (`id`,`domain_id`,`property_name`,`range_id`,`property_name_zh`,`constraint_id`,`property_category`,`map_type`,`version`,`status`,`gmt_create`,`gmt_modified`,`original_id`,`store_property_name`,`transformer_id`,`property_desc`,`property_desc_zh`,`project_id`,`original_domain_id`,`original_range_id`,`version_status`,`relation_source`,`direction`,`mask_type`,`multiver_config`,`property_source`,`property_config`) VALUES(3,1,'name',2,'名称',0,'BASIC','TYPE',44,'1','2022-03-21 19:24:54','2023-08-27 09:39:04',3,'name',0,null,null,0,1,2,'ONLINE',null,null,null,null,null,null);

View File

@ -0,0 +1,260 @@
-- Copyright 2023 OpenSPG Authors
--
-- 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.
use openspg;
CREATE TABLE `kg_project_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT comment '主键',
`name` varchar(255) NOT NULL comment '项目名称',
`description` varchar(1024) DEFAULT NULL comment '项目描述信息',
`status` varchar(20) NOT NULL DEFAULT 'INVALID' comment 'DELETE:删除 VALID:有效 INVALID无效',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`namespace` varchar(64) NOT NULL DEFAULT '' comment '命名空间',
`biz_domain_id` bigint(20) DEFAULT NULL comment '业务域主键',
`config` text DEFAULT NULL comment '项目配置信息',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_name`(`name`),
KEY `idx_biz_domain_id`(`biz_domain_id`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '图谱项目信息表';
CREATE TABLE `kg_biz_domain` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`name` varchar(100) DEFAULT NULL comment '名称',
`status` varchar(20) DEFAULT NULL comment '状态。VALID - 有效 DELETE - 逻辑删除',
`description` varchar(1024) DEFAULT NULL comment '描述',
`global_config` varchar(10240) DEFAULT NULL comment '全局配置',
PRIMARY KEY(`id`),
KEY `idx_status`(`status`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '业务域表';
CREATE TABLE `kg_sys_lock` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`method_name` varchar(128) DEFAULT NULL comment '方法名',
`method_value` varchar(128) DEFAULT NULL comment '方法值',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_mname`(`method_name`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '系统内置表,用于分布式锁实现';
CREATE TABLE `kg_ontology_entity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`original_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment '类型的原始ID',
`name` varchar(255) NOT NULL comment '类型具体名称比如Car',
`name_zh` varchar(255) NOT NULL comment '类型具体中文名称',
`entity_category` varchar(20) NOT NULL comment 'BASIC:该类型为基本类型ADVANCED:该类型为实体类型',
`layer` varchar(20) DEFAULT NULL comment '类型所属层次“CORE”核心层“EXTENSION”:扩展层',
`description` varchar(1024) DEFAULT NULL comment '当前类型的说明/描述信息',
`description_zh` varchar(1024) DEFAULT NULL comment '当前类型的中文说明/描述信息即jsonLd中的"@id"',
`status` char(1) NOT NULL DEFAULT '0' comment '9删除 1有效 0:无效 默认',
`with_index` varchar(20) NOT NULL DEFAULT 'TRUE' comment 'TRUE:该类型被索引FALSE:该类型不走索引',
`scope` varchar(20) DEFAULT NULL comment '公有私有标识:PUBLIC,PRIVATE',
`version` int(11) NOT NULL DEFAULT '0' comment '版本',
`version_status` varchar(50) NOT NULL DEFAULT 'ONLINE' comment '迭代版本状态:ONLINE:线上版本、LATEST:最新版本、EFFICIENT:生效版本、HISTORY:历史版本、DISCARDED:废弃版本',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`transformer_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment '算子ID',
`operator_config` text DEFAULT NULL comment '算子配置,json格式文本',
`config` mediumtext DEFAULT NULL comment '实体类型配置',
`unique_name` varchar(255) DEFAULT NULL comment '唯一名称',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_name`(`name`),
UNIQUE KEY `uk_origianl_id_version`(`original_id`, `version`),
KEY `idx_version_status`(`version_status`),
KEY `idx_originalid_versionstatus`(`original_id`, `version_status`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '本体类型';
CREATE TABLE `kg_ontology_entity_parent` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`entity_id` bigint(20) NOT NULL comment '类型唯一标识',
`parent_id` bigint(20) NOT NULL comment '父类型唯一标识,根节点“-1”',
`status` char(1) NOT NULL DEFAULT '0' comment '9删除 1有效 0:无效 默认',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`path` varchar(4096) DEFAULT NULL comment '继承路径',
`deep_inherit` char(1) DEFAULT NULL comment '是否是深度继承,取值YN',
`history_path` varchar(4096) DEFAULT NULL comment '历史继承关系',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_type_parent_id`(`entity_id`, `parent_id`),
KEY `idx_parent_id`(`parent_id`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '本体继承关系表';
CREATE TABLE `kg_ontology_entity_property_range` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`domain_id` bigint(20) unsigned NOT NULL comment '类型唯一标识或边属性边唯一标识',
`property_name` varchar(255) NOT NULL comment '数据或者对象属性英文名',
`range_id` bigint(20) unsigned NOT NULL comment '属性值域唯一标识或边属性属性值域唯一标识',
`property_name_zh` varchar(255) NOT NULL comment '数据或者对象属性中文名',
`constraint_id` bigint(20) unsigned NOT NULL comment '数据属性约束ID',
`property_category` varchar(20) NOT NULL comment 'BASIC:该属性为基本类型实体ADVANCED:该属性为高级类型(边关系)',
`map_type` varchar(20) NOT NULL DEFAULT 'TYPE' comment '标识映射是类型-》属性-》值域还是边的属性-》边属性的属性-》边属性的属性的值域,"TYPE":类型映射 "EDGE":边属性映射',
`version` int(11) NOT NULL DEFAULT '0' comment '版本',
`status` char(1) NOT NULL comment '9删除 1有效 0:无效 默认 和其他schema表对齐',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`original_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment 'spo多版本的原始ID',
`store_property_name` varchar(255) DEFAULT NULL comment '数据属性对应的存储属性名',
`transformer_id` bigint(20) NOT NULL DEFAULT '0' comment '算子ID',
`property_desc` varchar(1024) DEFAULT NULL comment '属性描述',
`property_desc_zh` varchar(1024) DEFAULT NULL comment '属性中文描述',
`project_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment '项目ID',
`original_domain_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment '类型或边的唯一原始标识',
`original_range_id` bigint(20) unsigned NOT NULL DEFAULT '0' comment '类型的唯一原始标识',
`version_status` varchar(50) DEFAULT NULL comment '迭代版本状态:ONLINE:线上版本、LATEST:最新版本、EFFICIENT:生效版本、HISTORY:历史版本、DISCARDED:废弃版本',
`relation_source` varchar(2550) DEFAULT NULL comment '记录关系对应的属性(用于属性转关系)',
`direction` varchar(10) DEFAULT NULL comment 'BOTH:表示双向边',
`mask_type` varchar(20) DEFAULT NULL comment '数据加密规则。',
`index_type` varchar(1024) DEFAULT NULL comment '索引规则。',
`multiver_config` varchar(1024) DEFAULT NULL comment '多版本配置,json格式文本',
`property_source` bigint(20) DEFAULT NULL comment '属性的来源对应全局属性的id',
`property_config` text DEFAULT NULL comment '针对属性的配置信息,如运营配置',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_spo`(`domain_id`, `property_name`, `range_id`, `map_type`, `version`),
KEY `idx_original_id`(`original_id`),
KEY `idx_version_status`(`version_status`),
KEY `idx_relation`(`domain_id`, `property_category`, `map_type`, `version_status`),
KEY `idx_property_name`(`property_name`),
KEY `idx_uk_spo_v2`(`original_domain_id`, `property_name`, `original_range_id`, `map_type`, `version`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '本体三元组表';
CREATE TABLE `kg_project_entity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`project_id` bigint(20) unsigned NOT NULL comment '项目id',
`entity_id` bigint(20) unsigned NOT NULL comment '本体类型id',
`version` int(11) NOT NULL DEFAULT '0' comment '版本',
`version_status` varchar(50) NOT NULL DEFAULT 'ONLINE' comment '迭代版本状态:ONLINE:线上版本、EFFICTIVE:生效版本、RELEASED:已发布版本、DISCARD:废弃版本',
`referenced` char(1) NOT NULL comment '标志是否是引用的类型。Y:是N:不是',
`type` varchar(64) DEFAULT 'ENTITY_TYPE' comment '引入的资源类型关系RELATION_TYPE和实体类型ENTITY_TYPE默认ENTITY_TYPE',
`ref_source` varchar(64) DEFAULT NULL comment '引用来源corekg:COREKG, 项目:PROJECT',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_project_id_entity_id`(`project_id`, `entity_id`, `version`),
KEY `idx_version_status`(`version_status`),
KEY `idx_projectid_versionstatus`(`project_id`, `version_status`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '项目和本体类型关联表';
CREATE TABLE `kg_ontology_semantic` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`resource_id` varchar(128) NOT NULL comment '关联资源id',
`semantic_type` varchar(64) NOT NULL comment '谓词',
`original_resource_id` varchar(64) NOT NULL comment '被关联资源id',
`resource_type` varchar(64) DEFAULT NULL comment '资源类型entity_type、relation_type、property可为空也可有其他类型',
`status` int(11) NOT NULL comment '状态0:删除 1有效',
`config` text DEFAULT NULL comment '预留,谓词额外信息',
`rule_id` varchar(128) DEFAULT NULL comment '关联规则ID',
`subject_meta_type` varchar(128) DEFAULT NULL comment '主体元概念名',
`object_meta_type` varchar(128) DEFAULT NULL comment '客体元概念名',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_spo`(`resource_id`, `semantic_type`, `original_resource_id`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '语义关联维护表';
CREATE TABLE `kg_semantic_rule` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`name` varchar(255) DEFAULT NULL comment '名称',
`expression` mediumtext NOT NULL comment '内容',
`version_id` int(11) NOT NULL comment '版本号',
`status` varchar(60) NOT NULL comment '状态',
`user_no` varchar(255) NOT NULL comment '用户ID',
`is_master` tinyint(4) DEFAULT NULL comment '是否主版本',
`rule_id` varchar(512) DEFAULT NULL comment '规则ID',
`effect_scope` varchar(60) DEFAULT NULL comment '生效范围',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_id_version`(`rule_id`, `version_id`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '语义规则表';
CREATE TABLE `kg_ontology_property_constraint` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`name` varchar(255) NOT NULL comment '该约束的名称,英文',
`name_zh` varchar(255) NOT NULL comment '该约束的中文名称',
`is_require` char(1) NOT NULL DEFAULT 'N' comment '空约束,属性值域是否可以为空,"N":可为空 "Y":不可为空',
`up_down_boundary` char(1) NOT NULL DEFAULT '0' comment '">":1;">=":2;"<":3;"<=":4;1">""<":5 ">""<=":6 ">=""<":7 ">=""<=":8,默认0无校验',
`max_value` varchar(255) DEFAULT NULL comment '该属性在该类别下的最大值仅当数值类型Number及其子类时有效',
`min_value` varchar(255) DEFAULT NULL comment '该属性在该类别下的最小值仅当值类型是Number及其子类时有效',
`value_pattern` varchar(1024) DEFAULT NULL comment '正则表达的值规范多用于文本类型Text',
`description` varchar(1024) NOT NULL comment '当前约束的说明/描述信息',
`description_zh` varchar(1024) NOT NULL comment '当前约束的中文说明/描述信息',
`is_unique` char(1) DEFAULT 'N' comment 'Y:属性唯一约束, N:无唯一约束',
`is_enum` char(1) DEFAULT 'N' comment 'Y 是枚举类型,N 不是',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`enum_value` text comment '枚举值',
`is_multi_value` char(1) DEFAULT NULL comment '是否多值Y多值',
PRIMARY KEY(`id`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '本体属性约束表';
CREATE TABLE `kg_ontology_release` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`project_id` bigint(20) NOT NULL comment '项目ID',
`version` int(11) NOT NULL comment '发布版本',
`schema_view` longtext DEFAULT NULL comment '当前版本schema视图',
`user_id` varchar(20) NOT NULL comment '发布人',
`description` text NOT NULL comment '发布描述',
`status` varchar(20) NOT NULL comment '状态',
`change_procedure_id` text DEFAULT NULL comment '变更流程id',
`operation_detail` text DEFAULT NULL comment '(废弃)本次发布的操作详情',
`error_detail` text DEFAULT NULL comment '失败详情',
`operation_info` mediumtext DEFAULT NULL comment '本次发布的操作详情',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_project_version`(`project_id`, `version`)
) DEFAULT CHARSET = utf8mb4 COMMENT = '本体建模发布版本';
CREATE TABLE `kg_ontology_ext` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT comment '主键',
`gmt_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
`gmt_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
`resource_id` varchar(128) NOT NULL comment '实体类型id、关系类型id、属性id',
`resource_type` varchar(64) NOT NULL comment '操作的类型枚举:实体类型、关系类型、属性',
`ext_type` varchar(64) NOT NULL comment '扩展类型:标签、回流、颜色',
`field` varchar(64) NOT NULL comment '扩展属性所属域,比如区分用户',
`config` mediumtext DEFAULT NULL comment '配置内容',
`creator` varchar(64) NOT NULL comment '创建者',
`modifier` varchar(64) NOT NULL comment '更新者',
`status` int(10) unsigned NOT NULL comment '状态 1有效 0无效',
PRIMARY KEY(`id`),
UNIQUE KEY `uk_id_type_field`(`resource_id`, `resource_type`, `ext_type`, `field`)
) AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT = 'schema的扩展属性';
INSERT INTO kg_biz_domain (`id`,`gmt_create`,`gmt_modified`,`name`,`status`,`description`,`global_config`) VALUES(1,'2023-09-01 00:00:00','2023-09-01 00:00:00','defaultTenant','VALID','',null);
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(1,1,'Thing','事物','ADVANCED','EXTENSION','Base class for all schema types, all of which inherit the type either directly or indirectly','所有schema类型的基类它们都直接或者间接继承该类型','1','TRUE','PUBLIC',44,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,null,'Thing');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(2,2,'Text','文本','BASIC','CORE','文本','基本数据类型-文本','1','TRUE','PUBLIC',0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REQUIRE","name":"Required","nameZh":"值非空","value":null},{"id":"UNIQUE","name":"Unique","nameZh":"值唯一","value":null},{"id":"ENUM","name":"Enum","nameZh":"枚举","value":null},{"id":"MULTIVALUE","name":"Multi value","nameZh":"多值","value":null},{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":null}]}','Text');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(4,4,'Integer','整型','BASIC','CORE','整型数字','基本数据类型-整型','1','TRUE','PUBLIC',0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REQUIRE","name":"Required","nameZh":"值非空","value":null},{"id":"ENUM","name":"Enum","nameZh":"枚举","value":null},{"id":"MINIMUM_GT","name":"Greater than","nameZh":"大于","value":null},{"id":"MINIMUM_GT_OE","name":"Greater than or equal","nameZh":"大于等于","value":null},{"id":"MAXIMUM_LT","name":"Less than","nameZh":"小于","value":null},{"id":"MAXIMUM_LT_OE","name":"Less than or equal","nameZh":"小于等于","value":null}]}','Integer');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(5,5,'Float','浮点数','BASIC','CORE','浮点数','基本数据类型-浮点数','1','TRUE','PUBLIC',0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REQUIRE","name":"Required","nameZh":"值非空","value":null},{"id":"ENUM","name":"Enum","nameZh":"枚举","value":null},{"id":"MINIMUM_GT","name":"Greater than","nameZh":"大于","value":null},{"id":"MINIMUM_GT_OE","name":"Greater than or equal","nameZh":"大于等于","value":null},{"id":"MAXIMUM_LT","name":"Less than","nameZh":"小于","value":null},{"id":"MAXIMUM_LT_OE","name":"Less than or equal","nameZh":"小于等于","value":null}]}','Float');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(10,10,'STD.ChinaMobile','国内手机号','STANDARD','CORE','中国国内使用的手机号码由11位数字组成','中国国内使用的手机号码由11位数字组成','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"MULTIVALUE","name":"Multi value","nameZh":"多值","value":null},{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(16[5,6])|(17[0-8])|(18[0-9])|(19[1,5,8,9]))[0-9]{8}$"}],"spreadable":true}','STD.ChinaMobile');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(11,11,'STD.Email','电子邮箱','STANDARD','CORE','电子邮箱地址','电子邮箱地址','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"MULTIVALUE","name":"Multi value","nameZh":"多值","value":null},{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"^([a-zA-Z0-9]*[-_.]?[a-zA-Z0-9]+)*@([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)+[.][A-Za-z]{2,3}([.][A-Za-z]{2})?$"}],"spreadable":true}','STD.Email');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(13,13,'STD.IdCardNo','身份证','STANDARD','CORE','中国身份证号码一般由18位数字和字母组成','中国身份证号码一般由18位数字和字母组成','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"MULTIVALUE","name":"Multi value","nameZh":"多值","value":null},{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"^[1-9]{1}[0-9]{5}(19|20)[0-9]{2}((0[1-9]{1})|(1[0-2]{1}))((0[1-9]{1})|([1-2]{1}[0-9]{1}|(3[0-1]{1})))[0-9]{3}[0-9xX]{1}$"}],"spreadable":true}','STD.IdCardNo');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(14,14,'STD.MacAddress','MAC地址','STANDARD','CORE','网卡MAC地址','网卡MAC地址','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"MULTIVALUE","name":"Multi value","nameZh":"多值","value":null},{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"([A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2}"}],"spreadable":true}','STD.MacAddress');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(19,19,'STD.Date','日期','STANDARD','CORE','8位数字组成的日期','8位数字组成的日期','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"[1,2][0-9][0-9][0-9](0[1-9]|1[0-2])(0[1-9]|[1,2][0-9]|3[0,1])"}]}','STD.Date');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(27,27,'STD.ChinaTelCode','国内通讯号','STANDARD','CORE','国内通讯号码包含常见座机和手机号码','国内通讯号码包含常见座机和手机号码','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"^(400[0-9]{7})|(800[0-9]{7})|(0[0-9]{2,3}-[0-9]{7,8})|((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(16[5,6])|(17[0-8])|(18[0-9])|(19[1,5,8,9]))[0-9]{8}$"}],"spreadable":true}','STD.ChinaTelCode');
INSERT INTO kg_ontology_entity (`id`,`original_id`,`name`,`name_zh`,`entity_category`,`layer`,`description`,`description_zh`,`status`,`with_index`,`scope`,`version`,`version_status`,`gmt_create`,`gmt_modified`,`transformer_id`,`operator_config`,`config`,`unique_name`) VALUES(29,29,'STD.Timestamp','时间戳','STANDARD','CORE','10位或者13位的时间戳','10位或者13位的时间戳','1','FALSE',null,0,'ONLINE','2023-09-01 00:00:00','2023-09-01 00:00:00',0,null,'{"constrains":[{"id":"REGULAR","name":"Regular match","nameZh":"正则匹配","value":"^([0-9]{10})|([0-9]{13})$"}]}','STD.Timestamp');
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(1,10,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,10','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(2,11,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,11','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(4,13,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,13','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(5,14,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,14','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(8,19,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,19','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(12,27,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,27','N', null);
INSERT INTO kg_ontology_entity_parent (`id`,`entity_id`,`parent_id`,`status`,`gmt_create`,`gmt_modified`,`path`,`deep_inherit`,`history_path`) VALUES(14,29,1,1,'2023-09-01 00:00:00','2023-09-01 00:00:00','1,29','N', null);
INSERT INTO kg_ontology_entity_property_range (`id`,`domain_id`,`property_name`,`range_id`,`property_name_zh`,`constraint_id`,`property_category`,`map_type`,`version`,`status`,`gmt_create`,`gmt_modified`,`original_id`,`store_property_name`,`transformer_id`,`property_desc`,`property_desc_zh`,`project_id`,`original_domain_id`,`original_range_id`,`version_status`,`relation_source`,`direction`,`mask_type`,`multiver_config`,`property_source`,`property_config`) VALUES(1,1,'description',2,'描述',0,'BASIC','TYPE',44,'1','2022-03-21 19:24:54','2023-08-27 09:39:04',1,'description',0,null,null,0,1,2,'ONLINE',null,null,null,null,null,null);
INSERT INTO kg_ontology_entity_property_range (`id`,`domain_id`,`property_name`,`range_id`,`property_name_zh`,`constraint_id`,`property_category`,`map_type`,`version`,`status`,`gmt_create`,`gmt_modified`,`original_id`,`store_property_name`,`transformer_id`,`property_desc`,`property_desc_zh`,`project_id`,`original_domain_id`,`original_range_id`,`version_status`,`relation_source`,`direction`,`mask_type`,`multiver_config`,`property_source`,`property_config`) VALUES(2,1,'id',2,'实体主键',0,'BASIC','TYPE',44,'1','2022-03-21 19:24:54','2023-08-27 09:39:04',2,'id',0,null,null,0,1,2,'ONLINE',null,null,null,null,null,null);
INSERT INTO kg_ontology_entity_property_range (`id`,`domain_id`,`property_name`,`range_id`,`property_name_zh`,`constraint_id`,`property_category`,`map_type`,`version`,`status`,`gmt_create`,`gmt_modified`,`original_id`,`store_property_name`,`transformer_id`,`property_desc`,`property_desc_zh`,`project_id`,`original_domain_id`,`original_range_id`,`version_status`,`relation_source`,`direction`,`mask_type`,`multiver_config`,`property_source`,`property_config`) VALUES(3,1,'name',2,'名称',0,'BASIC','TYPE',44,'1','2022-03-21 19:24:54','2023-08-27 09:39:04',3,'name',0,null,null,0,1,2,'ONLINE',null,null,null,null,null,null);

View File

@ -19,6 +19,7 @@ ENV LANG C.UTF-8
ARG TARGETPLATFORM ARG TARGETPLATFORM
ARG APT_INSTALL="apt-get install --no-install-recommends -y" ARG APT_INSTALL="apt-get install --no-install-recommends -y"
RUN apt-get clean && apt-get update && \ RUN apt-get clean && apt-get update && \
$APT_INSTALL ca-certificates && \ $APT_INSTALL ca-certificates && \
$APT_INSTALL ca-certificates-java && \ $APT_INSTALL ca-certificates-java && \
@ -43,10 +44,10 @@ RUN if [ "${TARGETPLATFORM}" = "linux/amd64" ]; then \
RUN python3 -m venv /openspg_venv && \ RUN python3 -m venv /openspg_venv && \
. /openspg_venv/bin/activate && \ . /openspg_venv/bin/activate && \
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-$(dpkg --print-architecture) && \ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-$(dpkg --print-architecture) && \
pip3 install openspg-kag==0.5.1 && \ pip3 install openspg-kag==0.5.1b3 && \
pip3 install pemja==0.4.0 && \ pip3 install pemja==0.4.0 && \
pip3 install -U "http://alps-common.oss-cn-hangzhou-zmf.aliyuncs.com/nscommon/shiji/nscommon-0.0.1.tar.gz" &&\ pip3 install -U "http://alps-common.oss-cn-hangzhou-zmf.aliyuncs.com/nscommon/shiji/nscommon-0.0.1.tar.gz" &&\
echo "if (tty -s); then \n . /openspg_venv/bin/activate \nfi" >> ~/.bashrc echo "if (tty -s); then \n . /openspg_venv/bin/activate \nfi" >> ~/.bashrc
COPY openspg/ /openspg COPY openspg/ /openspg
RUN git clone --depth=1 https://github.com/OpenSPG/KAG.git

View File

@ -10,7 +10,7 @@
# or implied. # or implied.
IMAGE="spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-python" IMAGE="spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-python"
VERSION="0.5" VERSION="0.5.1"
cd ../../../../ cd ../../../../
docker build -f openspg/dev/release/python/Dockerfile --platform linux/arm64/v8 --push \ docker build -f openspg/dev/release/python/Dockerfile --platform linux/arm64/v8 --push \
-t ${IMAGE}:${VERSION}-arm64 \ -t ${IMAGE}:${VERSION}-arm64 \

View File

@ -11,6 +11,8 @@
# for amd64 # for amd64
docker build -f Dockerfile --platform linux/amd64 --push \ docker build -f Dockerfile --platform linux/amd64 --push \
-t openspg/openspg-python:0.5 \ -t spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-python:0.5.1 \
-t spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-python:latest \
-t openspg/openspg-python:0.5.1 \
-t openspg/openspg-python:latest \ -t openspg/openspg-python:latest \
. .

View File

@ -10,6 +10,6 @@
# or implied. # or implied.
docker buildx build -f Dockerfile --platform linux/arm64/v8,linux/amd64 --push \ docker buildx build -f Dockerfile --platform linux/arm64/v8,linux/amd64 --push \
-t openspg/openspg-server:0.5 \ -t spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-server:0.5.1 \
-t openspg/openspg-server:latest \ -t spg-registry.cn-hangzhou.cr.aliyuncs.com/spg/openspg-server:latest \
. .

View File

@ -28,11 +28,11 @@ management.endpoint.beans.enable=false
management.endpoints.web.exposure.exclude=components,beans management.endpoints.web.exposure.exclude=components,beans
# schema # schema
schema.uri=http://127.0.0.1 schema.uri=http://127.0.0.1:8887
# repository # repository
server.repository.driver=com.antgroup.openspg.server.infra.dao.JdbcRepositoryClientDriver server.repository.driver=com.antgroup.openspg.server.infra.dao.JdbcRepositoryClientDriver
server.repository.impl.jdbc.url=jdbc:mysql://${server.repository.impl.jdbc.host}:${server.repository.impl.jdbc.port}/openspg?useUnicode=true&amp;characterEncoding=utf8 server.repository.impl.jdbc.url=jdbc:mysql://${server.repository.impl.jdbc.host}:${server.repository.impl.jdbc.port}/openspg?useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true
server.repository.impl.jdbc.host=127.0.0.1 server.repository.impl.jdbc.host=127.0.0.1
server.repository.impl.jdbc.port=3306 server.repository.impl.jdbc.port=3306
server.repository.impl.jdbc.username=root server.repository.impl.jdbc.username=root

View File

@ -27,6 +27,8 @@ public interface ProjectManager {
Project queryById(Long projectId); Project queryById(Long projectId);
Integer deleteById(Long projectId);
List<Project> query(ProjectQueryRequest request); List<Project> query(ProjectQueryRequest request);
Paged<Project> queryPaged(ProjectQueryRequest request, int start, int size); Paged<Project> queryPaged(ProjectQueryRequest request, int start, int size);

View File

@ -44,7 +44,7 @@ public class ProjectManagerImpl implements ProjectManager {
@Override @Override
public Project create(ProjectCreateRequest request) { public Project create(ProjectCreateRequest request) {
JSONObject config = setDatabase(request.getConfig(), request.getNamespace()); JSONObject config = setDatabase(request.getConfig(), request.getNamespace());
createNeo4jDatabase(request.getNamespace(), config); setGraphStore(request.getNamespace(), config, true);
Project project = Project project =
new Project( new Project(
null, null,
@ -62,6 +62,7 @@ public class ProjectManagerImpl implements ProjectManager {
public Project update(ProjectCreateRequest request) { public Project update(ProjectCreateRequest request) {
Project project = projectRepository.queryById(request.getId()); Project project = projectRepository.queryById(request.getId());
JSONObject config = setDatabase(request.getConfig(), project.getNamespace()); JSONObject config = setDatabase(request.getConfig(), project.getNamespace());
setGraphStore(request.getNamespace(), config, false);
config = setVectorDimensions(config, project); config = setVectorDimensions(config, project);
Project update = new Project(request.getId(), null, null, null, null, config.toJSONString()); Project update = new Project(request.getId(), null, null, null, null, config.toJSONString());
return projectRepository.update(update); return projectRepository.update(update);
@ -113,7 +114,31 @@ public class ProjectManagerImpl implements ProjectManager {
return projectRepository.queryById(projectId); return projectRepository.queryById(projectId);
} }
public void createNeo4jDatabase(String namespace, JSONObject config) { @Override
public Integer deleteById(Long projectId) {
Project project = projectRepository.queryById(projectId);
if (project == null) {
return 0;
}
deleteDatabase(project);
return projectRepository.deleteById(projectId);
}
public void deleteDatabase(Project project) {
JSONObject config = JSONObject.parseObject(project.getConfig());
UriComponents uriComponents = UriComponentsBuilder.fromUriString(url).build();
String database = uriComponents.getQueryParams().getFirst(Neo4jConstants.DATABASE);
JSONObject graphStore = config.getJSONObject(CommonConstants.GRAPH_STORE);
String host = graphStore.getString(Neo4jConstants.URI);
String user = graphStore.getString(Neo4jConstants.USER);
String password = graphStore.getString(Neo4jConstants.PASSWORD);
String dropDatabase = project.getNamespace().toLowerCase();
Neo4jAdminUtils driver = new Neo4jAdminUtils(host, user, password, database);
driver.neo4jGraph.dropDatabase(dropDatabase);
}
public void setGraphStore(String namespace, JSONObject config, boolean createDatabase) {
UriComponents uriComponents = UriComponentsBuilder.fromUriString(url).build(); UriComponents uriComponents = UriComponentsBuilder.fromUriString(url).build();
String database = uriComponents.getQueryParams().getFirst(Neo4jConstants.DATABASE); String database = uriComponents.getQueryParams().getFirst(Neo4jConstants.DATABASE);
String host = String host =
@ -137,11 +162,12 @@ public class ProjectManagerImpl implements ProjectManager {
} else { } else {
graphStore.put(Neo4jConstants.PASSWORD, password); graphStore.put(Neo4jConstants.PASSWORD, password);
} }
if (createDatabase) {
Neo4jAdminUtils driver = new Neo4jAdminUtils(host, user, password, database); Neo4jAdminUtils driver = new Neo4jAdminUtils(host, user, password, database);
String projectDatabase = namespace.toLowerCase(); String projectDatabase = namespace.toLowerCase();
driver.neo4jGraph.createDatabase(projectDatabase); driver.neo4jGraph.createDatabase(projectDatabase);
} }
}
@Override @Override
public List<Project> query(ProjectQueryRequest request) { public List<Project> query(ProjectQueryRequest request) {

View File

@ -28,5 +28,7 @@ public interface ProjectRepository {
List<Project> query(ProjectQueryRequest request); List<Project> query(ProjectQueryRequest request);
Integer deleteById(Long projectId);
Paged<Project> queryPaged(ProjectQueryRequest request, int start, int size); Paged<Project> queryPaged(ProjectQueryRequest request, int start, int size);
} }

View File

@ -19,7 +19,7 @@
default-autowire="byName"> default-autowire="byName">
<bean id="appEnvConfig" class="com.antgroup.openspg.server.common.service.config.AppEnvConfig"> <bean id="appEnvConfig" class="com.antgroup.openspg.server.common.service.config.AppEnvConfig">
<property name="schemaUri" value="${schema.uri}:${server.port}"/> <property name="schemaUri" value="${schema.uri}"/>
<property name="graphStoreUrl" value="${cloudext.graphstore.url}"/> <property name="graphStoreUrl" value="${cloudext.graphstore.url}"/>
<property name="searchEngineUrl" value="${cloudext.searchengine.url}"/> <property name="searchEngineUrl" value="${cloudext.searchengine.url}"/>
</bean> </bean>

View File

@ -25,6 +25,22 @@ public interface ProjectDOMapper {
int deleteByPrimaryKey(Long id); int deleteByPrimaryKey(Long id);
void deleteFromKgOntologyEntity(String namespace);
void deleteFromKgOntologyEntityPropertyRange(Long id);
void deleteFromKgProjectEntity(Long id);
void deleteFromKgOntologyRelease(Long id);
void deleteFromKgReasonSession(Long id);
void deleteFromKgReasonTask(Long id);
void deleteFromKgReasonTutorial(Long id);
void deleteFromKgBuilderJob(Long id);
int insert(ProjectDO record); int insert(ProjectDO record);
int insertSelective(ProjectDO record); int insertSelective(ProjectDO record);

View File

@ -24,11 +24,13 @@ import com.antgroup.openspg.server.infra.dao.dataobject.ProjectDOExample;
import com.antgroup.openspg.server.infra.dao.mapper.ProjectDOMapper; import com.antgroup.openspg.server.infra.dao.mapper.ProjectDOMapper;
import com.antgroup.openspg.server.infra.dao.repository.common.convertor.ProjectConvertor; import com.antgroup.openspg.server.infra.dao.repository.common.convertor.ProjectConvertor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository @Repository
public class ProjectRepositoryImpl implements ProjectRepository { public class ProjectRepositoryImpl implements ProjectRepository {
@ -48,6 +50,8 @@ public class ProjectRepositoryImpl implements ProjectRepository {
throw ProjectException.namespaceAlreadyExist(project.getNamespace()); throw ProjectException.namespaceAlreadyExist(project.getNamespace());
} }
ProjectDO projectDO = ProjectConvertor.toDO(project); ProjectDO projectDO = ProjectConvertor.toDO(project);
projectDO.setGmtModified(new Date());
projectDO.setGmtCreate(new Date());
projectDOMapper.insert(projectDO); projectDOMapper.insert(projectDO);
return projectDO.getId(); return projectDO.getId();
} }
@ -65,6 +69,21 @@ public class ProjectRepositoryImpl implements ProjectRepository {
return ProjectConvertor.toModel(projectDO); return ProjectConvertor.toModel(projectDO);
} }
@Override
@Transactional(value = "transactionManager", rollbackFor = Exception.class)
public Integer deleteById(Long projectId) {
ProjectDO projectDO = projectDOMapper.selectByPrimaryKey(projectId);
projectDOMapper.deleteFromKgOntologyEntity(projectDO.getNamespace());
projectDOMapper.deleteFromKgOntologyEntityPropertyRange(projectId);
projectDOMapper.deleteFromKgProjectEntity(projectId);
projectDOMapper.deleteFromKgOntologyRelease(projectId);
projectDOMapper.deleteFromKgReasonSession(projectId);
projectDOMapper.deleteFromKgReasonTask(projectId);
projectDOMapper.deleteFromKgReasonTutorial(projectId);
projectDOMapper.deleteFromKgBuilderJob(projectId);
return projectDOMapper.deleteByPrimaryKey(projectId);
}
@Override @Override
public List<Project> query(ProjectQueryRequest request) { public List<Project> query(ProjectQueryRequest request) {
ProjectDOExample example = new ProjectDOExample(); ProjectDOExample example = new ProjectDOExample();

View File

@ -107,8 +107,31 @@
where id = #{id,jdbcType=BIGINT} where id = #{id,jdbcType=BIGINT}
</select> </select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete from kg_project_info delete from kg_project_info where id = #{id,jdbcType=BIGINT};
where id = #{id,jdbcType=BIGINT} </delete>
<delete id="deleteFromKgOntologyEntity" parameterType="java.lang.String">
DELETE FROM kg_ontology_entity WHERE name like concat(#{namespace}, '.%') ;
</delete>
<delete id="deleteFromKgOntologyEntityPropertyRange" parameterType="java.lang.Long">
DELETE FROM kg_ontology_entity_property_range WHERE id = #{id,jdbcType=BIGINT};
</delete>
<delete id="deleteFromKgProjectEntity" parameterType="java.lang.Long">
DELETE FROM kg_project_entity WHERE id = #{id,jdbcType=BIGINT};
</delete>
<delete id="deleteFromKgOntologyRelease" parameterType="java.lang.Long">
DELETE FROM kg_ontology_release WHERE id = #{id,jdbcType=BIGINT};
</delete>
<delete id="deleteFromKgReasonSession" parameterType="java.lang.Long">
DELETE FROM kg_reason_session WHERE id = #{id,jdbcType=BIGINT};
</delete>
<delete id="deleteFromKgReasonTask" parameterType="java.lang.Long">
DELETE FROM kg_reason_task WHERE id = #{id,jdbcType=BIGINT};
</delete>
<delete id="deleteFromKgReasonTutorial" parameterType="java.lang.Long">
DELETE FROM kg_reason_tutorial WHERE id = #{id,jdbcType=BIGINT};
</delete>
<delete id="deleteFromKgBuilderJob" parameterType="java.lang.Long">
DELETE FROM kg_builder_job WHERE id = #{id,jdbcType=BIGINT};
</delete> </delete>
<delete id="deleteByExample" parameterType="com.antgroup.openspg.server.infra.dao.dataobject.ProjectDOExample"> <delete id="deleteByExample" parameterType="com.antgroup.openspg.server.infra.dao.dataobject.ProjectDOExample">
delete from kg_project_info delete from kg_project_info

View File

@ -28,7 +28,7 @@
</commentGenerator> </commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver" <jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/openspg?useUnicode=true&amp;characterEncoding=utf8" connectionURL="jdbc:mysql://127.0.0.1:3306/openspg?useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true"
userId="root" userId="root"
password="openspg"> password="openspg">
</jdbcConnection> </jdbcConnection>