BigQuery: считать элементы в APPROX_QUNATILES - PullRequest
0 голосов
/ 04 июня 2019

Мне было интересно, есть ли способ подсчитать, сколько элементов найдено в корзинах, созданных APPROX_QUANTILES? Я думаю, что на самом деле я ищу способ создания гистограмм в BigQuery Standard SQL. Есть ли возможность сделать это?

Ответы [ 2 ]

1 голос
/ 04 июня 2019

В заголовке вопроса написано «Подсчитать количество элементов в APPROX_QUANTILES», и я собираюсь на это ответить.Поскольку вашей конечной целью является для построения гистограммы, см. Этот вопрос .

Чтобы подсчитать количество элементов в каждом сегменте, мы можем сделать что-то вроде:

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 очень "ПРИБЫЛЬ".Как вы можете видеть, каждый квантиль не получал одинаковое количество элементов.
  • От SFO до JFK требуется от ~ 305 до ~ 357 минут.
0 голосов
/ 04 июня 2019

Я думаю, что вам может потребоваться функция APPROX_TOP_COUNT , которая возвращает частоту верхних элементов до заданного вами предела.

Из документации:

SELECT APPROX_TOP_COUNT(x, 2) as approx_top_count
FROM UNNEST(["apple", "apple", "pear", "pear", "pear", "banana"]) as x;

+-------------------------+
| approx_top_count        |
+-------------------------+
| [{pear, 3}, {apple, 2}] |
+-------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...