(형식)
ora_hash( 컬럼/표현식, max_bucket, seed_value )
ora_hash() 함수는 컬럼 또는 표현식을 입력값으로 받아서 해시함수를 적용해서 적당한 해시값을 리턴하는 함수입니다.
해시함수는 입력값을 특정 버켓 값으로 변환해주는 단순한 함수입니다.
버켓(bucket)은 쉽게 설명하면 '양동이'라고 생각하면 되죠.
예를들어 "테이블에 놓여있는 100개의 사과를 5개의 양동이에 나눠담아라." 라고하면, 5개의 양동이가 바로 버켓입니다.
5개의 양동이중에 한개의 양동이에만 100개를 다 담아버릴수도 있지만, 골고루 랜덤하게 분산시키고 싶은 경우에 이 해시함수를 사용하는 겁니다.
위 SQL문은 EMP 테이블에서 empno 컬럼을 ora_hash() 함수를 적용해서 출력한 결과입니다.
max_bucket 은 13으로 입력값인 0~13 까지의 숫자가 리턴되기 때문에 14개의 버켓으로 나눠줍니다.
랜덤하게 분산되는데 반드시 골고루 배분되는건 아닙니다. 위의 경우는 0번 버켓에 좀 많이 들어갔네요.
seed_value 는 해시값을 다르게 할때 사용합니다. 그냥 값을 다르게 하는 용도외에는 특별한 의미는 없습니다.
ora_hash 함수의 입력값으로 숫자뿐만 아니라 문자열도 가능합니다. 아래는 ename 값을 입력값으로 사용했고, 버켓수를 5개(max_bucket=4)로 지정했습니다. 14개의 데이터를 5개의 양동이(0~4)에 나눠담습니다.
버켓수를 꼭 입력데이터의 갯수에 맞출 필요는 없습니다. 14개의 데이터를 1000개의 버켓에 나눠담을수도 있는 것이고, 5개의 버켓에 나눠담을 수도 있는 겁니다. 필요에따라 알아서 사용~~
max_bucket 과 seed_value 는 Optional 이기 때문에, 안넣어도 됩니다.
안넣으면 max_bucket 은 최대버켓수인 4294967295 값이 디폴트로 지정되고, seed_value 는 0 이 디폴트로 지정됩니다.
이 ora_hash() 함수는 오라클 DB 내에서 정보분석을 하는 경우 데이터를 Training 데이터셋과 Test 데이터셋으로 나눌때 종종 사용됩니다.
'IT관련' 카테고리의 다른 글
오라클 데이터베이스 클라이언트 - Oracle Database 12c Client 다운로드/설치 (0) | 2020.05.20 |
---|---|
Oracle Database 19c - Demo Examples 설치 (오라클 데모 예제) (0) | 2020.05.19 |
오라클 DBMS 내에서 무료로 제공하는 머신러닝 알고리즘 (Machine Learning Algorithm) (0) | 2020.05.16 |
[SQL] 오라클의 if then else 표현 decode, case when 문장 (0) | 2020.05.15 |
Oracle SQL Developer 메뉴 인터페이스 한글, 영문 변환 Change UI Language (0) | 2020.05.08 |