표준 SQL의 HyperLogLog++ 함수

BigQuery는 HyperLogLog++ 알고리즘을 사용하여 다음 근사치 집계 함수를 지원합니다. 근사치 집계 함수의 작동 방식에 대한 설명은 근사치 집계를 참조하세요.

HLL_COUNT.INIT

HLL_COUNT.INIT(input [, precision])

설명

input 값을 한 개 이상 취해 HyperLogLog++ 스케치로 집계하는 스칼라 함수입니다. 각 스케치는 BYTES 데이터 유형을 사용하여 나타냅니다. HLL_COUNT.MERGE 또는 HLL_COUNT.MERGE_PARTIAL을 사용하여 스케치를 병합할 수 있습니다. 병합이 필요하지 않다면 HLL_COUNT.EXTRACT를 사용하여 스케치에서 고유 값의 최종 개수를 추출할 수 있습니다.

input은 다음 중 하나가 될 수 있습니다.

  • INT64
  • STRING
  • BYTES

이 함수는 선택적 매개변수인 precision을 지원합니다. 이 매개변수는 추정의 정확성을 정의하지만 그 대신 스케치를 처리하거나 디스크에 저장하려면 메모리가 추가로 필요합니다. 아래 표는 허용되는 정밀도 값, 그룹당 최대 스케치 크기, 일반적 정밀도의 신뢰 구간(CI)을 보여 줍니다.

정밀도 최대 스케치 크기(KiB) 65% CI 95% CI 99% CI
10 1 ±1.63% ±3.25% ±6.50%
11 2 ±1.15% ±2.30% ±4.60%
12 4 ±0.81% ±1.63% ±3.25%
13 8 ±0.57% ±1.15% ±1.72%
14 16 ±0.41% ±0.81% ±1.22%
15(기본값) 32 ±0.29% ±0.57% ±0.86%
16 64 ±0.20% ±0.41% ±0.61%
17 128 ±0.14% ±0.29% ±0.43%
18 256 ±0.10% ±0.20% ±0.41%
19 512 ±0.07% ±0.14% ±0.29%
20 1024 ±0.05% ±0.10% ±0.20%
21 2048 ±0.04% ±0.07% ±0.14%
22 4096 ±0.03% ±0.05% ±0.10%
23 8192 ±0.02% ±0.04% ±0.07%
24 16384 ±0.01% ±0.03% ±0.05%

입력이 NULL이면 이 함수는 NULL을 반환합니다.

자세한 내용은 HyperLogLog 실무: 첨단 카디널리티 추정 알고리즘의 알고리즘 엔지니어링을 참조하세요.

지원되는 입력 유형

BYTES

반환 유형

BYTES

SELECT
  HLL_COUNT.INIT(respondent) AS respondents_hll,
  flavor,
  country
FROM UNNEST([
  STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
  (1, "Chocolate", "CH"),
  (2, "Chocolate", "US"),
  (2, "Strawberry", "US")])
GROUP BY flavor, country;

HLL_COUNT.MERGE

HLL_COUNT.MERGE(sketch)

설명

여러 HyperLogLog++ 세트 스케치의 공용 구조체를 계산하여 해당 카디널리티를 반환하는 집계 함수입니다.

sketch의 정밀도는 동일해야 하고 동일한 유형에서 초기화되어야 합니다. 정밀도가 다른 스케치를 병합하거나 다른 유형에서 병합하려고 시도하면 오류가 발생합니다. 예를 들어 INT64 데이터에서 초기화된 스케치는 STRING 데이터에서 초기화된 스케치와 병합할 수 없습니다.

이 함수는 스케치를 병합할 때 NULL 값을 무시합니다. 0개의 행에서 또는 NULL 값에서만 병합이 이루어지는 경우, 함수는 0을 반환합니다.

지원되는 입력 유형

BYTES

반환 유형

INT64

SELECT HLL_COUNT.MERGE(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.MERGE_PARTIAL

HLL_COUNT.MERGE_PARTIAL(sketch)

설명

HyperLogLog++ sketch 입력을 한 개 이상 취해 새로운 스케치로 병합하는 집계 함수입니다.

이 함수는 입력이 없거나 모든 입력이 NULL일 경우 NULL을 반환합니다.

지원되는 입력 유형

BYTES

반환 유형

BYTES

SELECT HLL_COUNT.MERGE_PARTIAL(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.EXTRACT

HLL_COUNT.EXTRACT(sketch)

설명

단일 HyperLogLog++ 스케치의 카디널리티 추정치를 추출하는 스칼라 함수입니다.

sketch가 NULL이면 이 함수는 0 카디널리티 추정치를 반환합니다.

지원되는 입력 유형

BYTES

반환 유형

INT64

SELECT
  flavor,
  country,
  HLL_COUNT.EXTRACT(respondents_hll) AS num_respondents
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country);

+------------+---------+-----------------+
| flavor     | country | num_respondents |
+------------+---------+-----------------+
| Vanilla    | CH      | 1               |
| Chocolate  | CH      | 1               |
| Chocolate  | US      | 1               |
| Strawberry | US      | 1               |
+------------+---------+-----------------+
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.