Presto相关教程


zepplin中使用presto

%presto
-- 用户信息查询
select 
id,name,phone,age
from biz.users

presto正则表达式

-- 查询中文
select regexp_extract(ext,'[\u4e00-\u9fa5]+')
-- 查询电话号码
select regexp_extract('25120821384753112345','1[3-9][0-9]{9}')
-- 查询已id=开始的数字
select regexp_extract('xxxx?id=143500&xxxxx','(?<=id\=)(\d+)')

解析json

select json_extract_scalar(details, '$.rule')
select json_extract(details, '$.rule')

presto时间

-- 查询今天
select current_date
-- 查询昨天
select date_add('day',-1,current_date)
-- 查询前7天
select date_add('day',-7,current_date)
-- 查询本月第1天
select date_trunc('month', current_date)
-- 计算时间差:unit为day,month,year等
select date_diff(unit, timestamp1, timestamp2)
-- sparksql语法:
select date_add(current_date,-1)

presto保留百分位

select concat(cast(round(分子*1.00/分母*100,2) as varchar),'%')

presto中的ifnull函数
presto中没有ifnull或者ifna函数,用以下方式代替

1.coalesce(expr,defaultvalue)
2.if(expr is not null,expr,defaultvalue)

#mysql中可用IFNULL(expression, alt_value)

presto建表

-- 需要注意的是,分区放在最后一个字段 
CREATE TABLE IF NOT EXISTS TableName( 
cid integer, 
userid integer, 
view_pv  bigint, 
view_pv2  bigint, 
view_pv6  bigint, 
view_pv12  bigint, 
view_pv13  bigint, 
view_pv10  bigint, 
thedate varchar(10) 
) WITH ( format = 'ORC', partitioned_by = ARRAY['thedate'] )

presto写表

insert into TableName 
select * from xxxx

presto炸裂函数
炸裂函数用的比较少,主要用于一行转多行

select 
a.id,a.supplier_order_no,a.shop_order_id,a.shop_order_sub_id,a.supplier_id,a.express_id,cast(sub_id as int) as sub_id
from biz.order a
CROSS JOIN UNNEST(split(shop_order_sub_id, ',')) as t(sub_id)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM