又谈SQL-to-SQL翻译器

之前已经浅谈(浅析构建SQL-to-SQL的翻译器),再谈(再谈SQL-to-SQL翻译器)过两次SQL-to-SQL了,这次就只能又谈了,希望这个系列,还能再谈下去,我想做个102年的公众号...

这次从一张图说起,就是下面这幅图,当我画完他的时候,我就感觉无比的舒爽。让整个执行流程,可控,并且可扩展。还记得当初上学的时候,数学建模课上,老师为了“求证一张四条腿的椅子,四条腿处在一个平面上的概率”,写了满满四黑板板书,然后心满意足的,跟一脸蒙的我们说,“看,多美啊!”。我现在有点理解他当时的状态了。

有眼尖的同学,可能已经发现了,没错,这里借鉴了Flink的流程设计。

简单的说,输入-> 转换 -> 输出 经典的三段论式构造。

这里我们把输入 SourceFunction  和 输出 SinkFunction 进行了抽象,但是并没有像Flink那样,输入输出集成相同的接口,可以自由转换,从需求上来看,是没有必要Sql -to- Sql -to- Sql 的必要的。

在转换过程中,我们引用了DSL,来承接前面的SQL解析,以及后续的SQL生成,于是,自然的将转换分成了2段,即输入转换(SourceMapper) 和 输出转换(SinkMapper)

而定义转换与否,以及转换动如何完成,我们可以轻松的通过java自带的 Function 接口来实现。

一个输入是可以接对接N条输出的,输出的方向也完全由实现 SinkFunction 的对象来自实现。 

如果后续,把任务并行化,Pipline 对外提供高阶函数的话, 画美不看...

DEMO:

    public static void main(String[] args) throws IOException {
        //输入
        FileSourceFunction fileSourceFunction = new FileSourceFunction();
        fileSourceFunction.init(new File("fff.txt"));

        //输出
        PrintlnSinkFunction<PrintStream> printSinkFunction = new PrintlnSinkFunction();
        ListSinkFunction listSinkFunction = new ListSinkFunction();


TransformPepline tp = new TransformPepline();
    //添加输入输出

tp.addSource(fileSourceFunction)
                .addSink(printSinkFunction)
                .addSink(listSinkFunction);
    //定制转换动作
        tp.addSourceMapFunction(new Function<String, String>() {
            SqlTransExecManager sqlTransExecManager = new SqlTransExecManager().build();
            @Override
            public String apply(String s) {
                return sqlTransExecManager.doParseAndTransform(s).getTargetSql();
            }
        });
        //执行
        tp.execute();
        System.out.println(listSinkFunction.getLists());
    }

关注 【 麒思妙想】解锁更多硬核。

历史文章导读

如果文章对您有那么一点点帮助,我将倍感荣幸

