与hive
相似
注意语句不能换行。
./presto --server prestoMaster:7878 --catalog hive --schema sss --output-format CSV --execute " select * from hive.database.table "> /home/log.txt
文件中的sql可以换行
./presto --server prestoMaster:7878 --catalog hive --schema sss --output-format CSV --file sql.sql > /home/log.txt
hive
不同点nvl(A,B)
coalesce(A,B)
from_unixtime(timestamp, 'format')
可以直接将时间戳转换成对应格式的日期时间format_datetime(from_unixtime(timestamp),'format')
-- HIVE
select from_unixtime(1597719329,'yyyy-MM-dd HH:mm:ss') -- 2020-08-18 10:55:29
-- PRESTO
select format_datetime(from_unixtime(1597719329),'yyyy-MM-dd HH:mm:ss') -- 2020-08-18 10:55:29
presto中整数和整数相除,结果为整数。应该采用 a*1.00/b
指定多个列进行分组,结果列中不属于分组列的将被设置为NUll。
-- 不去重汇总
select coalesce(dt, '汇总') dt, sum(cnt) as cnt
from
(select dt,count(distinct concat(channel, user_id)) as cnt from table group by dt) a
group by
grouping sets((dt),());
-- 去重汇总
select coalesce(dt, '汇总') dt,count(distinct concat(channel, user_id)) as cnt
from table
group by
grouping sets((dt),());
分析函数(如:sum(),max(),row_number()…) + 窗口子句(over函数)
常用row_number() over()
来对样本进行排序
select row_number() over(partition by 字段 order by 字段 desc ) as rank
当日日期
select current_date; -- yyyy-MM-dd
select format_datetime(current_date,'yyyyMMdd'); -- yyyyMMdd
日期-1天
select current_date - interval '1' day ; -- yyyy-MM-dd
select cast(format_datetime(date_parse('20200819','%Y%m%d') - interval '1' day,'yyyyMMdd') as varchar) ; -- yyyyMMdd
月/年初日期
select date_trunc('month',current_date); -- 月初日期
select date_trunc('year',current_date); -- 年初日期
间隔月份:当前月份-计算月份+1
8月2号-8月19号:1月
7月30号-8月19号:2月
select cast(date_diff('month',date_trunc('month',cast('2020-08-19' as date)),current_date ) as int)+1 ;