博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据蒋堂 | 大数据计算语法的SQL化
阅读量:4228 次
发布时间:2019-05-26

本文共 2708 字,大约阅读时间需要 9 分钟。

作者:蒋步星

来源:数据蒋堂

本文共1602字建议阅读5分钟。
通过本文为大家解读为什么现在SQL变成了当前大数据计算语法的一个发展倾向。

回归SQL是当前大数据计算语法的一个发展倾向。在Hadoop体系中,现在已经很少有人会自己从头来写MapReduce代码了,PIG Latin也处于被淘汰的边缘,而HIve却始终坚挺;即使是Spark上,也在更多地使用Spark SQL,而Scala反而少很多。其它一些新的大数据计算体系一般也将SQL作为首选的计算语法,经过几年时间的混战之后,现在SQL又逐步拿回了主动权。

这个现象,大概有这么两个原因:

1. 实在没什么别的好用

关系数据库过于普及,程序员对SQL相当熟悉,甚至思维习惯都是SQL式的。SQL用来做一些常规查询也比较简单,虽然用于处理复杂的过程计算或有序运算并不方便,但其它那些替代技术也好不到哪里去,碰到SQL难写的运算一样要写和UDF相当的复杂代码,反正都是麻烦,还不如继续用SQL。

2. 大数据厂商的鼎力支持

大数据的技术本质是高性能,而SQL是性能比拼的关键阵地。比性能要面对同样的运算才有意义,过于专门和复杂的运算涉及的影响因素太多,不容易评估出大数据平台本身的能力。而SQL有国际标准的TPC系列,所有用户都看得懂,这样就有明确的可比性,厂商也会把性能优化的重点放在SQL上。

那么,回归SQL好吗?特别地,我们说,大数据的技术本质是高性能,回归并优化SQL对提高计算性能有多大帮助?

那要看是什么运算!

对于比较简单的查询,特别是多维分析式的查询,用SQL确实是不错的。这种运算被传统数据库厂商研究了几十年,实践出很多行之有效的优化手段。而Hadoop这种新型大数据平台,正好可以实习和实施这些经验,在性能上就更容易超越其它语法体系。

但是,对于更常见的过程性计算,SQL并不好用,不仅是开发困难,代码要写很长,而且对于提高性能也很难有什么帮助。

什么是过程性计算呢?就是一步写不出来,需要多次分步运算,特别是与数据次序相关的运算。

我们举几个例子来看:

  • 股票连续3天上涨后再涨1天的概率和平均涨幅,按所属板块和时间段分类对比

  • 与去年同期的收入销售额对比分析,要考虑到节假日的影响

  • 一周内累计登录时长超过一小时的用户占比,但要除去登录时长小于1分钟的误操作情况

  • 信用卡在最近三个月内最长连续消费的天数分布情况,考虑实施连续消费10天后积分三倍的促销活动

    ……

(为了便于理解,这些例子已经做了简化,实际情况的运算还要复杂很多)

对于过程性运算,用SQL写出来的难度就很大,经常还必须要写UDF才能完成。如果SQL写都写不出来,那么指望优化SQL来提高性能也就无从谈起了。有时候能用SQL勉强写出来,代码也会相当复杂,而复杂SQL的优化效果是很差的,在嵌套几层之后,数据库引擎也会晕掉,不知道如何优化。

举一个以前举过的简单例子,在1亿条记录中取最大的前10名,SQL本身没有集合数据类型,理论上会用比较笨的办法,先排序再找前10名。但好一点的数据库引擎都能优化这件事,碰到这样的SQL语句不会真地去做大排序。但是,如果这个运算写到了分组或者子查询里面(写法会不一样了),数据库引擎就未必能识别出来再做优化了。

提高这些复杂运算的性能,指望计算平台的自动优化是靠不住的,根本手段还要靠编写出高性能的算法。象过程运算中还常常需要保存中间结果以复用,SQL需要用临时表,多了IO操作就会影响性能,这都不是引擎优化能解决的事情,必须要去改写计算过程。

事实上,提高性能的本质实际上还是降低开发难度。软件无法提高硬件的性能,只能想办法设计复杂度更低的算法,而如果能够快速低成本地实现这些算法,那就可以达到提高性能的目标。如果语法体系难以甚至没办法描述高性能算法,必须迫使程序员采用复杂度较高的算法,那也就很难再提高性能了。显然,优化SQL运算几乎无助于降低它的开发难度,SQL语法体系就是那样,无论怎样优化它的性能,开发难度并不会改变,很多高性能算法仍然实现不了,也就难以实质性地提高运算性能。

