#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 на практике: алгоритмическая разработка современного алгоритма оценки мощности. Там для небольших мощностей используется разреженное представление. Проблема в том, что поддержание разреженного представления, а также критерии переключения на плотное представление четко не определены. Возможно, реализация показывает зависимость от порядка обработки данных. Итак, если порядок обработки и слияния не определены четко, может случиться так, что вы окажетесь либо в разреженном представлении, либо в плотном представлении, что приведет к несколько разным оценкам.