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)