Hive UDFs
Hive UDFs (사용자 정의 함수)
Hive의 UDF는 Java로 개발해 Apache Hive에 매끄럽게 통합되는 커스텀 함수예요. Hive에는 다양한 내장 UDF가 있어서 그대로 쓸 수 있고, 필요하면 나만의 UDF도 만들 수 있어요. 이 문서는 Hive가 제공하는 내장 함수들을 기능별로 정리한 완전한 레퍼런스예요.
출처: 문서
본문
Hive 사용자 정의 함수(UDF)는 Java로 개발되어 Apache Hive에 매끄럽게 통합되는 커스텀 함수입니다. UDF는 매개변수를 받아 특정 동작을 수행하고 결과 값을 반환하도록 설계된 루틴입니다. 반환 값은 UDF의 코드와 구현된 인터페이스에 따라 단일 스칼라 행이 될 수도 있고 완전한 결과 집합이 될 수도 있습니다. UDF는 커스텀 코드 통합을 가능케 해 고전적인 SQL 기능을 강화하는 강력한 능력으로, Hive 사용자에게 다재다능한 도구 세트를 제공합니다. Apache Hive는 사용자가 활용할 수 있는 다양한 내장 UDF를 갖추고 있습니다. 다른 SQL 기반 솔루션과 유사하게 Hive도 필요에 따라 커스텀 함수를 통합해 이미 풍부한 UDF 세트를 확장하는 기능을 제공합니다.
개요
모든 UDF의 evaluate 메서드는 한 번에 한 행씩 처리됩니다! UDF에 복잡한 코드가 있으면 실행 시간에 성능 문제를 일으킬 수 있습니다.
UDF를 이해하기 위해 실행 패턴을 파악하는 예제부터 시작해 봅시다.
UDF 동작 예
SELECT length(string_col) FROM table_name;
이 경우 내장 UDF length 는 string_col 값의 각 행을 평가합니다.
내장 UDF가 어떻게 동작하는지 봤으니 Apache Hive가 어떤 종류의 내장 UDF를 갖고 있는지 알아봅시다.
팁: 모든 Hive 키워드는 대소문자를 구분하지 않습니다(case-insensitive) . 연산자 및 함수 이름도 마찬가지예요. 즉
length와LENGTH모두 Hive가 받아들입니다.
사용 가능한 함수
내장 집계 함수 (UDAF)
Hive 집계 함수(UDAF)는 여러 행을 입력으로 받아 단일 행을 출력으로 반환합니다. 기능에 따라 대부분 값을 집계해 단일 결과를 반환하며, 주로 GROUP BY 문에서 사용됩니다.
이 함수들은 GROUP BY 없이도 사용할 수 있습니다.
| 반환 타입 | 이름(시그니처) | 설명 | 소스 코드 |
|---|---|---|---|
| bigint | count(*) count(expr) count(DISTINCT expr[, expr...]) |
count(*) - NULL 값을 포함한 검색된 전체 행 수를 반환합니다. count(expr) - 제공된 표현식이 non-NULL인 행 수를 반환합니다. count(DISTINCT expr[, expr]) - 제공된 표현식이 고유하고 non-NULL인 행 수를 반환합니다. 이 실행은 hive.optimize.distinct.rewrite로 최적화할 수 있습니다. | GenericUDAFCount |
| double | sum(col), sum(DISTINCT col) |
그룹 내 요소의 합 또는 그룹 내 컬럼의 고유 값 합을 반환합니다. | GenericUDAFSum |
| double | avg(col), avg(DISTINCT col) |
그룹 내 요소의 평균 또는 그룹 내 컬럼의 고유 값 평균을 반환합니다. | GenericUDAFAverage |
| double | min(col) |
그룹 내 컬럼의 최솟값을 반환합니다. | GenericUDAFMin |
| double | max(col) |
그룹 내 컬럼의 최댓값을 반환합니다. | GenericUDAFMax |
| double | variance(col), var_pop(col) |
그룹 내 숫자 컬럼의 분산을 반환합니다. | GenericUDAFVariance |
| double | var_samp(col) |
그룹 내 숫자 컬럼의 비편향 표본 분산을 반환합니다. | GenericUDAFVarianceSample |
| double | stddev_pop(col) |
그룹 내 숫자 컬럼의 표준 편차를 반환합니다. | GenericUDAFStd |
| double | stddev_samp(col) |
그룹 내 숫자 컬럼의 비편향 표본 표준 편차를 반환합니다. | GenericUDAFStdSample |
| double | covar_pop(col1, col2) |
그룹 내 숫자 컬럼 쌍의 모집단 공분산을 반환합니다. | GenericUDAFCovariance |
| double | covar_samp(col1, col2) |
그룹 내 숫자 컬럼 쌍의 표본 공분산을 반환합니다. | GenericUDAFCovarianceSample |
| double | corr(col1, col2) |
그룹 내 숫자 컬럼 쌍의 Pearson 상관 계수를 반환합니다. | GenericUDAFCorrelation |
| double | percentile(bigint col, p) |
그룹 내 컬럼의 정확한 p번째 백분위수를 반환합니다(부동소수점 타입에서는 동작하지 않음). p는 0과 1 사이여야 합니다. 참고: 실제 백분위수는 정수 값에서만 계산할 수 있습니다. 입력이 정수가 아니면 PERCENTILE_APPROX를 사용하세요. | UDAFPercentile |
| array |
percentile(bigint col, array(p1 [, p2]...)) |
그룹 내 컬럼의 정확한 백분위수 p1, p2, ...를 반환합니다(부동소수점 타입에서는 동작하지 않음). pi는 0과 1 사이여야 합니다. 참고: 실제 백분위수는 정수 값에서만 계산할 수 있습니다. 입력이 정수가 아니면 PERCENTILE_APPROX를 사용하세요. | |
| double | percentile_approx(double col, p [, B]) |
그룹 내 숫자 컬럼(부동소수점 타입 포함)의 근사 p번째 백분위수를 반환합니다. B 매개변수는 메모리를 희생해 근사 정확도를 제어합니다. 값이 높을수록 더 나은 근사를 제공하며 기본값은 10,000입니다. col의 고유 값 수가 B보다 작으면 정확한 백분위수 값을 제공합니다. | GenericUDAFPercentileApprox |
| array |
percentile_approx(double col, array(p1 [, p2]...) [, B]) |
위와 같지만 단일 값 대신 백분위수 값의 배열을 받고 반환합니다. | |
| double | regr_avgx(independent, dependent) |
avg(dependent)와 동일합니다. | |
| double | regr_avgy(independent, dependent) |
avg(independent)와 동일합니다. | |
| double | regr_count(independent, dependent) |
선형 회귀선을 피팅하는 데 사용된 non-null 쌍의 개수를 반환합니다. | |
| double | regr_intercept(independent, dependent) |
선형 회귀선의 y절편을 반환합니다. 즉 dependent = a * independent + b 방정식에서 b 값입니다. | |
| double | regr_r2(independent, dependent) |
회귀에 대한 결정 계수를 반환합니다. | |
| double | regr_slope(independent, dependent) |
선형 회귀선의 기울기를 반환합니다. 즉 dependent = a * independent + b 방정식에서 a 값입니다. | |
| double | regr_sxx(independent, dependent) |
regr_count(independent, dependent) * var_pop(dependent)와 동일합니다. | |
| double | regr_sxy(independent, dependent) |
regr_count(independent, dependent) * covar_pop(independent, dependent)와 동일합니다. | |
| double | regr_syy(independent, dependent) |
regr_count(independent, dependent) * var_pop(independent)와 동일합니다. | |
| array <struct {'x','y'}> | histogram_numeric(col, b) |
b개의 균일하지 않은 bin을 사용해 그룹 내 숫자 컬럼의 히스토그램을 계산합니다. 출력은 bin 중심과 높이를 나타내는 double 값 (x,y) 좌표의 크기 b 배열입니다. | GenericUDAFHistogramNumeric |
| array | collect_set(col) |
중복 요소가 제거된 객체 집합을 반환합니다. | GenericUDAFCollectSet |
| array | collect_list(col) |
중복을 포함한 객체 목록을 반환합니다. | GenericUDAFCollectList |
| int | ntile(integer x) |
정렬된 파티션을 buckets라는 x개의 그룹으로 나누고 각 행에 버킷 번호를 할당합니다. 이를 통해 삼분위수, 사분위수, 십분위수, 백분위수 및 기타 요약 통계를 쉽게 계산할 수 있습니다. |
GenericUDAFNTile |
대부분의 UDAF는 NULL 값을 무시합니다.
내장 테이블 생성 함수 (UDTF)
일반 사용자 정의 함수(예: concat())는 단일 입력 행을 받아 단일 출력 행을 냅니다. 반대로 테이블 생성 함수는 단일 입력 행을 여러 출력 행으로 변환합니다. UDTF는 가장 고급 함수 중 하나입니다.
| 행 집합 컬럼 타입 | 이름(시그니처) | 설명 | 소스 코드 |
|---|---|---|---|
| T | explode(ARRAY<T> a) |
배열을 여러 행으로 확장합니다. 배열의 각 요소마다 한 행씩, 단일 컬럼(col)을 가진 행 집합을 반환합니다. | GenericUDTFExplode |
| Tkey, Tvalue | explode(MAP<Tkey,Tvalue> m) |
맵을 여러 행으로 확장합니다. 입력 맵의 각 키-값 쌍마다 한 행씩, 두 컬럼(key,value)을 가진 행 집합을 반환합니다. | |
| int, T | posexplode(ARRAY<T> a) |
추가적인 int 타입 위치 컬럼(원래 배열에서 항목의 위치, 0부터 시작)과 함께 배열을 여러 행으로 확장합니다. 배열의 각 요소마다 한 행씩, 두 컬럼(pos,val)을 가진 행 집합을 반환합니다. | GenericUDTFPosExplode |
| T1, …, Tn | inline(ARRAY<STRUCT<f1:T1,...,fn:Tn>> a) |
구조체 배열을 여러 행으로 확장합니다. 배열의 각 구조체마다 한 행씩, N개의 컬럼(N = 구조체의 최상위 요소 수)을 가진 행 집합을 반환합니다. | GenericUDTFInline |
| T1, …, Tn/r | stack(int r, T1 V1,..., Tn/r Vn) |
n 개의 값 V1,…,Vn을 r 개의 행으로 나눕니다. 각 행은 n/r 개의 컬럼을 갖습니다. r 은 상수여야 합니다. | GenericUDTFStack |
| string1, …, stringn | json_tuple(string jsonStr, string k1,..., string kn) |
JSON 문자열과 n 개의 키 집합을 받아 n 개의 값 튜플을 반환합니다. 이것은 get_json_object UDF보다 더 효율적인 버전입니다. 한 번의 호출로 여러 키를 얻을 수 있기 때문입니다. |
GenericUDTFJSONTuple |
| string1, …, stringn | parse_url_tuple(string urlStr, string p1,..., string pn) |
URL 문자열과 n개의 URL 부분 집합을 받아 n개의 값 튜플을 반환합니다. 이것은 parse_url() UDF와 유사하지만 URL에서 여러 부분을 한 번에 추출할 수 있습니다. 유효한 부분 이름은 HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO, QUERY: |
GenericUDTFParseUrlTuple |
문자열 함수
문자열 조작 함수가 없는 훌륭한 엔진은 없습니다. Apache Hive는 풍부한 내장 문자열 함수를 갖고 있습니다.
| 반환 타입 | 이름(시그니처) | 설명 | 소스 코드 |
|---|---|---|---|
| int | ascii(string str) |
str의 첫 번째 문자의 숫자 값을 반환합니다. | UDFAscii |
| string | base64(binary bin) |
인자를 바이너리에서 base64 문자열로 변환합니다. | UDFBase64 |
| int | character_length(string str) |
str에 포함된 UTF-8 문자의 수를 반환합니다. char_length 함수는 이 함수의 약칭입니다. | GenericUDFCharacterLength |
| string | chr(bigint|double A) |
A와 이진적으로 동일한 ASCII 문자를 반환합니다. A가 256보다 크면 결과는 chr(A % 256)과 동일합니다. 예: select chr(88); 는 "X"를 반환합니다. | UDFChr |
| string | concat(string|binary A, string|binary B...) |
매개변수로 전달된 문자열 또는 바이트를 순서대로 연결한 문자열 또는 바이트를 반환합니다. 예를 들어 concat('foo','bar')는 'foobar'를 결과로 냅니다. 이 함수는 임의의 수의 입력 문자열을 받을 수 있습니다. | GenericUDFConcat |
| array <struct<string,double>> | context_ngrams(array<array<string>>, array<string>, int K, int pf) |
"context" 문자열이 주어졌을 때 토큰화된 문장 집합에서 상위 k 문맥 N-gram을 반환합니다. 자세한 내용은 StatisticsAndDataMining을 참고하세요. | GenericUDAFContextNGrams |
| string | concat_ws(string SEP, string A, string B...) |
위의 concat()과 같지만 커스텀 구분자 SEP를 사용합니다. | GenericUDFConcatWS |
| string | concat_ws(string SEP, array<string>) |
위의 concat_ws()와 같지만 문자열 배열을 받습니다. | |
| string | decode(binary bin, string charset) |
제공된 문자셋('US-ASCII', 'ISO-8859-1', 'UTF-8', 'UTF-16BE', 'UTF-16LE', 'UTF-16' 중 하나)을 사용해 첫 번째 인자를 문자열로 디코딩합니다. 어느 인자든 null이면 결과도 null입니다. | GenericUDFDecode |
| string | elt(N int, str1 string, str2 string, str3 string,...) |
인덱스 번호에 해당하는 문자열을 반환합니다. 예: elt(2,'hello','world')는 'world'를 반환합니다. N이 1보다 작거나 인자 수보다 크면 NULL을 반환합니다. | GenericUDFElt |
| binary | encode(string src, string charset) |
제공된 문자셋('US-ASCII', 'ISO-8859-1', 'UTF-8', 'UTF-16BE', 'UTF-16LE', 'UTF-16' 중 하나)을 사용해 첫 번째 인자를 BINARY로 인코딩합니다. 어느 인자든 null이면 결과도 null입니다. | GenericUDFEncode |
| int | field(val T, val1 T, val2 T, val3 T,...) |
val1,val2,val3,… 목록에서 val의 인덱스를 반환하거나 찾지 못하면 0을 반환합니다. 예: field('world','say','hello','world')는 3을 반환합니다. 모든 기본 타입이 지원되며 인자는 str.equals(x)로 비교됩니다. val이 NULL이면 반환 값은 0입니다. | GenericUDFField |
| int | find_in_set(string str, string strList) |
strList(쉼표로 구분된 문자열)에서 str의 첫 번째 발생을 반환합니다. 어느 인자든 null이면 null을 반환합니다. 첫 번째 인자에 쉼표가 포함되면 0을 반환합니다. 예: find_in_set('ab', 'abc,b,ab,c,def')는 3을 반환합니다. | UDFFindInSet |
| string | format_number(number x, int d) |
숫자 X를 '###,###.##' 같은 형식으로 포맷하고 D 소수 자릿수로 반올림해 문자열로 반환합니다. D가 0이면 결과에 소수점이나 소수 부분이 없습니다. | GenericUDFFormatNumber |
| string | get_json_object(string json_string, string path) |
지정된 JSON 경로에 따라 JSON 문자열에서 JSON 객체를 추출해 추출된 JSON 객체의 JSON 문자열로 반환합니다. 입력 JSON 문자열이 잘못되면 null을 반환합니다. 참고: JSON 경로는 [0-9a-z_] 문자만 가질 수 있습니다. 즉 대문자나 특수 문자는 안 됩니다. 또한 키는 숫자로 시작할 수 없습니다. 이는 Hive 컬럼 이름에 대한 제한 때문입니다. | UDFJson |
| boolean | in_file(string str, string filename) |
str 문자열이 filename에 전체 줄로 나타나면 true를 반환합니다. |
GenericUDFInFile |
| int | instr(string str, string substr) |
str에서 substr이 처음 나타나는 위치를 반환합니다. 어느 인자든 null이면 null을, str에서 substr을 찾지 못하면 0을 반환합니다. 이것은 인덱스가 0부터가 아닙니다. str의 첫 번째 문자의 인덱스는 1입니다. |
GenericUDFInstr |
| int | length(string A) |
문자열의 길이를 반환합니다. | GenericUDFLength |
| int | locate(string substr, string str[, int pos]) |
str에서 위치 pos 이후에 substr이 처음 나타나는 위치를 반환합니다. | GenericUDFLocate |
| string | lower(string A) lcase(string A) |
B의 모든 문자를 소문자로 변환한 결과 문자열을 반환합니다. 예: lower('fOoBaR')은 'foobar'를 결과로 냅니다. | GenericUDFLower |
| string | lpad(string str, int len, string pad) |
str을 pad로 왼쪽 패딩해 길이 len으로 만든 결과를 반환합니다. str이 len보다 길면 반환 값은 len 문자로 잘립니다. pad 문자열이 비어 있으면 반환 값은 null입니다. | GenericUDFLpad |
| string | ltrim(string A) |
A의 앞(왼쪽)에서 공백을 제거한 결과 문자열을 반환합니다. 예: ltrim(' foobar ')는 'foobar '를 결과로 냅니다. | GenericUDFLTrim |
| array <struct<string,double>> | ngrams(array<array<string>>, int N, int K, int pf) |
sentences() UDAF가 반환하는 것 같은 토큰화된 문장 집합에서 상위 k N-gram을 반환합니다. 자세한 내용은 StatisticsAndDataMining을 참고하세요. | GenericUDAFnGrams |
| int | octet_length(string str) |
str을 UTF-8로 담는 데 필요한 옥텟(octet) 수를 반환합니다. octet_length(str)는 character_length(str)보다 클 수 있습니다. | GenericUDFOctetLength |
| string | parse_url(string urlString, string partToExtract [, string keyToExtract]) |
URL에서 지정된 부분을 반환합니다. partToExtract의 유효한 값은 HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO입니다. 예: parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST')는 'facebook.com'을 반환합니다. 또한 세 번째 인자로 키를 제공하면 QUERY에서 특정 키의 값을 추출할 수 있습니다. 예: parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY', 'k1')는 'v1'을 반환합니다. | UDFParseUrl |
| string | printf(string format, Obj... args) |
printf 스타일 포맷 문자열에 따라 입력을 포맷해 반환합니다. | GenericUDFPrintf |
| string | quote(string text) |
인용된 문자열을 반환합니다. Apache Hive 4.0.0에서 작은따옴표에 대한 이스케이프 문자를 포함합니다. | GenericUDFQuote |
quote 함수 예:
| 입력 | 출력 |
|---|---|
| NULL | NULL |
| DONT | 'DONT' |
| DON'T | 'DON'T' |
| 반환 타입 | 이름(시그니처) | 설명 | 소스 코드 |
|---|---|---|---|
| string | regexp_extract(string subject, string pattern, int index) |
패턴을 사용해 추출한 문자열을 반환합니다. 예: regexp_extract('foothebar', 'foo(.*?)(bar)', 2)는 'bar'를 반환합니다. 미리 정의된 문자 클래스를 사용할 때 주의가 필요합니다. 두 번째 인자로 '\s'를 사용하면 문자 s와 일치하고, 공백과 일치하려면 '\s'가 필요합니다. 'index' 매개변수는 Java regex Matcher group() 메서드 인덱스입니다. | UDFRegExpExtract |
| string | regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT) |
INITIAL_STRING에서 PATTERN에 정의된 Java 정규식 문법과 일치하는 모든 부분 문자열을 REPLACEMENT로 바꾼 결과 문자열을 반환합니다. 예: regexp_replace("foobar", "oo|ar", "")는 'fb'를 반환합니다. 미리 정의된 문자 클래스를 사용할 때 주의가 필요합니다. | UDFRegExpReplace |
| string | repeat(string str, int n) |
str을 n번 반복합니다. |
UDFRepeat |
| string | replace(string A, string OLD, string NEW) |
문자열 A에서 OLD의 겹치지 않는 모든 발생을 NEW로 바꾼 결과를 반환합니다. 예: select replace("ababab", "abab", "Z"); 는 "Zab"를 반환합니다. | UDFReplace |
| string | reverse(string A) |
뒤집힌 문자열을 반환합니다. | UDFReverse |
| string | rpad(string str, int len, string pad) |
str을 pad로 오른쪽 패딩해 길이 len으로 만든 결과를 반환합니다. str이 len보다 길면 반환 값은 len 문자로 잘립니다. pad 문자열이 비어 있으면 반환 값은 null입니다. | GenericUDFRpad |
| string | rtrim(string A) |
A의 끝(오른쪽)에서 공백을 제거한 결과 문자열을 반환합니다. 예: rtrim(' foobar ')는 ' foobar'를 결과로 냅니다. | GenericUDFRTrim |
| array <array |
sentences(string str, string lang, string locale) |
자연어 텍스트를 단어와 문장으로 토큰화합니다. 각 문장은 적절한 문장 경계에서 끊어져 단어 배열로 반환됩니다. 'lang'과 'locale'은 선택 인자입니다. 예: sentences('Hello there! How are you?')는 (("Hello","there"), ("How","are","you"))를 반환합니다. | GenericUDFSentences |
| string | space(int n) |
n개의 공백으로 이루어진 문자열을 반환합니다. | UDFSpace |
| array | split(string str, string pat) |
str을 pat(정규식) 기준으로 나눕니다. | GenericUDFSplit |
| map <string,string> | str_to_map(text[, delimiter1, delimiter2]) |
두 개의 구분자를 사용해 text를 키-값 쌍으로 나눕니다. Delimiter1은 text를 K-V 쌍으로 나누고, Delimiter2는 각 K-V 쌍을 나눕니다. 기본 구분자는 delimiter1이 ','이고 delimiter2가 ':'입니다. | GenericUDFStringToMap |
| string | substr(string|binary A, int start) substring(string|binary A, int start) |
시작 위치부터 문자열 A의 끝까지 A의 부분 문자열 또는 바이트 배열 조각을 반환합니다. 예: substr('foobar', 4)는 'bar'를 결과로 냅니다. | GenericUDFSubstringIndex |
| string | substr(string|binary A, int start, int len) substring(string|binary A, int start, int len) |
시작 위치부터 길이 len까지 A의 부분 문자열 또는 바이트 배열 조각을 반환합니다. 예: substr('foobar', 4, 1)는 'b'를 결과로 냅니다. | |
| string | substring_index(string A, string delim, int count) |
delim 구분자의 count번째 발생 전까지 문자열 A의 부분 문자열을 반환합니다. count가 양수이면(왼쪽부터 세어) 마지막 구분자의 왼쪽을 반환합니다. count가 음수이면(오른쪽부터 세어) 마지막 구분자의 오른쪽을 반환합니다. substring_index는 delim을 찾을 때 대소문자를 구분합니다. 예: substring_index('www.apache.org', '.', 2) = 'www.apache'. | GenericUDFSubstringIndex |
| string | translate(string|char|varchar input, string|char|varchar from, string|char|varchar to) |
from 문자열에 있는 문자를 to 문자열의 해당 문자로 바꿔 입력 문자열을 변환합니다. PostgreSQL의 translate 함수와 유사합니다. 이 UDF의 매개변수 중 하나라도 NULL이면 결과도 NULL입니다. |
GenericUDFTranslate |
| string | trim(string A) |
A의 양쪽 끝에서 공백을 제거한 결과 문자열을 반환합니다. 예: trim(' foobar ')는 'foobar'를 결과로 냅니다. | GenericUDFTrim |
| binary | unbase64(string str) |
인자를 base64 문자열에서 BINARY로 변환합니다. | UDFUnbase64 |
| string | upper(string A) ucase(string A) |
A의 모든 문자를 대문자로 변환한 결과 문자열을 반환합니다. 예: upper('fOoBaR')은 'FOOBAR'를 결과로 냅니다. | GenericUDFUpper |
| string | initcap(string A) |
각 단어의 첫 글자는 대문자, 나머지는 소문자로 한 문자열을 반환합니다. 단어는 공백으로 구분됩니다. | GenericUDFInitCap |
| int | levenshtein(string A, string B) |
두 문자열 간의 Levenshtein 거리를 반환합니다. 예: levenshtein('kitten','sitting')은 3을 결과로 냅니다. | GenericUDFLevenshtein |
| string | soundex(string A) |
문자열의 사운덱스 코드를 반환합니다. 예: soundex('Miller')는 M460을 결과로 냅니다. | GenericUDFSoundex |
| string | deserialize(base64 encoded message, compressionFormat) |
compressionFormat으로 압축되고 base64로 인코딩된 주어진 메시지의 평문 문자열을 반환합니다. 현재 gzip 압축 및 base64 인코딩 문자열에 대해서만 'gzip'을 지원합니다. 예: deserialize('H4sIAAAAAAAA/ytJLS4BAAx+f9gEAAAA', 'gzip') 결과: test | GenericUDFDeserialize |
날짜 함수
많은 분석 워크로드에서 Date는 Hive에서 가장 많이 사용되는 내장 함수 중 하나입니다. 다음 목록은 Hive에서 지원하는 내장 날짜 함수를 포함합니다.
| 반환 타입 | 이름(시그니처) | 설명 | 소스 코드 |
|---|---|---|---|
| string | from_unixtime(bigint unixtime[, string pattern]) |
에포크(1970-01-01 00:00:00 UTC) 이후의 초 수를 지정된 패턴을 사용해 현재 시간대의 해당 순간의 타임스탬프를 나타내는 문자열로 변환합니다(hive.local.time.zone 구성 사용). 패턴이 없으면 기본값('yyyy-MM-dd HH:mm:ss')이 사용됩니다. 예: from_unixtime(0)=1970-01-01 00:00:00 (hive.local.time.zone=Etc/GMT). Hive 4.0.0부터 "hive.datetime.formatter" 속성으로 기본 formatter 구현과 그에 따른 허용 패턴·동작을 제어할 수 있습니다. | GenericUDFFromUnixTime |
| bigint | unix_timestamp() |
현재 Unix 타임스탬프를 초 단위로 가져옵니다. 이 함수는 결정적이지 않으며 그 값이 쿼리 실행 범위에 대해 고정되지 않아 쿼리 최적화를 방해합니다. 2.0부터 CURRENT_TIMESTAMP 상수를 위해 deprecated 되었습니다. | GenericUDFUnixTimeStamp |
| bigint | unix_timestamp(string date) |
기본 패턴을 사용해 DateTimestring을 unix time(에포크 이후 초)으로 변환합니다. 허용되는 기본 패턴은 기본 formatter 구현에 따라 달라집니다. DateTime 문자열에는 시간대가 없으므로 "hive.local.time.zone" 속성으로 지정된 로컬 시간대를 사용합니다. 변환 실패 시 null을 반환합니다. 예: unix_timestamp('2009-03-20 11:30:01') = 1237573801. Hive 4.0.0부터 "hive.datetime.formatter" 속성을 사용할 수 있습니다. | |
| bigint | unix_timestamp(string date, string pattern) |
지정된 패턴을 사용해 날짜-시간 문자열을 unix time(에포크 이후 초)으로 변환합니다. 허용되는 패턴과 동작은 기본 formatter 구현에 따라 다릅니다. 변환 실패 시 null을 반환합니다. 예: unix_timestamp('2009-03-20', 'yyyy-MM-dd') = 1237532400. Hive 4.0.0부터 "hive.datetime.formatter" 속성을 사용할 수 있습니다. | |
| date | to_date(string timestamp) |
타임스탬프 날짜 객체의 날짜 부분을 반환합니다. 예: to_date("1970-01-01 00:00:00"). | GenericUDFDate |
| int | year(string date) |
날짜 또는 타임스탬프 문자열의 연도 부분을 반환합니다: year("1970-01-01 00:00:00") = 1970, year("1970-01-01") = 1970. | UDFYear |
| int | quarter(date/timestamp/string) |
날짜, 타임스탬프 또는 문자열에 대해 연도의 분기를 1~4 범위로 반환합니다. 예: quarter('2015-04-08') = 2. | GenericUDFQuarter |
| int | month(string date) |
날짜 또는 타임스탬프 문자열의 월 부분을 반환합니다. 예: month("1970-11-01 00:00:00") = 11, month("1970-11-01") = 11. | UDFMonth |
| int | day(string date) dayofmonth(date) |
날짜 또는 타임스탬프 문자열의 일 부분을 반환합니다. 예: day("1970-11-01 00:00:00") = 1, day("1970-11-01") = 1. | UDFDayOfMonth |
| int | hour(string date) |
타임스탬프의 시를 반환합니다. 예: hour('2009-07-30 12:58:59') = 12, hour('12:58:59') = 12. | UDFHour |
| int | minute(string date) |
타임스탬프의 분을 반환합니다. | UDFMinute |
| int | second(string date) |
타임스탬프의 초를 반환합니다. | UDFSecond |
| int | weekofyear(string date) |
타임스탬프 문자열의 주 번호를 반환합니다. 예: weekofyear("1970-11-01 00:00:00") = 44 또는 weekofyear("1970-11-01") = 44. | UDFWeekOfYear |
| int | extract(field FROM source) |
source에서 일이나 시 같은 필드를 검색합니다. source는 date, timestamp, interval 또는 date나 timestamp로 변환 가능한 문자열이어야 합니다. 지원 필드는 day, dayofweek, hour, minute, month, quarter, second, week, year입니다. 예: 1. select extract(month from "2016-10-20")는 10. 2. select extract(hour from "2016-10-20 05:06:07")는 5. 3. select extract(dayofweek from "2016-10-20 05:06:07")는 5. 4. select extract(month from interval '1-3' year to month)는 3. 5. select extract(minute from interval '3 12:20:30' day to second)는 20. | |
| int | datediff(string enddate, string startdate) |
startdate에서 enddate까지의 일 수를 반환합니다. 예: datediff('2009-03-01', '2009-02-27') = 2. | GenericUDFDateDiff |
| date | date_add(date/timestamp/string startdate, tinyint/smallint/int days) |
startdate에 일 수를 더합니다. 예: date_add('2008-12-31', 1) = '2009-01-01'. | GenericUDFDateAdd |
| date | date_sub(date/timestamp/string startdate, tinyint/smallint/int days) |
startdate에서 일 수를 뺍니다: date_sub('2008-12-31', 1) = '2008-12-30'. | GenericUDFDateSub |
| timestamp | from_utc_timestamp({any primitive type} ts, string timezone) |
UTC의 타임스탬프*를 주어진 시간대로 변환합니다. * 타임스탬프는 timestamp/date, tinyint/smallint/int/bigint, float/double, decimal을 포함한 기본 타입입니다. 소수 값은 초로, 정수 값은 밀리초로 간주됩니다. 예: from_utc_timestamp(2592000.0,'PST'), from_utc_timestamp(2592000000,'PST'), from_utc_timestamp(timestamp '1970-01-30 16:00:00','PST') 모두 타임스탬프 1970-01-30 08:00:00을 반환합니다. | GenericUDFFromUtcTimestamp |
| timestamp | to_utc_timestamp({any primitive type} ts, string timezone) |
주어진 시간대의 타임스탬프*를 UTC로 변환합니다. * 타임스탬프는 기본 타입입니다. 소수 값은 초로, 정수 값은 밀리초로 간주됩니다. 예: to_utc_timestamp(2592000.0,'PST'), to_utc_timestamp(2592000000,'PST'), to_utc_timestamp(timestamp '1970-01-30 16:00:00','PST') 모두 타임스탬프 1970-01-31 00:00:00을 반환합니다. | GenericUDFToUtcTimestamp |
| date | current_date |
쿼리 평가 시작 시점의 현재 날짜를 반환합니다. 같은 쿼리 내의 모든 current_date 호출은 같은 값을 반환합니다. | GenericUDFCurrentDate |
| timestamp | current_timestamp |
쿼리 평가 시작 시점의 현재 타임스탬프를 반환합니다. 같은 쿼리 내의 모든 current_timestamp 호출은 같은 값을 반환합니다. | GenericUDFCurrentTimestamp |
| string | add_months(string start_date, int num_months, output_date_format) |
start_date 이후 num_months 개월 후의 날짜를 반환합니다. start_date는 문자열, date 또는 timestamp입니다. num_months는 정수입니다. start_date가 월의 마지막 날이거나 결과 월이 start_date의 일 구성요소보다 적은 일수를 갖는 경우 결과는 결과 월의 마지막 날입니다. 그렇지 않으면 결과는 start_date와 같은 일 구성요소를 갖습니다. 기본 출력 형식은 'yyyy-MM-dd'입니다. Hive 4.0.0부터 add_months는 선택 인자 output_date_format을 지원하는데, 이는 유효한 출력 날짜 형식을 나타내는 문자열을 받습니다. 예: add_months('2009-08-31', 1)은 '2009-09-30'을 반환하고, add_months('2017-12-31 14:15:16', 2, 'yyyy-MM-dd HH:mm:ss')은 '2018-02-28 14:15:16'을 반환합니다. | GenericUDFAddMonths |
| string | last_day(string date) |
date가 속한 달의 마지막 날을 반환합니다. date는 'yyyy-MM-dd HH:mm:ss' 또는 'yyyy-MM-dd' 형식의 문자열입니다. 날짜의 시간 부분은 무시됩니다! |
GenericUDFLastDay |
| string | next_day(string start_date, string day_of_week) |
start_date보다 나중이고 day_of_week라는 이름을 가진 첫 번째 날짜를 반환합니다. start_date는 string/date/timestamp입니다. day_of_week는 요일의 2글자, 3글자 또는 전체 이름입니다(예: Mo, tue, FRIDAY). start_date의 시간 부분은 무시됩니다. 예: next_day('2015-01-14', 'TU') = 2015-01-20. |
GenericUDFNextDay |
| string | trunc(string date, string format) |
format이 지정하는 단위로 잘린 날짜를 반환합니다. 지원 형식: MONTH/MON/MM, YEAR/YYYY/YY. 예: trunc('2015-03-17', 'MM') = 2015-03-01. | GenericUDFTrunc |
| double | months_between(date1, date2) |
날짜 date1과 date2 사이의 개월 수를 반환합니다. date1이 date2보다 나중이면 결과는 양수입니다. date1이 date2보다 이르면 결과는 음수입니다. date1과 date2가 같은 월의 일이거나 둘 다 월의 마지막 날이면 결과는 항상 정수입니다. 그렇지 않으면 UDF는 31일 기준 월에 기반해 결과의 소수 부분을 계산하고 date1과 date2의 시간 구성요소 차이를 고려합니다. date1과 date2 타입은 'yyyy-MM-dd' 또는 'yyyy-MM-dd HH:mm:ss' 형식의 date, timestamp 또는 string입니다. 결과는 소수 8자리로 반올림됩니다. 예: months_between('1997-02-28 10:30:00', '1996-10-30') = 3.94959677. |
GenericUDFMonthsBetween |
| string | date_format(date/timestamp/string ts, string pattern) |
지정된 패턴을 사용해 date/timestamp/string을 문자열 값으로 변환합니다. 허용되는 패턴과 동작은 기본 formatter 구현에 따라 다릅니다. 패턴 인자는 상수여야 합니다. 예: date_format('2015-04-08', 'y') = '2015'. date_format을 사용해 다른 UDF를 구현할 수도 있습니다: * dayname(date)는 date_format(date, 'EEEE'), dayofyear(date)는 date_format(date, 'D')입니다. Hive 4.0.0부터 "hive.datetime.formatter" 속성을 사용할 수 있습니다. | GenericUDFDateFormat |
수학 함수
Hive에서 지원하는 내장 수학 함수는 다음과 같습니다.
| 반환 타입 | 이름(시그니처) | 설명 | 소스 코드 |
|---|---|---|---|
| double | round(double a) |
a의 반올림된 bigint 값을 반환합니다. |
GenericUDFRound |
| double | round(double a, int d) |
소수 d자리로 반올림한 a를 반환합니다. |
|
| double | bround(double a) |
HALF_EVEN 반올림 모드를 사용해 a의 반올림된 bigint 값을 반환합니다. 가우스 반올림 또는 은행가 반올림이라고도 합니다. 예: bround(2.5) = 2, bround(3.5) = 4. |
GenericUDFBRound |
| double | bround(double a, int d) |
HALF_EVEN 반올림 모드를 사용해 소수 d자리로 반올림한 a를 반환합니다. 예: bround(8.25, 1) = 8.2, bround(8.35, 1) = 8.4. |
|
| bigint | floor(double a) |
a와 같거나 작은 최대 bigint 값을 반환합니다. |
GenericUDFFloor |
| bigint | ceil(double a), ceiling(double a) |
a와 같거나 큰 최소 bigint 값을 반환합니다. |
GenericUDFCeil |
| double | rand(), rand(INT seed) |
0에서 1까지 균일하게 분포하는(행마다 변하는) 난수를 반환합니다. 시드를 지정하면 생성되는 난수 시퀀스가 결정적이도록 보장합니다. | UDFRand |
| double | exp(double a), exp(decimal a) |
e가 자연로그의 밑일 때 ea를 반환합니다. |
UDFExp |
| double | ln(double a), ln(decimal a) |
인자 a의 자연로그를 반환합니다. |
UDFLn |
| double | log10(double a), log10(decimal a) |
인자 a의 밑이 10인 로그를 반환합니다. |
UDFLog10 |
| double | log2(double a), log2(decimal a) |
인자 a의 밑이 2인 로그를 반환합니다. |
UDFLog2 |
| double | log(double base, double a) log(decimal base, decimal a) |
인자 a의 밑이 base인 로그를 반환합니다. |
UDFLog |
| double | pow(double a, double p), power(double a, double p) |
ap를 반환합니다. |
GenericUDFPower |
| double | sqrt(double a), sqrt(decimal a) |
a의 제곱근을 반환합니다. |
UDFSqrt |
| string | bin(bigint a) |
이진 형식의 숫자를 반환합니다. | UDFBin |
| string | hex(bigint a) hex(string a) hex(binary a) |
인자가 int 또는 binary이면 hex는 숫자를 16진수 형식의 문자열로 반환합니다. 숫자가 문자열이면 각 문자를 16진수 표현으로 변환해 결과 문자열을 반환합니다. |
UDFHex |
| binary | unhex(STRING a) |
hex의 역입니다. 각 문자 쌍을 16진수 숫자로 해석해 숫자의 바이트 표현으로 변환합니다. | UDFUnhex |
| string | conv(bigint num, int from_base, int to_base), conv(STRING num, int from_base, int to_base) |
주어진 밑에서 다른 밑으로 숫자를 변환합니다. | UDFConv |
| double | abs(double a) |
절댓값을 반환합니다. | GenericUDFAbs |
| int 또는 double | pmod(INT a, int b), pmod(double a, double b) |
a mod b의 양수 값을 반환합니다. |
GenericUDFOPMod |
| double | sin(double a), sin(decimal a) |
a의 사인을 반환합니다(a는 라디안). |
UDFSin |
| double | asin(double a), asin(decimal a) |
-1<=a<=1이면 a의 아크사인을, 그렇지 않으면 NULL을 반환합니다. |
UDFAsin |
| double | cos(double a), cos(decimal a) |
a의 코사인을 반환합니다(a는 라디안). |
UDFCos |
| double | acos(double a), acos(decimal a) |
-1<=a<=1이면 a의 아크코사인을, 그렇지 않으면 NULL을 반환합니다. |
UDFAcos |
| double | tan(double a), tan(decimal a) |
a의 탄젠트를 반환합니다(a는 라디안). |
UDFTan |
| double | atan(double a), atan(decimal a) |
a의 아크탄젠트를 반환합니다. |
UDFAtan |
| double | degrees(double a), degrees(decimal a) |
a의 값을 라디안에서 도(degree)로 변환합니다. |
UDFDegrees |
| double | radians(double a), radians(double a) |
a의 값을 도에서 라디안으로 변환합니다. |
UDFRadians |
| int 또는 double | positive(INT a), positive(double a) |
a를 반환합니다. |
GenericUDFOPPositive |
| int 또는 double | negative(INT a), negative(double a) |
-a를 반환합니다. |
GenericUDFOPNegative |
| double 또는 int | sign(double a), sign(decimal a) |
a의 부호를 '1.0'(a가 양수) 또는 '-1.0'(a가 음수), 그 외에는 '0.0'으로 반환합니다. decimal 버전은 double 대신 int를 반환합니다. |
UDFSign |
| double | e() |
e의 값을 반환합니다. |
UDFE |
| double | pi() |
pi의 값을 반환합니다. |
UDFPI |
| bigint | factorial(INT a) |
a의 팩토리얼을 반환합니다. 유효한 a는 [0..20]입니다. |
GenericUDFFactorial |
| double | cbrt(double a) |
double 값 a의 세제곱근을 반환합니다. |
GenericUDFCbrt |
| int / bigint | shiftleft(TINYINT|SMALLINT|INT a, int b) shiftleft(bigint a, int b) |
비트 왼쪽 시프트. a를 왼쪽으로 b 위치 시프트합니다. tinyint, smallint, int a에 대해 int를, bigint a에 대해 bigint를 반환합니다. |
UDFOPBitShiftLeft |
| int / bigint | shiftright(TINYINT|SMALLINT|INT a, int b) shiftright(bigint a, int b) |
비트 오른쪽 시프트. a를 오른쪽으로 b 위치 시프트합니다. tinyint, smallint, int a에 대해 int를, bigint a에 대해 bigint를 반환합니다. |
UDFOPBitShiftRight |
| int / bigint | shiftrightunsigned(TINYINT|SMALLINT|INT a, int b), shiftrightunsigned(bigint a, int b) |
비트 부호 없는 오른쪽 시프트. a를 오른쪽으로 b 위치 시프트합니다. tinyint, smallint, int a에 대해 int를, bigint a에 대해 bigint를 반환합니다. |
UDFOPBitShiftRightUnsigned |
| T | greatest(T v1, T v2, ...) |
값 목록의 최댓값을 반환합니다. 하나 이상의 인자가 NULL이면 NULL을 반환하도록 수정되었고, ">" 연산자와 일치하도록 엄격한 타입 제한이 완화됐습니다. | GenericUDFGreatest |
| T | least(T v1, T v2, ...) |
값 목록의 최솟값을 반환합니다. 하나 이상의 인자가 NULL이면 NULL을 반환하도록 수정되었고, "<" 연산자와 일치하도록 엄격한 타입 제한이 완화됐습니다. | GenericUDFLeast |
| int | width_bucket(NUMERIC expr, NUMERIC min_value, NUMERIC max_value, int num_buckets) |
expr을 i번째 균등 크기 버킷에 매핑해 0과 num_buckets+1 사이의 정수를 반환합니다. 버킷은 [min_value, max_value]를 균등 크기 영역으로 나눠 만들어집니다. expr < min_value이면 1을, expr > max_value이면 num_buckets+1을 반환합니다. 자세한 내용은 https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions214.htm을 참고하세요. | GenericUDFWidthBucket |
| double | cosh(double x) |
라디안인 x의 쌍곡 코사인을 반환합니다. 예: cosh(0) 결과: 1. |
UDFCosh |
| double | tanh(double x) |
라디안인 x의 쌍곡 탄젠트를 반환합니다. 예: tanh(0) 결과: 1. |
UDFTanh |
컬렉션 함수
Hive에서 지원하는 내장 컬렉션 함수는 다음과 같습니다.
| 반환 타입 | 이름(시그니처) | 설명 | OSS |
|---|---|---|---|
| int | size(Map<K.V>) |
맵 타입의 요소 수를 반환합니다. | |
| int | size(Array<T>) |
배열 타입의 요소 수를 반환합니다. | |
| array |
map_keys(Map<K.V>) |
입력 맵의 키를 포함하는 비정렬 배열을 반환합니다. | |
| array |
map_values(Map<K.V>) |
입력 맵의 값을 포함하는 비정렬 배열을 반환합니다. | |
| boolean | array_contains(Array<T>, value) |
배열이 제공된 매개변수 값을 포함하면 TRUE를 반환합니다. | |
| array |
sort_array(Array<T>) |
배열 요소의 자연 순서에 따라 입력 배열을 오름차순으로 정렬해 반환합니다. | |
| array |
array(obj1, obj2, .... objN) |
입력 배열과 같은 타입이면서 고유한 값을 가진 배열을 반환합니다. 예: array('b','d','d','a')는 ['b','d','a']를 반환합니다. | GenericUDFArrayDistinct.java |
| array |
array_slice(array, start, length) |
요소의 부분 집합 또는 범위를 반환합니다. 예: array_slice(array(1, 2, 3, 4), 2, 2) 결과: 3,4. | GenericUDFArraySlice |
| t | array_min((array(obj1, obj2, obj3...)) |
순서가 지원되는 요소를 가진 배열에서 최솟값을 반환합니다. 예: array_min(array(1, 3, 0, NULL)) 결과: 0. | GenericUDFArrayMin |
| t | array_max((array(obj1, obj2, obj3...)) |
순서가 지원되는 요소를 가진 배열에서 최댓값을 반환합니다. 예: array_max(array(1, 3, 0, NULL)) 결과: 3. | GenericUDFArrayMax |
| t | array_distinct(array(obj1, obj2, obj3...)) |
입력 배열과 같은 타입이면서 고유한 값을 가진 배열을 반환합니다. 예: array_distinct(array('b','d','d','a')) 결과: ['b','d','a']. | GenericUDFArrayDistinct |
| string | array_join(array, delimiter, replaceNull) |
배열의 요소를 지정된 구분자로 연결합니다. 예: array_join(array(1, 2, NULL, 4), ',', ':') 결과: 1,2,:,4. | GenericUDFArrayJoin |
| array |
array_expect(array1, array2) |
array1에는 있지만 array2에는 없는 요소의 배열을 반환합니다. 예: array_expect(array(1, 2, 3, 4), array(2, 3)) 결과: [1,4]. | GenericUDFArrayExcept |
| array |
array_intersect(array1, array2) |
array1과 array2의 교집합에 있는 요소의 배열을 중복 없이 반환합니다. 예: array_intersect(array(1, 2, 3, 4), array(1, 2, 3)) 결과: [1,2,3]. | GenericUDFArrayIntersect |
| array |
array_union(array1, array2) |
array1과 array2의 합집합에 있는 요소의 배열을 중복 없이 반환합니다. 예: array_union(array(1, 2, 2, 4), array(2, 3)) 결과: [1, 2, 3, 4]. | GenericUDFArrayUnion |
| array |
array_remove(array, element) |
배열에서 요소의 모든 발생을 제거합니다. 예: array_remove(array(1, 2, 3, 4, 2), 2) 결과: [1, 3, 4]. | GenericUDFArrayRemove |
타입 변환 함수
Hive에서 지원하는 내장 타입 변환 함수는 다음과 같습니다.
| 반환 타입 | 이름(시그니처) | 설명 | 소스 코드 |
|---|---|---|---|
| binary | binary(string|binary) |
매개변수를 binary로 캐스팅합니다. | GenericUDFBaseBinary |
| 타입 | cast(expr as <type>) |
표현식 expr의 결과를 |
|
| string 또는 datetime | CAST(expr AS <type> FORMAT <pattern>) |
제공된 |
GenericUDFCastFormat |
조건 함수
Hive에서 지원하는 내장 조건 함수는 다음과 같습니다.
| 반환 타입 | 이름(시그니처) | 설명 |
|---|---|---|
| T | if(boolean testCondition, T valueTrue, T valueFalseOrNull) |
testCondition이 true이면 valueTrue를, 그렇지 않으면 valueFalseOrNull을 반환합니다. |
| boolean | isnull(a) |
a가 NULL이면 true를, 그렇지 않으면 false를 반환합니다. |
| boolean | isnotnull(a) |
a가 NULL이 아니면 true를, 그렇지 않으면 false를 반환합니다. |
| T | nvl(T value, T default_value) |
value가 null이면 기본값을, 그렇지 않으면 value를 반환합니다. |
| T | COALESCE(T v1, T v2, ...) |
NULL이 아닌 첫 번째 v를 반환하거나, 모든 v가 NULL이면 NULL을 반환합니다. |
| T | CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END |
a = b이면 c를, a = d이면 e를, 그 외에는 f를 반환합니다. |
| T | CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END |
a = true이면 b를, c = true이면 d를, 그 외에는 e를 반환합니다. |
| T | nullif(a, b) |
a=b이면 NULL을, 그렇지 않으면 a를 반환합니다. CASE WHEN a = b then NULL else a의 약칭입니다. |
| void | assert_true(boolean condition) |
'condition'이 true가 아니면 예외를 던지고, 그렇지 않으면 null을 반환합니다. 예: select assert_true(2<1). |
데이터 마스킹 함수
Hive에서 지원하는 내장 데이터 마스킹 함수는 다음과 같습니다.
| 반환 타입 | 이름(시그니처) | 설명 | 소스 코드 |
|---|---|---|---|
| string | mask(string str[, string upper[, string lower[, string number]]]) |
str의 마스킹된 버전을 반환합니다. 기본적으로 대문자는 "X"로, 소문자는 "x"로, 숫자는 "n"으로 변환됩니다. 예: mask("abcd-EFGH-8765-4321")은 xxxx-XXXX-nnnn-nnnn을 결과로 냅니다. 추가 인자를 제공해 마스크에 사용되는 문자를 재정의할 수 있습니다. 두 번째 인자는 대문자 마스크 문자, 세 번째는 소문자, 네 번째는 숫자를 제어합니다. 예: mask("abcd-EFGH-8765-4321", "U", "l", "#")은 llll-UUUU-####-####을 결과로 냅니다. | GenericUDFMask |
| string | mask_first_n(string str[, int n]) |
처음 n개 값이 마스킹된 str의 마스킹 버전을 반환합니다. 대문자는 "X"로, 소문자는 "x"로, 숫자는 "n"으로 변환됩니다. 예: mask_first_n("1234-5678-8765-4321", 4)은 nnnn-5678-8765-4321을 결과로 냅니다. | GenericUDFMaskFirstN |
| string | mask_last_n(string str[, int n]) |
마지막 n개 값이 마스킹된 str의 마스킹 버전을 반환합니다. 대문자는 "X"로, 소문자는 "x"로, 숫자는 "n"으로 변환됩니다. 예: mask_last_n("1234-5678-8765-4321", 4)은 1234-5678-8765-nnnn을 결과로 냅니다. | GenericUDFMaskLastN |
| string | mask_show_first_n(string str[, int n]) |
처음 n개 문자를 마스킹하지 않고 보여주는 str의 마스킹 버전을 반환합니다. 대문자는 "X"로, 소문자는 "x"로, 숫자는 "n"으로 변환됩니다. 예: mask_show_first_n("1234-5678-8765-4321", 4)은 1234-nnnn-nnnn-nnnn을 결과로 냅니다. | GenericUDFMaskShowFirstN |
| string | mask_show_last_n(string str[, int n]) |
마지막 n개 문자를 마스킹하지 않고 보여주는 str의 마스킹 버전을 반환합니다. 대문자는 "X"로, 소문자는 "x"로, 숫자는 "n"으로 변환됩니다. 예: mask_show_last_n("1234-5678-8765-4321", 4)은 nnnn-nnnn-nnnn-4321을 결과로 냅니다. | GenericUDFMaskShowLastN |
| string | mask_hash(string|char|varchar str) |
str에 기반한 해시 값을 반환합니다. 해시는 일관적이며 마스킹된 값을 테이블 간에 조인하는 데 사용할 수 있습니다. 이 함수는 문자열이 아닌 타입에 대해 null을 반환합니다. | GenericUDFMaskHash |
기타 함수
Hive에는 위의 어떤 범주에도 속하지 않는 여러 내장 함수가 있습니다. 이는 Hive가 가진 특별한 함수들입니다.
| 반환 타입 | 이름(시그니처) | 설명 | 소스 코드 |
|---|---|---|---|
| varies | java_method(class, method[, arg1[, arg2..]]) |
reflect의 동의어입니다. |
GenericUDFReflect |
| varies | reflect(class, method[, arg1[, arg2..]]) |
리플렉션을 사용해 인자 시그니처를 매칭하여 Java 메서드를 호출합니다. 예제는 Reflect (Generic) UDF를 참고하세요. | GenericUDFReflect |
| int | hash(a1[, a2...]) |
인자의 해시 값을 반환합니다. | GenericUDFHash |
| string | current_user() |
구성된 인증 관리자에서 현재 사용자 이름을 반환합니다. 연결 시 제공한 사용자와 같을 수 있지만 일부 인증 관리자(예: HadoopDefaultAuthenticator)에서는 다를 수 있습니다. | GenericUDFCurrentUser |
| string | logged_in_user() |
세션 상태에서 현재 사용자 이름을 반환합니다. 이는 Hive에 연결할 때 제공한 사용자 이름입니다. | GenericUDFLoggedInUser |
| string | current_database() |
현재 데이터베이스 이름을 반환합니다. | GenericUDFCurrentDatabase |
| string | md5(string/binary) |
문자열 또는 binary에 대한 MD5 128비트 체크섬을 계산합니다. 값은 32자리 16진수 문자열로 반환되며, 인자가 NULL이면 NULL을 반환합니다. 예: md5('ABC') = '902fbdd2b1df0c4f70b4a5d23525e932'. | UDFMd5 |
| string | sha1(string/binary) sha(string/binary) |
문자열 또는 binary에 대한 SHA-1 다이제스트를 계산해 값을 16진수 문자열로 반환합니다. 예: sha1('ABC') = '3c01bdbb26f358bab27f267924aa2c9a03fcfdb8'. | UDFSha1 |
| bigint | crc32(string/binary) |
문자열 또는 binary 인자에 대한 순환 중복 검사(CRC) 값을 계산해 bigint 값을 반환합니다. 예: crc32('ABC') = 2743272264. | UDFCrc32 |
| string | sha2(string/binary, int) |
SHA-2 계열 해시 함수(SHA-224, SHA-256, SHA-384, SHA-512)를 계산합니다. 첫 번째 인자는 해시할 문자열 또는 binary입니다. 두 번째 인자는 원하는 결과 비트 길이를 나타내며 224, 256, 384, 512 또는 0(256과 동일)이어야 합니다. SHA-224는 Java 8부터 지원됩니다. 어느 인자든 NULL이거나 해시 길이가 허용 값 중 하나가 아니면 반환 값은 NULL입니다. 예: sha2('ABC', 256) = 'b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78'. | GenericUDFSha2 |
| binary | aes_encrypt(input string/binary, key string/binary) |
AES를 사용해 입력을 암호화합니다. 128, 192 또는 256비트 키 길이를 사용할 수 있습니다. 192·256비트 키는 Java 확장(JCE) 무제한 강도 관할 정책 파일이 설치된 경우 사용할 수 있습니다. 어느 인자든 NULL이거나 키 길이가 허용 값 중 하나가 아니면 반환 값은 NULL입니다. 예: base64(aes_encrypt('ABC', '1234567890123456')) = 'y6Ss+zCYObpCbgfWfyNWTw=='. | GenericUDFAesEncrypt |
| binary | aes_decrypt(input binary, key string/binary) |
AES를 사용해 입력을 복호화합니다. 128, 192 또는 256비트 키 길이를 사용할 수 있습니다. 192·256비트 키는 JCE 무제한 강도 관할 정책 파일이 설치된 경우 사용할 수 있습니다. 어느 인자든 NULL이거나 키 길이가 허용 값 중 하나가 아니면 반환 값은 NULL입니다. 예: aes_decrypt(unbase64('y6Ss+zCYObpCbgfWfyNWTw=='), '1234567890123456') = 'ABC'. | GenericUDFAesDecrypt |
| string | version() |
Hive 버전을 반환합니다. 문자열은 2개의 필드를 포함하는데, 첫 번째는 빌드 번호, 두 번째는 빌드 해시입니다. 예: "select version();"은 "2.1.0.2.5.0.0-1245 r027527b9c5ce1a3d7d0b6d2e6de2378fb0c39232"를 반환할 수 있습니다. 실제 결과는 빌드에 따라 다릅니다. | UDFVersion |
| bigint | surrogate_key([write_id_bits, task_id_bits]) |
테이블에 데이터를 입력할 때 행에 대한 숫자 ID를 자동 생성합니다. acid 또는 insert-only 테이블의 기본값으로만 사용할 수 있습니다. | GenericUDFSurrogateKey |
| string | typeof(x) |
제공된 인자의 타입을 반환합니다. | GenericUDFTypeOf |
지리공간 (Geospatial)
Hive 4.0은 ESRI 기반의 표준 지리공간 UDF를 제공합니다.
ESRI UDF는 매우 광범위한 목록을 구성하며, Hive 문서가 함수 문서 전체를 복제하지 않는다는 점에 유의해야 합니다. 여기에서 ESRI UDF 문서를 찾을 수 있습니다.
커스텀 UDF 만들기
Apache Hive는 광범위한 내장 사용자 정의 함수(UDF)를 제공합니다. 그러나 내장 함수로 다루지 못하는 특정 요구 사항은 기본적인 Java 이해만으로 사용자가 직접 커스텀 UDF를 개발할 수 있습니다.
Hive의 커스텀 UDF는 입력·출력 행 수에 따라 세 가지 유형으로 분류됩니다. 각 UDF 유형은 구현해야 하는 서로 다른 인터페이스에 대응합니다.
| UDF | UDAF | UDTF |
|---|---|---|
단일 행을 입력으로 받아 단일 행을 출력으로 반환하는 함수입니다. length, round 같은 함수. org.apache.hadoop.hive.ql.exec.UDF; |
여러 행을 입력으로 받아 단일 행을 출력으로 반환하는 함수입니다. Count, Min, Max 같은 함수. | 단일 행을 입력으로 받아 여러 행(결과 집합 또는 테이블)을 출력으로 반환하는 함수입니다. explode, parse_url_tuple 같은 함수. |
더 알아보기 (Learn more)
직접 UDAF를 만들고 싶다면 GenericUDAF 작성 튜토리얼이 좋은 출발점이에요. 함수를 커스텀으로 등록하고 사용하는 방법은 Hive UDF·UDAF·UDTF 관련 문서를 함께 참고하세요.