Google BigQuery APPROX_QUANTILES并获得真正的四分位数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Google BigQuery APPROX_QUANTILES并获得真正的四分位数相关的知识,希望对你有一定的参考价值。

根据docs

返回一组表达式值的近似边界,其中number表示要创建的分位数的数量。此函数返回一个数字+ 1元素的数组,其中第一个元素是近似最小值,最后一个元素是近似最大值。

听起来如果我想要真正的四分位数,我需要使用将返回APPROX_QUANTILES(values, 4)[minvalue, 1st quartile, 2nd quartile, 3rd quartile, maxvalue]

根据https://en.wikipedia.org/wiki/Quartile,四分位数集包含3个数据点 - 其中没有一个是数据的最小值/最大值。

我的假设是否正确? APPROX_QUANTILES(values, 4)会回归真正的四分位数吗?

答案

作为基线,这是没有任何修改的输出,使用1到100之间的数字输入:

SELECT APPROX_QUANTILES(x, 4) AS output
FROM UNNEST(GENERATE_ARRAY(1, 100)) AS x;
+----------------------------+
|           output           |
+----------------------------+
| ["1","25","50","75","100"] |
+----------------------------+

输出包括最小值(1)和最大值(100)。如果您只想要四分位数,则需要将它们从数组中剥离。出于可读性/可组合性的考虑,最好使用临时SQL UDF来完成此操作。这里我使用INT64作为元素类型,但你可以有不同的元素类型,或者:

CREATE TEMP FUNCTION StripFirstLast(arr ARRAY<INT64>) AS (
  ARRAY(SELECT x FROM UNNEST(arr) AS x WITH OFFSET
  WHERE OFFSET BETWEEN 1 AND ARRAY_LENGTH(arr) - 2)
);

SELECT
  APPROX_QUANTILES(x, 4) AS output,
  StripFirstLast(APPROX_QUANTILES(x, 4)) AS quartiles
FROM UNNEST(GENERATE_ARRAY(1, 100)) AS x;
+----------------------------+------------------+
|           output           |    quartiles     |
+----------------------------+------------------+
| ["1","25","50","75","100"] | ["25","50","75"] |
+----------------------------+------------------+

您可以看到quartiles数组仅包含所需的值。

以上是关于Google BigQuery APPROX_QUANTILES并获得真正的四分位数的主要内容,如果未能解决你的问题,请参考以下文章

com.google.cloud.bigquery.BigQueryException:读取超时

将表从 google bigquery 导出到 google 存储

Google BigQuery 的 Google App Engine 授权

使用命令行将数据从 BigQuery 加载到 Google 表格中

Google 标准 SQL UDF - 写入 BigQuery

将数据从 Google 永久磁盘加载到 BigQuery?