Teradata迁移BigQuery如何适配percentile_cont分组百分位语法
Teradata到BigQuery的百分位计算迁移方案
问题根因
BigQuery中PERCENTILE_CONT的语法规则和Teradata存在差异,你之前的写法存在两个核心错误:
- 混淆了聚合函数和窗口函数的使用场景:原Teradata逻辑是按
unique_id、rf_score分组后折叠计算每组的百分位值,属于聚合计算场景,不需要使用OVER窗口子句。 - 参数顺序和语法规则不匹配:BigQuery的聚合版
PERCENTILE_CONT不需要额外写ORDER BY指定排序字段,函数会自动对传入的计算字段做升序排列后计算百分位,和Teradata中WITHIN GROUP (ORDER BY col1)的逻辑完全等价。
可直接运行的等价SQL
SELECT unique_id, rf_score, PERCENTILE_CONT(col1, 0.75) AS a, PERCENTILE_CONT(col1, 0.5) AS b, PERCENTILE_CONT(col1, 0.25) AS c FROM your_table t1 GROUP BY 1, 2;
补充说明
如果后续需要用到窗口模式(不折叠行,为每一行附加所属分区的百分位值),才需要使用OVER子句,注意窗口版PERCENTILE_CONT的参数顺序和聚合版不同:第一个参数传百分位值,排序字段写在OVER子句内,参考写法如下:
SELECT unique_id, rf_score, col1, PERCENTILE_CONT(0.75) OVER (PARTITION BY unique_id, rf_score ORDER BY col1) AS a, PERCENTILE_CONT(0.5) OVER (PARTITION BY unique_id, rf_score ORDER BY col1) AS b, PERCENTILE_CONT(0.25) OVER (PARTITION BY unique_id, rf_score ORDER BY col1) AS c FROM your_table t1;
内容的提问来源于stack exchange,提问作者Curious_Insider
相关产品推荐
相关产品推荐

