我想知道是否有一种方法可以计算在APPROX_QUANTILES
创建的存储桶中找到了多少个元素?我猜我实际上正在寻找的是在BigQuery Standard SQL中创建直方图的方法。可以选择这样做吗?
答案 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
可视化,我们得到类似的东西
哪个告诉我们:
APPROX_QUANTILES
来构建直方图,因为每个存储桶最终将拥有大约相同数量的元素。那就是分位数的目标。APPROX_QUANTILES
非常“ APPROX”。如您所见,每个分位数最终都没有相同数量的元素。答案 1 :(得分:0)
我认为您可能希望使用APPROX_TOP_COUNT
function来代替,它返回最前面的元素的频率达到您提供的限制。
从文档中:
$ sudo apt-get upgrade libgdal-dev
$ sudo apt-get upgrade libproj-dev
$ sudo apt-get upgrade gdal-bin