RANK() OVER (PARTITION BY date, category ORDER BY sales DESC) as rank_in_category,
sales - LAG(sales, 1, 0) OVER (PARTITION BY product ORDER BY date) as sales_growth
FROM
daily_sales
WHERE
date >= current_date - INTERVAL '30' DAY
ORDER BY
date, category, rank_in_category
复制代码
明白和机动运用这样的复杂查询,可以资助你解决很多实际业务问题。
3. 查询优化进阶
在之前,我们简单提到了查询优化。现在让我们深入探讨一些详细的优化技巧:
a) 分区裁剪:确保你的查询条件能够使用表的分区信息。比方:
-- 低效查询
SELECT * FROM large_table WHERE date >= DATE '2023-01-01' AND date < DATE '2023-02-01'
-- 优化后的查询
SELECT * FROM large_table WHERE date_partition = '2023-01'
复制代码
b) 谓词下推:尽可能将过滤条件下推到数据源。Presto通常会主动做这个优化,但了解这个概念可以资助你写出更高效的查询。
c) 制止笛卡尔积:始终提供正确的连接条件,制止产生大量中间结果。
d) 使用近似函数:对于大规模数据,使用approx_distinct()取代COUNT(DISTINCT)可以显著提升性能。
4. Presto的内存管理