QUALIFY 窗口过滤

传统方式(使用CTE):

sql
WITH ranked_data AS (
  SELECT 
    user_id,
    ip,
    country_code,
    os,
    RANK() OVER (PARTITION BY user_id ORDER BY log_datetime DESC) AS previous_logins
  FROM login_logs
)
SELECT user_id, ip, country_code, os
FROM ranked_data
WHERE previous_logins = 1;

使用 QUALIFY 的方式:

sql
SELECT 
  user_id,
  ip, 
  country_code,
  os,
  RANK() OVER (PARTITION BY user_id ORDER BY log_datetime DESC) AS previous_logins
FROM login_logs
QUALIFY previous_logins = 1;

 

可以看到,使用 QUALIFY 减少了代码行数,避免了额外的嵌套层级,查询意图更加直观。需要注意的是,QUALIFY 主要带来的是代码简洁性和可读性的提升,在性能上可能不会有显著改善。

支持版本: Spark 3.2.0 及以上

 阿里云maxcompute sql也支持
posted @ 2025-10-20 16:53  ---江北  阅读(6)  评论(0)    收藏  举报
TOP