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