前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用中文进行大数据查询

用中文进行大数据查询

作者头像
麒思妙想
发布2020-07-10 13:15:16
9260
发布2020-07-10 13:15:16
举报
文章被收录于专栏:麒思妙想

概述

如何降低人们使用数据的门槛,这是一个有意思,而又不那么容易回答的问题。大家习惯从WYSIWYG(What You See Is What You Get)的角度去出发,由此诞生了一些列的分析工具,例如Tableau,Pentaho

但是在拖拽语义和查询语义的表达和翻译上,总会产生歧义,这样的结果势必就造成了,如果我们更倾向于降低门槛,那我们就必须舍弃一部分功能,如果我们选择了功能,那么我们就需要让渡一些易用性了。

对于熟悉使用SQL的人来说,可能没有什么比直接使用SQL更简单的方式来获取数据了。 但是非技术人员,看到SQL可能就像看天书了。

我实现了一个简版的中文查询的DSL,下面我们通过一个实例,来讲解一下这个DSL,以及他是如何实现的!

实例

从技术上讲,这也是一门DSL,只是用中文来做了关键字。下面我们来看一个实例:

代码语言:javascript
复制
         查询 {
            本次 使用 数据库{
//                username="1"
//                password="1"
//                url="jdbc:mysql://localhost:3306/1"
//                driver="com.mysql.jdbc.Driver"
            }
            本次  表 组("gtp_user","gtp_user_role")
            本次  字段 组("gtp_user.name","gtp_user_role.role_id")

            本次  条件 "gtp_user.name = 'admin'"
            本次  聚合 组("gtp_user.name","gtp_user_role.role_id")
            本次  排序 组("gtp_user_role.role_id")
            本次  截取 (1 到 11)

        } 画 线图

下面我们来逐步解析这个案例,首先构建一个查询,这其实是在构建一个查询对象,在这个查询对象的作用域内,本次代表当前的查询。

说明

首先需要指定使用的数据库,本次 使用 数据库 {} 里面可以使用你自己的数据源,去掉注释,修改成你自己的数据源即可。目前只设置了基础属性。

现在支持的查询谓词: 字段条件聚合排序截取

支持的动作谓词: 线图饼图)、CSVHTMLJSON

其他:

:用来设置查询的表,输入 表名,必填属性,需要使用双引号括起来。可与组联用。

字段:用来设置查询字段,输入 表名.字段名 ,必填属性,需要使用双引号括起来。可与组联用。

条件:用来设置查询条件表达式,暂时只能将所有条件一起输入, 可选属性,需要使用双引号括起来。

聚合:用来设置查询的聚合字段,输入 表名.字段名, 可选属性,需要使用双引号括起来。可与组联用。

排序:用来设置查询的排序字段,输入 表名.字段名, 可选属性,需要使用双引号括起来。可与组联用。

截取 :用来设置查询的结果集数量,输入 数字,例如:到 10,就是取前10条,或是输入 (数字 到 数字) , 例如: (5 到 10),获取从第五条开始的10条数据。

:用来将结果输出,目前支持,线图、饼图和表,不需要使用双引号括起来

:用来讲结果格式化输出,目前支持格式CSV、HTML、JSON,需要使用双引号括起来

实现

这个DSL整体的执行流程,如下图:

首先DSL,会提交给解析程序,解析成携带数据的节点,然后根据节点进行逻辑计划及优化程序,然后交给物理引擎取执行。

目前解析器,使用了kotlin作为语法解析器,JOOQ充当物理计划执行器。

其实groovy的AST更适合做DSL,但是社区的活跃度明显不如kotlin。而且kotlin的语法特性也相当不错,构建DSL也是信手拈来,整个DEMO到现在写了10来个小时,已经可以初步的玩一玩了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 麒思妙想 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实例
  • 说明
  • 实现
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档