MySQL:小型关系型数据库管理系统(DBMS)、免费、体积小、适用于一般的个人使用者和中小型企业
SQL Server:全面的大型关系型数据库管理系统、使用集成的商业智能工具提供企业级的数据管理、包含免费入门级版本SQL Server Express(小型DBMS)
Oracle:大型DBMS、完整的数据管理功能、具有完备关系的产品、具有分布式处理功能、数据安全性强
Hive:基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制,hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。hive 构建在基于静态批处理的Hadoop 之上,hive 并不能够在大规模数据集上实现低延迟快速的查询。具体Hive相关见公众号历史文章《HIVE介绍(1)》
Presto:见下文
Spark SQL:是Spark用来处理结构化数据的一个模块。Hive是将Hive SQL转为MapReduce,但MapReduce这种计算模型执行效率比较慢,而它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用,将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!也支持从Hive中读取数据。
1. 什么是Presto

Presto最初是Facebook为数据分析师设计和开发的,用于在Apache Hadoop中的大型数据仓库上运行交互式查询。 在Presto诞生之前,Facebook的数据分析师依靠Apache Hive在他们PB级的数据仓库上运行SQL分析。Hive不适合Facebook的规模,而Presto是为了填补快速查询这块的差距而发明的。最初的开发始于2012年,并于当年晚些时候部署在Facebook上。2013年11月,Facebook宣布将其开源。 来源:中文维基百科:Presto (SQL查询引擎)
Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。
Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题。
Presto以分析师的需求作为目标,他们期望响应时间小于1秒到几分钟。Presto终结了数据分析的两难选择,要么使用速度快的昂贵的商业方案,要么使用消耗大量硬件的慢速的“免费”方案。
来源:http://prestodb.jd.com/index.html
实际使用体验:
2. Presto常用函数

try()、coalesce(value[,...])
异常捕捉、hive无此函数
try函数类似于python中的try...except...,能够捕捉异常,若括号中的表达式报错,通过try函数将会返回NULL值,其一般结合coalesce()使用,coalesce函数返回参数列表的第一个非空值。try函数常应用于以下场景:
分母为0
select coalesce(try(5 / 0), 0)# 0select coalesce(try(5 / 1), 0)# 5select coalesce(null, 1, 2, 3, 4)# 1select coalesce(null, null, 2, 3, 4)# 2select coalesce(null, null, null, 3, 4)# 3# ⚠️coalesce的参数必须同一个数据类型
cast函数转换错误(可用try_cast()替代)
select try(cast('2020-01-14' as bigint))# NULLselect try_cast('2020-01-14' as bigint)# NULL
列转行函数:cross join
# 列转行前:# |student | SCORES |# --------- --------------# | 王明 | 85,46,92,100|select student, scorefrom (select '马哈哈' student, '99,100,98,100' as SCORES) tcross join unnest(split(SCORES,',')) as t(score)# 列转行后:# |student | score|# --------- ------# | 马哈哈 | 99 |# | 马哈哈 | 100 |# | 马哈哈 | 98 |# | 马哈哈 | 100 |
json处理字段
json_extract(json, json_path)
返回结果格式为json
json_extract_scalar(json, json_path)
返回结果格式为varchar
select json_extract('{"flagtype":"活动ID", "flagvalue":"测试flagvalue", "其他":"测试其他"}', '$.其他')# "测试其他"select json_extract_scalar('{"flagtype":"活动ID", "flagvalue":"测试flagvalue", "其他":"测试其他"}', '$.其他')# 测试其他
-未完待续-

关注一下,更多精彩等着你!




