BigQuery:计算APPROX_QUNATILES中的元素

时间:2019-06-04 13:05:20

标签: google-bigquery

我想知道是否有一种方法可以计算在APPROX_QUANTILES创建的存储桶中找到了多少个元素?我猜我实际上正在寻找的是在BigQuery Standard SQL中创建直方图的方法。可以选择这样做吗?

2 个答案:

答案 0 :(得分:1)

问题的标题为“计数APPROX_QUANTILES中的元素”,我将回答这个问题。最终目标是to build a histogram, please see this question

要计算每个存储桶中的元素数量,我们可以执行以下操作:

WITH data AS ( 
    SELECT *, ActualElapsedTime datapoint
    FROM `fh-bigquery.flights.ontime_201903`
    WHERE FlightDate_year = "2018-01-01" 
    AND Origin = 'SFO' AND Dest = 'JFK'
  )
  , quantiles AS (
  SELECT *, IFNULL(LEAD(bucket_start) OVER(ORDER BY bucket_i) , 0100000) bucket_end
  FROM UNNEST((
    SELECT APPROX_QUANTILES(datapoint, 10)
    FROM data
  )) bucket_start WITH OFFSET bucket_i
) 

SELECT COUNT(*) count, bucket_i
  , ANY_VALUE(STRUCT(bucket_start, bucket_end)) b, MIN(datapoint) min,  MAX(datapoint) max
FROM data
JOIN quantiles
ON data.datapoint >= bucket_start AND data.datapoint < bucket_end
GROUP BY bucket_i
ORDER BY bucket_i

enter image description here

可视化,我们得到类似的东西

enter image description here

哪个告诉我们:

  • 请勿使用APPROX_QUANTILES来构建直方图,因为每个存储桶最终将拥有大约相同数量的元素。那就是分位数的目标。
  • APPROX_QUANTILES非常“ APPROX”。如您所见,每个分位数最终都没有相同数量的元素。
  • 从SFO飞往肯尼迪国际机场大约需要305至357分钟。

答案 1 :(得分:0)

我认为您可能希望使用APPROX_TOP_COUNT function来代替,它返回最前面的元素的频率达到您提供的限制。

从文档中:

$ sudo apt-get upgrade libgdal-dev
$ sudo apt-get upgrade libproj-dev
$ sudo apt-get upgrade gdal-bin