基于简单sql语句的sql解析原理及在大数据中的应用

李万鸿

通常sql语法解析都是以lex、yacc进行分析为基础的,是逐个字符进行分析,性能不高,如果基于没有子查询的sql语句进行解析,则速度会提高许多,在此对其原理加以说明。

一般sql语句十分复杂,包含多层嵌套,但其中有规律可循,其特点是所有的语句基本模式是一样的,即:都是SELECT  FROM  WHERE类型的简单语句,因此,可以把嵌套的语句逐条解析为这种简单语句。由于sql语句的语法是一样的,所以可以用递归的方法对语句加以解析,从而把sql语句解析为多条简单的子SQL语句。然后通过一个方法分别解析这些子sql语句。这样处理,算法简单有效,极大地提高性能,对于SQL语法解析来说是一个革命性的新思路。

大数据通常使用HBASE等NOSQL,对于sql开发来说极为不便,为此,采用分布式的关系数据库来保存大数据极具实用价值,比如用ORACLE、MYSQL把一张表分库保存到多个数据库,这样既可以处理海量数据又适用于传统的编程,支持MYBATIS、SPRING、HIBERNATE,开发极为方便。相应的难点是各个分库的表的ID的唯一性和SQL语句的处理。

对于ID的唯一性解决不难,关键在于分布式SQL的处理。随着SPARK等大数据软件应运而生,对于分布式数据的处理来说正当其时。可以用SPARK来处理分布的数据,那么如何得到这些数据呢?为此,可以通过本文提出的SQL解析原理对SQL语句进行解析,把一条复杂的SQL语句解析为多简单的SQL语句,如
SELECT A.*FORM USER  A WHERE  A.ID>222,然后通过数据字典找到USER表对应的分库,在各个分库上执行查询,然后把各个查询结果用SPARK处理,对于其他的子SQL语句如法炮制,然后根据主SQL语句的条件如JOIN、GROUP
BY、ORDER BY等对所有的查询数据进行运算汇总处理,最后返回结果。

总之,通过获取各个简单的子SQL语句进行语法解析或语句分解,是一个行之有效的好办法,简单巧妙地解决了一个公共的难题,尤其对于采用高效数据库处理大数据有特殊的意义,为其奠定了基石。这是一个极为有效的解决办法,值得应用。

2014-10-17

时间: 2024-10-02 20:36:34

基于简单sql语句的sql解析原理及在大数据中的应用的相关文章

sql语句优化SQL Server

MS   SQL   Server查询优化方法查询速度慢的原因很多,常见如下几种 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)          2.I/O吞吐量小,形成了瓶颈效应.          3.没有创建计算列导致查询不优化.          4.内存不足          5.网络速度慢          6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)          7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)   

高效SQL语句(SQL Server)

以下的SQL语句以Northwind为例 1.不要再where子句中"="的左侧使用函数和表达式,因为系统无法应用函数或表达式中的索引 SELECT * FROM Customers WHERE Cast(CustomerID AS VARCHAR(20))='1' --Clustered Index Scan 全表扫描SELECT * FROM Customers WHERE CustomerID ='1' --Clustered Index Seek 索引扫描 2.只返回必要的行或

通过sql语句,取得userId,commentId,AdminId对应users表中的userName。

有一个用户表users,其字段:userId,userName,.....userId为该表的主键. 有另一个表d表,其字段:Id,userId,commentId,AdminId,.......Id为该表的主键,userId,commentId,AdminId为users表的外键. 问:如何通过sql语句,取得userId,commentId,AdminId对应users表中的userName. 答:select a.userName,b.userName,c.userName from d

查看SQL语句在SQL Server上的执行时间

set statistics profile onset statistics io onset statistics time ongo--begin <这里写上你的语句...>  select * from ......  --end <这里写上你的语句...> set statistics profile offset statistics io offset statistics time OFFgo --执行后查看[消息],有很清楚的执行情况. 查看SQL语句在SQL S

mysql进阶 十九 SQL语句如何精准查找某一时间段的数据

SQL语句如何精准查找某一时间段的数据 在项目开发过程中,自己需要查询出一定时间段内的交易.故需要在sql查询语句中加入日期时间要素,sql语句如何实现? SELECT * FROM lmapp.lm_bill where tx_time Between '2015-12-20' And '2015-12-31'; 仔细研究还是能够发现一些细节性的问题的. SQL语句1 SELECT * FROM lmapp.lm_bill where merch_uid='S18853883587' AND 

常见SQL语句和SQL基础知识

引自:http://blog.csdn.net/u012467492/article/details/46790205 SQL语句考察(一) 1.查询出每门课都大于80 分的学生姓名 name   kecheng   fenshu张三    语文       81张三     数学       75李四     语文       76李四     数学       90王五     语文       81王五     数学       100王五     英语       90 A: selec

数据库SQL语句学习笔记(3)-排序检索数据

1.排序数据 如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序.但是如果数据随后进行过更新或删除,这个顺序就会受到DBMS重用回收存储空间的方式的影响. 子句:SQL语句由子句构成,有些子句是必须的,有些则是可选的.一个子句通常是由关键字加上所提供的数据组成.例如我们上个笔记中提到的SELECT语句中的FROM子句. 排序需要用到ORDER BY子句 SELECT prod_name FROM Products ORDER BY prod_name; 一定要

SQL语句基础之 管理数据库,表 和 数据

MySQL中的基本sql语句 MySQL中主要有三个大的对象,第一个是数据库,有了数据库后,我们才能在数据库里面建表,因为Mysql是关系数据库,它的数据都会以记录的形式存到表里,所以第二个是表,然后第三个才是数据.下面我们根据这个关系来学习一下mysql中的sql语句~ Sql语句管理数据库 1.查看Mysql中有哪些数据库 语句:show databases 2.创建一个数据库 语句: create database vmaxtam default character set utf8;--

【51CTO/BBS】SQL 语句中有没有清除控制台显示(返回)数据的命令啊??

原帖地址:http://bbs.51cto.com/viewthread.php?tid=1133377&extra=&page=1 问题描述: 随着学习的进步,SQL语句变得越来越复杂. 一个SQL存储过程中,很可能调用多个存储过程.导致返回的数据凌乱不堪.   请教如何清除掉,这些不需要的返回显示的数据. 特别是用 其它编程语言调用SQL时,会导致无法获取到正确的返回数据集...... 例如:         [存储过程A]有多个SELECT语句,           SELECT @