Используя функции HyperLogLog в BigQuery, можно ли получить разные результаты от одного и того же запроса к одним и тем же данным?

#google-bigquery #hyperloglog

#google-bigquery #hyperloglog

Вопрос:

Мой запрос выглядит так:

 SELECT
    HLL_COUNT.MERGE((SELECT HLL_COUNT.INIT(key.item) FROM UNNEST(data.list) key)),
FROM dataset
 

допустим, я запускаю этот запрос 10000 раз (для одного и того же набора данных), получу ли я 10000 идентичных результатов или небольшой процент раз, когда я могу получить немного разные результаты?

В документации я не нашел объяснений по этой теме, и я хотел бы понять это без необходимости запускать тысячи раз мой запрос 😉

Ответ №1:

Я бы сказал, что вы получаете идентичные результаты с очень высокой вероятностью. Однако, не зная подробно реализацию, вы не можете сказать это со 100% уверенностью. BigQuery использует алгоритм HLL , как описано в статье HyperLogLog на практике: алгоритмическая разработка современного алгоритма оценки мощности. Там для небольших мощностей используется разреженное представление. Проблема в том, что поддержание разреженного представления, а также критерии переключения на плотное представление четко не определены. Возможно, реализация показывает зависимость от порядка обработки данных. Итак, если порядок обработки и слияния не определены четко, может случиться так, что вы окажетесь либо в разреженном представлении, либо в плотном представлении, что приведет к несколько разным оценкам.