supersonic——TRANSLATING阶段

TRANSLATING阶段主要是将语义SQL转换为物理SQL。

代码流转过程:

ChatWorkflowEngine.start() ------》ChatWorkflowEngine.performTranslating() ------》S2SemanticLayerService.translate() ------》DefaultSemanticTranslator.translate()------》OntologyQueryParser.parse()------》SqlBuilder.buildOntoLogySql()。

1、SqlBuilder

SqlBuilder是一个基于Apache Calcite框架的SQL构建器,负责将语义查询转换为物理SQL语句。它支持多模型关联查询、连接优化和跨数据库引擎兼容。

java 复制代码
public String buildOntologySql(QueryStatement queryStatement) throws Exception {
        OntologyQuery ontologyQuery = queryStatement.getOntologyQuery();
        Ontology ontology = queryStatement.getOntology();

        if (ontologyQuery.getLimit() == null) {
            ontologyQuery.setLimit(0L);
        }

        Set<ModelResp> dataModels = ontologyQuery.getModels();
        if (dataModels == null || dataModels.isEmpty()) {
            throw new Exception("data model not found");
        }

        TableView tableView;
        if (!CollectionUtils.isEmpty(ontology.getJoinRelations()) && dataModels.size() > 1) {
            Set<ModelResp> models = probeRelatedModels(dataModels, queryStatement.getOntology());
            tableView = render(ontologyQuery, models, scope, schema);
        } else {
            tableView = render(ontologyQuery, dataModels, scope, schema);
        }

        SqlNode parserNode = tableView.build();
        DatabaseResp database = queryStatement.getOntology().getDatabase();
        EngineType engineType = EngineType.fromString(database.getType());
        try {
            parserNode = optimizeParseNode(parserNode, engineType);
        } catch (Exception e) {
            // failure in optimization phase doesn't affect the query result,
            // just ignore it
            log.error("optimizeParseNode error", e);
        }
        return SemanticNode.getSql(parserNode, engineType);
    }
相关推荐
2301_810160958 小时前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
wenlonglanying8 小时前
MySQL事件功能简介
数据库·mysql
l1t8 小时前
DeepSeek总结的用 C# 构建 DuckDB 插件说明
前端·数据库·c#·插件·duckdb
czlczl200209258 小时前
Redis过期删除策略
数据库·redis·缓存
2401_891655818 小时前
ZLibrary反爬机制概述
数据库·python
醇氧8 小时前
第一、二、三范式学习
数据库·学习·oracle
2401_884662108 小时前
MySQL安全加固十大硬核操作大纲
数据库·mysql·安全
PyAIGCMaster8 小时前
开发了一个全自动接入wordpress的saas发文章的网站,记录一下如何实现,有需要的朋友联系。
java·开发语言·数据库
2201_761080198 小时前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python
Maverick069 小时前
Oracle PDB 概念与架构
运维·数据库·oracle