FNV_HASH 함수 - Amazon Redshift

Amazon Redshift는 2025년 11월 1일부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. Python UDF를 사용하려면 이 날짜 이전에 UDF를 생성하세요. 기존 Python UDF는 정상적으로 계속 작동합니다. 자세한 내용은 블로그 게시물을 참조하세요.

FNV_HASH 함수

모든 기본 데이터 형식에 대해 64비트 FNV-1a 비암호화 해시 함수를 계산합니다.

구문

FNV_HASH(value [, seed])

인수

입력 값은 해시 처리할 수 있습니다. Amazon Redshift는 값의 이진 표현을 사용하여 입력 값을 해시 처리합니다. 예를 들어 INTEGER 값은 4바이트를 사용하여 해시 처리되고 BIGINT 값은 8바이트를 사용하여 해시 처리됩니다. 또한 해싱 CHAR 및 VARCHAR 입력은 후행 공백을 무시하지 않습니다.

%seed

해시 함수의 BIGINT 시드는 선택 사항입니다. 지정하지 않으면 Amazon Redshift는 기본 FNV 시드를 사용합니다. 이렇게 하면 변환 또는 연결 없이 여러 열의 해시를 결합할 수 있습니다.

반환 타입

BIGINT

예시

다음은 숫자의 FNV 해시, 'Amazon Redshift' 문자열 및 이 둘의 연결을 반환하는 예입니다.

select fnv_hash(1); fnv_hash ---------------------- -5968735742475085980 (1 row)
select fnv_hash('Amazon Redshift'); fnv_hash --------------------- 7783490368944507294 (1 row)
select fnv_hash('Amazon Redshift', fnv_hash(1)); fnv_hash ---------------------- -2202602717770968555 (1 row)

사용 노트

  • 여러 열이 있는 테이블의 해시를 계산하려면 첫 번째 열의 FNV 해시를 계산하여 두 번째 열의 해시에 시드로 전달하면 됩니다. 그런 다음 두 번째 열의 FNV 해시를 세 번째 열의 해시에 시드로 전달합니다.

    다음은 여러 열이 있는 테이블을 해시 처리할 시드를 생성하는 예입니다.

    select fnv_hash(column_3, fnv_hash(column_2, fnv_hash(column_1))) from sample_table;
  • 동일한 속성을 사용하여 문자열 연결 해시를 계산할 수 있습니다.

    select fnv_hash('abcd'); fnv_hash --------------------- -281581062704388899 (1 row)
    select fnv_hash('cd', fnv_hash('ab')); fnv_hash --------------------- -281581062704388899 (1 row)
  • 해시 함수는 입력 유형을 사용하여 해시 처리할 바이트 수를 결정합니다. 필요한 경우 캐스팅을 사용하여 특정 유형을 적용합니다.

    다음은 다른 결과를 생성하기 위해 다른 유형의 입력을 사용하는 예입니다.

    select fnv_hash(1::smallint); fnv_hash -------------------- 589727492704079044 (1 row)
    select fnv_hash(1); fnv_hash ---------------------- -5968735742475085980 (1 row)
    select fnv_hash(1::bigint); fnv_hash ---------------------- -8517097267634966620 (1 row)