quantile - 高效使用 BigQuery 的 APPROX_QUANTILES

标签 quantile google-bigquery

现在,如果我想获得某个值的十分位数,我会这样做

SELECT
    APPROX_QUANTILES(value, 100)[SAFE_ORDINAL(10)] as p10,
    APPROX_QUANTILES(value, 100)[SAFE_ORDINAL(20)] as p20,
    APPROX_QUANTILES(value, 100)[SAFE_ORDINAL(30)] as p30,
    APPROX_QUANTILES(value, 100)[SAFE_ORDINAL(40)] as p40,
    APPROX_QUANTILES(value, 100)[SAFE_ORDINAL(50)] as p50,
    APPROX_QUANTILES(value, 100)[SAFE_ORDINAL(60)] as p60,
    APPROX_QUANTILES(value, 100)[SAFE_ORDINAL(70)] as p70,
    APPROX_QUANTILES(value, 100)[SAFE_ORDINAL(80)] as p80,
    APPROX_QUANTILES(value, 100)[SAFE_ORDINAL(90)] as p90,
    APPROX_QUANTILES(value, 100)[SAFE_ORDINAL(100)] as p100
FROM table

我想确保这不会使大型查询的工作量增加 10 倍,并且是否有更紧凑的方式来编写此内容

最佳答案

如果您运行查询,然后检查执行计划,您将看到 BigQuery 仅计算一次分位数,然后在第二步中提取数组的各个元素。您无需担心自己尝试对 APPROX_QUANTILES 聚合进行重复数据删除。

Sample execution plan

关于quantile - 高效使用 BigQuery 的 APPROX_QUANTILES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50959540/

相关文章:

java - 如何使用partitionedBy计算按列分组的百分位数?

postgresql - PostgreSQL 中第 n 行的 p 分位数

python - 可以在不填充数据的情况下创建 BigQuery 表/模式吗?

google-app-engine - 如何在 Google Cloud Platform 中为 BigQuery 用户授予个人权限

r - 基于不同 R 包中的 GPD 计算返回水平

r - 如何用 R 中另一个变量的分位数创建一个变量?

google-cloud-platform - GCP BigQuery 如何通过 python api 将到期日期设置为表

google-analytics - 计算嵌套字段而不丢失 BigQuery 中的导出架构

python - 如何在 Python 中运行 BigQuery 查询