Hive 함수 정리
본 문서는 Hive에서 사용 가능한 주요 내장 함수를 체계적으로 정리한 자료입니다. 수학, 조건, 문자열, 날짜, 집계, 행/열 변환, 그리고 창 함수 등 다양한 유형의 함수를 포함하며, 실제 쿼리 예제와 함께 설명됩니다.
기본 연산자
- =: 동등 비교. 예:
SELECT 1 WHERE 5 = 5; - <>: 불일치 비교.
NULL값이 포함되면 결과는NULL. - <, >, <=, >=: 순서 비교.
NULL포함 시NULL반환. - IS NULL / IS NOT NULL:
NULL여부 확인. - LIKE: 단순 패턴 매칭 (%, _ 사용). 예:
'abcde' LIKE 'ab%' - RLIKE / REGEXP: Java 정규식 기반 매칭. 예:
'hello' RLIKE '^h.*o$'
수치 연산
- +, -, *, /: 기본 산술 연산. 나눗셈은 항상
DOUBLE반환. - %: 나머지 연산. 부동소수점 계산 시 오차 발생 가능 →
ROUND(4.2 % 2, 2)권장. - &, |, ^, ~: 비트 연산.
~는 비트 반전. - ROUND(a): 반올림.
ROUND(3.5) = 4. - FLOOR(a): 내림.
FLOOR(3.9) = 3. - CEIL(a): 올림.
CEIL(3.1) = 4. - RAND([seed]): 무작위 숫자 생성. 시드 지정 시 일관된 결과.
- EXP(a): 자연지수 ea.
- LOG10(a), LOG2(a), LOG(base, a): 로그 계산.
- POW(a, b), POWER(a, b): ab 계산.
- SQRT(a): 제곱근.
- ABS(a): 절대값.
- PMOD(a, b): 양수로 나눈 나머지. 음수 처리에 유리.
- SIN, COS, ASIN, ACOS: 삼각함수.
날짜 및 시간 함수
- UNIX_TIMESTAMP(): 현재 타임스탬프 반환 (초 단위).
- UNIX_TIMESTAMP(date_str): 문자열을 타임스탬프로 변환.
- FROM_UNIXTIME(unix_ts, format): 타임스탬프를 포맷된 날짜 문자열로 변경.
- TO_DATE(timestamp): 시간 부분 제거, 날짜만 추출.
- YEAR(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND(): 날짜 구성 요소 추출.
- DATEDIFF(end, start): 두 날짜 간의 일수 차이.
- DATE_ADD(date, days): 지정된 일수만큼 후의 날짜.
- DATE_SUB(date, days): 지정된 일수만큼 전의 날짜.
문자열 함수
- LENGTH(str): 문자열 길이.
- CONCAT(str1, str2, ...): 문자열 결합.
- CONCAT_WS(sep, str1, ...): 구분자 포함 결합.
- SUBSTR(str, pos, len): 부분 문자열 추출. 인덱스는 1부터 시작.
- UPPER(str), LOWER(str): 대/소문자 변환.
- TRIM(str): 양쪽 공백 제거.
- LTRIM(str), RTRIM(str): 왼쪽/오른쪽 공백 제거.
- REGEXP_REPLACE(str, pattern, replacement): 정규식으로 치환.
- REGEXP_EXTRACT(str, pattern, index): 매칭 그룹 추출.
- PARSE_URL(url, part, key): URL의 특정 부분(호스트, 쿼리 등) 추출.
- GET_JSON_OBJECT(json_str, path): JSON 문자열에서 경로 기반 데이터 추출.
- SPACE(n): 공백 문자열 생성.
- REPEAT(str, n): 문자열 반복.
- LPAD(str, len, pad), RPAD(str, len, pad): 왼쪽/오른쪽 패딩.
- SPLIT(str, delim): 문자열 분할 → 배열 반환.
- FIND_IN_SET(str, list): 쉼표로 구분된 리스트 내 위치 반환.
집계 함수
- COUNT(*): 전체 행 수 (널 포함).
- COUNT(DISTINCT col): 중복 제거 후 행 수.
- SUM(col): 합계.
- AVG(col): 평균.
- MIN(col), MAX(col): 최소/최대값.
- VARIANCE_POP, VARIANCE_SAMP: 전체/표본 분산.
- STDDEV_POP, STDDEV_SAMP: 표준편차.
- PERCENTILE(col, p): 정확한 백분율 값.
- PERCENTILE_APPROX(col, p, B): 근사 백분율.
B가 클수록 정확도 증가. - HISTOGRAM_NUMERIC(col, bins): 히스토그램 정보 반환.
행 전환 함수
- EXPLODE(array_col): 배열을 각 요소별로 분해하여 여러 행으로 확장.
- EXPLODE(map_col): 맵의 키-값 쌍을 별도 행으로 분리.
- EXPLODE(SPLIT(str, delim)): 문자열을 분할 후 각 항목을 개별 행으로 만듦.
열 전환 함수
- COLLECT_SET(col): 중복 제거 후 집합 생성.
- COLLECT_LIST(col): 중복 포함 집합 생성.
- CONCAT_WS(delim, COLLECT_SET(...)): 집계 후 문자열 결합.
창 함수 (Window Functions)
특정 그룹 내에서 행의 상대적 위치를 기반으로 연산 수행.
FUNCTION() OVER (
[PARTITION BY column]
[ORDER BY column]
[ROWS BETWEEN n PRECEDING AND m FOLLOWING]
)
1. 순위 함수
- ROW_NUMBER(): 연속적인 고유 번호. 중복 없음.
- RANK(): 중복 시 다음 순위 건너뜀. 예: 1, 2, 3, 3, 5.
- DENSE_RANK(): 중복 시 다음 순위 바로 이어짐. 예: 1, 2, 3, 3, 4.
2. 집계 함수
- SUM(), AVG(), COUNT(), MIN(), MAX():
OVER사용 시 윈도우 내 집계.
3. 시퀀스 함수
- LAG(col, n): 현재 행 앞
n번째 행의 값. - LEAD(col, n): 현재 행 뒤
n번째 행의 값. - FIRST_VALUE(col): 윈도우 내 처음 값.
- LAST_VALUE(col): 윈도우 내 마지막 값.
- NTILE(n): 데이터를
n개의 구간으로 나누고 각 행에 구간 번호 할당.
예시: 성과 순위 산출
SELECT
department,
employee_name,
performance_score,
RANK() OVER (PARTITION BY department ORDER BY performance_score DESC) AS rank_in_dept
FROM employee_performance;