暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Presto之常用SQL函数(1)

大数据渡劫 2020-01-14
2398

从事数据分析相关工作,熟悉SQL是必不可少的一项技能,被使用较广的包括:
  • 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)
# 0
select coalesce(try(5 / 1), 0)
# 5


select coalesce(null, 1, 2, 3, 4)
# 1
select coalesce(null, null, 2, 3, 4)
# 2
select coalesce(null, null, null, 3, 4)
# 3
# ⚠️coalesce的参数必须同一个数据类型
  • cast函数转换错误(可用try_cast()替代)

select try(cast('2020-01-14' as bigint))
# NULL
select try_cast('2020-01-14' as bigint)
# NULL
>>>>

列转行函数:cross join


# 列转行前:
# |student | SCORES |
# --------- --------------
# |  王明   | 85,46,92,100|


select student, score
from (select '马哈哈' student, '99,100,98,100' as SCORES) t
cross 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", "其他":"测试其他"}', '$.其他')
# 测试其他

-未完待续-


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

文章转载自大数据渡劫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论