카테고리:

집계 함수 (Cardinality Estimation) , 윈도우 함수

DATASKETCHES_HLL

입력의 고유 카디널리티 근사값을 반환합니다(즉, DATASKETCHES_HLL(col1)COUNT(DISTINCT col1) 의 근사값을 반환합니다).

이 함수는 Apache DataSketches 에서 사용하는 형식의 이진 스케치를 읽을 수 있는 HLL HyperLogLog 함수의 버전입니다. 자세한 내용은 Apache DataSketches 설명서 를 참조하십시오.

참고 항목:

DATASKETCHES_HLL_ACCUMULATE , DATASKETCHES_HLL_COMBINE , DATASKETCHES_HLL_ESTIMATE

구문

집계 함수

DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
Copy

윈도우 함수

DATASKETCHES_HLL( [ DISTINCT ] <expr1> [ , <max_log_k> ] )
  OVER ( [ PARTITION BY <expr2> ] )
Copy

필수 인자

expr1

고유값의 개수를 알고자 하는 식입니다.

선택적 인자

max_log_k

HLL 오브젝트를 초기화하기 위한 K의 최대값(log2)입니다. 4에서 21 사이의 INTEGER 값을 지정합니다. 자세한 내용은 Apache DataSketches 설명서 를 참조하십시오.

기본값: 12

expr2

행을 파티션으로 그룹화하는 데 사용되는 선택적 식입니다.

반환

함수는 DOUBLE 형식의 값을 반환합니다.

입력이 비어 있으면 출력은 0.0 입니다.

사용법 노트

  • DISTINCT 는 구문적으로 지원되지만, 효과가 없습니다.

  • 이 함수는 다음 데이터 타입의 값인 인자를 지원합니다.

    • 문자열 및 이진 데이터 타입 (예: VARCHAR 및 BINARY).

      예를 들어 다음과 같은 함수 호출이 지원됩니다.

      SELECT DATASKETCHES_HLL_ACCUMULATE(1::TEXT);
      
      Copy
      SELECT DATASKETCHES_HLL_ACCUMULATE(TO_BINARY(HEX_ENCODE(1), 'HEX'));
      
      Copy
    • 부동 소수점 숫자의 데이터 타입 (예: FLOAT 및 DOUBLE)

      DataSketches 라이브러리는 이러한 값을 DOUBLE 값으로 형변환합니다.

    • 고정 소수점 숫자의 데이터 타입 (예: INTEGER 및 NUMERIC).

      이 함수는 소수 자릿수가 0인 숫자 유형만 지원합니다. 그러나 소수 자릿수가 0이 아닌 숫자 값을 부동 소수점 숫자의 데이터 타입으로 형변환할 수 있습니다.

      DataSketches 라이브러리는 이러한 값을 64비트의 부호 있는 INTEGER 에서 64비트의 부호 있는 INTEGER 값의 범위로 형변환합니다.

      DataSketches 라이브러리는 64비트의 부호 있는 INTEGER 범위를 초과하는 INTEGER 값(예: 128비트 정수 값)을 직접 형변환하지 않습니다. 그러나 Snowflake는 DataSketches 에서 지원하는 DOUBLE 값으로 자동 변환하여 이러한 값을 계속 지원합니다. 이 동작은 datasketches-python 라이브러리의 동작과 동일합니다.

    다른 데이터 타입의 값은 지원되지 않습니다. 예를 들어 VARIANT 및 ARRAY 값은 지원되지 않습니다.

  • NULL 값 및 집계 함수에 대한 자세한 내용은 집계 함수 및 NULL 값 을 참조하십시오.

  • 이 함수가 윈도우 함수로 호출되는 경우에는 지원하지 않습니다.

    • OVER 절 내의 ORDER BY 절.

    • 명시적 윈도우 프레임.

테이블을 만들고 값을 삽입합니다.

CREATE OR REPLACE TABLE datasketches_demo(v INT, g INT);

INSERT INTO datasketches_demo SELECT 1, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 2, 1;
INSERT INTO datasketches_demo SELECT 1, 2;
INSERT INTO datasketches_demo SELECT 1, 2;
INSERT INTO datasketches_demo SELECT 4, 2;
INSERT INTO datasketches_demo SELECT 4, 2;
INSERT INTO datasketches_demo SELECT 5, 2;
Copy

다음 예제에서는 테이블의 데이터를 사용합니다.

열에서 그룹화된 데이터의 예상 카디널리티 반환하기

DATASKETCHES_HLL 함수를 사용하여 g 열의 값으로 그룹화된 v 열에 있는 데이터의 고유 카디널리티를 근사화합니다.

SELECT g,
       DATASKETCHES_HLL(v),
       COUNT(DISTINCT v)
  FROM datasketches_demo GROUP BY g;
Copy
+---+---------------------+-------------------+
| G | DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---+---------------------+-------------------|
| 1 |         2.000000005 |                 2 |
| 2 |         3.000000015 |                 3 |
+---+---------------------+-------------------+

출력은 열 g 의 값 1 에 대해 열 v 에 별개의 값(즉, 12)이 약 2개 있음을 보여줍니다. g 열의 값 2 의 경우 v 열에는 약 3개의 값(즉, 1, 4, 5)이 있습니다. COUNT(DISTINCT v)) 호출은 추정치 대신 정확한 고유 값의 개수를 반환합니다.

DATASKETCHES_HLL_ACCUMULATE 함수를 사용하여 그룹화된 데이터에서 이진 스케치를 만들면 DATASKETCHES_HLL_ESTIMATE 함수는 누적된 스케치에 대해 동일한 결과를 반환합니다. 예를 보려면 누적된 이진 스케치에 대한 카디널리티 추정치 반환하기 를 참조하십시오.

열에 있는 모든 데이터의 예상 카디널리티 반환하기

DATASKETCHES_HLL 함수를 사용하여 v 열에 있는 모든 데이터의 고유 카디널리티를 근사화합니다.

SELECT DATASKETCHES_HLL(v),
       COUNT(DISTINCT v)
  FROM datasketches_demo;
Copy
+---------------------+-------------------+
| DATASKETCHES_HLL(V) | COUNT(DISTINCT V) |
|---------------------+-------------------|
|          4.00000003 |                 4 |
+---------------------+-------------------+

출력은 열 v 에 약 4개의 고유 값이 있음을 보여줍니다(즉, 1, 2, 4, 5). COUNT(DISTINCT v)) 호출은 추정치 대신 정확한 고유 값의 개수를 반환합니다.

DATASKETCHES_HLL_ACCUMULATE 함수를 사용하여 그룹화된 데이터에서 이진 스케치를 만든 다음 DATASKETCHES_HLL_COMBINE 함수를 사용하여 스케치를 하나의 통합 스케치로 결합하면 DATASKETCHES_HLL_ESTIMATE 함수는 통합된 스케치에 대해 동일한 결과를 반환합니다. 예를 보려면 결합된 이진 스케치에 대한 카디널리티 추정치 반환하기 를 참조하십시오.