编写UDF在许多场景时确实能提高性能,但一方面开发难度很大,另一方面这是程序员硬写的,也不能利用到SQL引擎的优化能力。而且经常并不能将完整运算都写成UDF,只能使用计算平台提供的接口,仍然要在SQL框架使用它的数据类型,这样还是会限制高性能算法的实现。

专栏作者简介

润乾软件创始人、首席科学家


清华大学计算机硕士,著有《非线性报表模型原理》等,1989年,中国首个国际奥林匹克数学竞赛团体冠军成员,个人金牌;2000年,创立润乾公司;2004年,首次在润乾报表中提出非线性报表模型,完美解决了中国式复杂报表制表难题,目前该模型已经成为报表行业的标准;2014年,经过7年开发,润乾软件发布不依赖关系代数模型的计算引擎——集算器,有效地提高了复杂结构化大数据计算的开发和运算效率;2015年,润乾软件被福布斯中文网站评为“2015福布斯中国非上市潜力企业100强”;2016年,荣获中国电子信息产业发展研究院评选的“2016年中国软件和信息服务业十大领军人物”;2017年, 自主创新研发新一代的数据仓库、云数据库等产品即将面世。


数据蒋堂

《数据蒋堂》的作者蒋步星,从事信息系统建设和数据处理长达20多年的时间。他丰富的工程经验与深厚的理论功底相互融合、创新思想与传统观念的相互碰撞,虚拟与现实的相互交织,产生出了一篇篇的沥血之作。此连载的内容涉及从数据呈现、采集到加工计算再到存储以及挖掘等各个方面。大可观数据世界之远景、小可看技术疑难之细节。针对数据领域一些技术难点,站在研发人员的角度从浅入深,进行全方位、360度无死角深度剖析;对于一些业内观点,站在技术人员角度阐述自己的思考和理解。蒋步星还会对大数据的发展,站在业内专家角度给予预测和推断。静下心来认真研读你会发现,《数据蒋堂》的文章,有的会让用户避免重复前人走过的弯路,有的会让攻城狮面对扎心的难题茅塞顿开,有的会为初入行业的读者提供一把开启数据世界的钥匙,有的甚至会让业内专家大跌眼镜,产生思想交锋。

往期回顾:










常规遍历语法

校对:林亦霖

为保证发文质量、树立口碑,数据派现设立“错别字基金”,鼓励读者积极纠错

若您在阅读文章过程中发现任何错误,请在文末留言,或到后台反馈,经小编确认后,数据派将向检举读者发8.8元红包

同一位读者指出同一篇文章多处错误,奖金不变。不同读者指出同一处错误,奖励第一位读者。

感谢一直以来您的关注和支持,希望您能够监督数据派产出更加高质的内容。

转载地址:http://jpfqi.baihongyu.com/

你可能感兴趣的文章
lua math.fmod使用注意小数问题
查看>>
lua 时间转化
查看>>
lua学习笔记之五(Lua中的数学库)
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第一篇:互联网时代U盘化生存方式 【张振华.Jack】
查看>>
CentOS6.4配置Hadoop-2.6.0集群配置安装指南(经过实战演练)【张振华.Jack】
查看>>
【屌丝程序的口才逆袭演讲稿50篇】第二篇:专注的力量 [张振华.Jack]
查看>>
BFS——求矩阵中“块”的个数
查看>>
BFS——走迷宫的最小步数
查看>>
并查集——好朋友
查看>>
关键路径
查看>>
Web前端学习笔记——JavaScript之事件详解
查看>>
Web前端学习笔记——JavaScript之事件、创建元素、节点操作
查看>>
Web前端学习笔记——JavaScript之正则表达式、伪数组、垃圾回收
查看>>
Web前端学习笔记——JavaScript 之继承、函数进阶
查看>>
Web前端学习笔记——JavaScript之面向对象游戏案例:贪吃蛇
查看>>
不做单元测试?小心得不偿失!嵌入式系统单元测试工具,自动生成测试用例
查看>>
一种实用的联网汽车无线攻击方法及车载安全协议
查看>>
光靠欺骗检测是不够的:对抗多目标跟踪的攻击
查看>>
基于微区块链的V2X地理动态入侵检测
查看>>
面向V2C场景的ADAS数字孪生模型构建方法
查看>>