欢迎  关注、在看、点赞、转发 

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
1、支持绝大部分数据库,包括 大型数据库Oracle,Sybase(包括SQL AnyWhere),DB2,MS_SQL 中型数据库MS_Access,MySQL 桌面型数据库Paradox,DBF系列数据库,MS_Execl,Text 其他支持SQL 92标准的数据库 2、数据库的连接采用ADO连接,因此无需安装和卸载 3、支持SQL查询语句绝大部分语法 3.1 选择字段 3.1.1 Select [All] [Distinct]; 3.1.2 特殊语法,记录条数限定Top(MS_SQL),Rownum(Oracle), Limit(MySQL),Set RowCount(Sybase)) 3.1.3 字段表达式或者计算字段 3.2 选择表 (From) 3.3 条件筛选 (Where) 3.4 分组 (Group By) 3.5 组内条件 (Having) 3.6 排序 (Order By) 3.7 数据表的内连接、外连接 3.7.1 SQL 92 标准:Inner Join、Left Join、Right Join、Full Join, 3.7.2 特殊语法:*=、=*、*=*(MS_SQL,Sybase),(+)(Oracle) 3.8 联合 (Union [All],Minus,Intersect) 3.9 字段别名,数据表别名 3.10 SQL子查询表,内嵌SQL子句 4、粘贴字段、系统函数 5、SQL查询语句反向分析, 无论多么复杂的语句,都能分析得出来 包括上面提到的所有SQL语法 6、SQL文件拖放,然后反向分析 7、数据库视图创建和重建(目前仅支持Oracle,Sybase,MS_SQL) 8、附加Delphi 5和Delphi 6的控件包,支持Delphi 5,6开发环境 9、SQL语句智能换行 10、其他功能 10.1 SQL文件保存、打开 10.2 支持多个数据库连接 10.3 SQL语句关键词高亮度显示 10.4 简单SQL查询语句转换为Delete,Update,Insert语句
### 回答1: OLAP(在线分析处理)查询对象转SQL翻译器是一种工具,用于将OLAP查询对象(例如MDX查询或DAX查询)转换为SQL查询。这种翻译器通常用于将OLAP数据从数据仓库转移到关系型数据库或数据仓库中,以便在关系型数据库中进行分析或报告。OLAP查询对象转SQL翻译器还可以用于在OLAP数据源之间进行数据转换,例如将OLAP数据从一种OLAP引擎转移到另一种OLAP引擎。 ### 回答2: OLAP查询对象转SQL翻译器是一种软件工具,用于将在OLAP(联机分析处理)系统中定义的查询对象转换为SQL(结构化查询语言)语句。它的主要功能是将OLAP查询对象的语义和结构转化为能够在关系型数据库中执行的SQL查询。 通过将OLAP查询对象转换为SQL语句,可以实现与关系型数据库的无缝对接。这对于需要在OLAP系统和关系型数据库之间进行数据交互和处理的应用程序和用户非常有用。 OLAP查询对象转SQL翻译器的工作原理大致如下: 1. 识别和解析OLAP查询对象:这一步骤涉及解析用户在OLAP系统中定义的查询对象,包括查询的维度、度量、过滤条件等信息。 2. 转换为SQL语句:基于解析得到的查询对象信息,翻译器会生成相应的SQL语句。这包括选择语句(SELECT)用于选择需要的维度和度量,连接语句(JOIN)用于关联多个表,以及过滤条件(WHERE)用于从数据库中筛选需要的数据。 3. 优化SQL查询:翻译器还可以进行一些SQL查询的优化,以提高查询性能。这包括选择适当的索引、优化连接顺序等。 4. 执行SQL查询:生成的SQL语句可以直接在关系型数据库上执行,并返回相应的结果集。 5. 返回结果:翻译器将数据库返回的结果集重新格式化为OLAP系统可以识别的格式,并返回给用户或应用程序。 通过使用OLAP查询对象转SQL翻译器,用户可以在OLAP系统中定义复杂的查询对象,然后将其转换为高效的SQL查询在关系型数据库上执行。这样一来,可以充分利用关系型数据库的优势,如灵活的数据模型、强大的查询能力和可扩展性,同时又能够保留OLAP系统的分析和报表功能。 ### 回答3: OLAP查询对象转SQL翻译器是一种工具或软件,用于将OLAP查询对象转换为SQL查询语句。 OLAP(联机分析处理)是一种数据分析方法,可以快速并灵活地对大量数据进行多维分析。通过OLAP查询对象,用户可以指定数据的维度、度量和筛选条件,并定义数据之间的关系。然而,OLAP查询对象不能直接被数据库理解,因此需要将其转换为SQL语句。 一个OLAP查询对象转SQL翻译器能够识别查询对象的每个部分,包括维度、度量和筛选条件,并将其翻译为相应的SQL查询语句。例如,对于指定的维度,翻译器可以将其转换为SQL中的GROUP BY子句,用于按照指定的维度对数据进行分组。对于度量,翻译器可以将其转换为SQL中的聚合函数,用于计算数据的总和、平均值等。对于筛选条件,翻译器可以将其转换为SQL中的WHERE子句,用于过滤数据。 通过OLAP查询对象转SQL翻译器,用户可以方便地将OLAP查询对象转换为SQL查询语句,从而在关系型数据库上执行查询。这提供了更广泛的分析能力和更高效的数据处理能力,使用户能够更好地理解和利用数据。OLAP查询对象转SQL翻译器的使用也减少了用户需要学习和了解SQL语法的工作量,使得数据分析更加易于实现。 总之,OLAP查询对象转SQL翻译器是一种重要的工具,用于将OLAP查询对象转换为SQL查询语句,以实现更高效的数据分析和数据库查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麒思妙想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值