FNV_HASH 함수 - Amazon Redshift

FNV_HASH 함수

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

구문

FNV_HASH(value [, seed])

인수

USD 상당

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

시드

해시 함수의 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)