Hive 함수: 내장 및 UDF [사용자 정의 함수] 예
함수는 테이블 열 이름의 피연산자에 대한 수학, 산술, 논리, 관계 등의 연산을 수행하기 위해 특정 목적에 맞게 작성됩니다.
내장 기능
이는 Hive에서 이미 사용할 수 있는 기능입니다. 먼저 애플리케이션 요구 사항을 확인한 다음 애플리케이션에서 이러한 내장 기능을 사용할 수 있습니다. 우리는 애플리케이션에서 이러한 함수를 직접 호출할 수 있습니다.
구문과 유형은 다음 섹션에서 설명됩니다.
HIVE에 내장된 기능의 종류
- 수집 기능
- 날짜 함수
- 수학 함수
- 조건부 함수
- 문자열 함수
- 기타 기능
수집 기능
이러한 함수는 컬렉션에 사용됩니다. 컬렉션은 요소를 그룹화하고 단일 또는 요소 배열을 반환하는 것을 의미하며 함수 이름에 언급된 반환 유형에 따라 달라집니다.
반환 유형 | 기능 명 | 상품 설명 |
---|---|---|
INT | 크기(지도 ) | 지도 유형의 구성요소 번호를 가져와서 제공합니다. |
INT | 크기(배열 ) | 배열 유형의 요소 번호를 가져와서 제공합니다. |
정렬 | Map_keys(지도 ) | 입력 맵의 키가 포함된 배열을 가져와서 제공합니다. 여기서 배열은 순서가 없습니다. |
정렬 | Map_values(지도 ) | 입력 맵의 값을 포함하는 배열을 가져와서 제공합니다. 여기서 배열은 순서가 없습니다. |
정렬 | Sort_array(배열 ) | 입력 배열을 배열과 요소의 오름차순으로 정렬하고 반환합니다. |
날짜 함수
이는 날짜 조작 및 날짜 유형을 한 유형에서 다른 유형으로 변환하는 데 사용됩니다.
기능 명 | 반환 유형 | 상품 설명 |
---|---|---|
유닉스_타임스탬프() | BigInt | 우리는 현재를 얻을 것이다 유닉스 초 단위의 타임스탬프 |
To_date(문자열 타임스탬프) | 현 | 타임스탬프 문자열의 날짜 부분을 가져와서 제공합니다. |
연도(문자열 날짜) | INT | 날짜 또는 타임스탬프 문자열의 연도 부분을 가져와서 제공합니다. |
분기(날짜/타임스탬프/문자열) | INT | 1~4 범위의 날짜, 타임스탬프 또는 문자열에 대한 연도의 분기를 가져와서 제공합니다. |
월(문자열 날짜) | INT | 날짜 또는 타임스탬프 문자열의 월 부분을 제공합니다. |
시간(문자열 날짜) | INT | 타임스탬프의 시간을 가져와서 제공합니다. |
분(문자열 날짜) | INT | 타임스탬프의 분을 가져와서 제공합니다. |
Date_sub(문자열 시작 날짜, int 일) | 현 | 시작 날짜까지의 일수를 가져와서 뺍니다. |
현재_날짜 | 데이터 | 쿼리 평가 시작 시 현재 날짜를 가져와서 제공합니다. |
LAST _day(문자열 날짜) | 현 | 날짜가 속한 달의 마지막 날을 가져와서 제공합니다. |
trunc(문자열 날짜, 문자열 형식) | 현 | 형식에 지정된 단위로 잘린 날짜를 가져와서 제공합니다.
지원되는 형식은 다음과 같습니다. 월/월/MM, 연도/YYYY/YY. |
수학 함수
이 함수는 수학에 사용됩니다. Operations. UDF를 생성하는 대신 Hive에는 몇 가지 수학 함수가 내장되어 있습니다.
기능 명 | 반환 유형 | 상품 설명 |
---|---|---|
라운드(더블 X) | 더블 | X의 반올림된 BIGINT 값을 가져와 반환합니다. |
라운드(DOUBLE X, INT d) | 더블 | X를 가져와서 소수점 이하 d자리로 반올림하여 반환합니다. |
라운드(더블 X) | 더블 | HALF_EVEN 반올림 모드를 사용하여 X의 반올림된 BIGINT 값을 가져와 반환합니다. |
바닥(더블X) | 빅인트 | X 값과 같거나 작은 최대 BIGINT 값을 가져와 반환합니다. |
천장(더블 a), 천장(더블 a) | 빅인트 | X 값보다 크거나 같은 최소 BIGINT 값을 가져와 반환합니다. |
rand(), rand(INT 시드) | 더블 | 0에서 1까지 균일하게 분포된 난수를 가져와서 반환합니다. |
조건부 함수
조건부 값 확인에 사용되는 함수입니다.
기능 명 | 반환 유형 | 상품 설명 |
---|---|---|
if(부울 테스트조건, T valueTrue, T valueFalseOrNull) | T | 다음과 같은 경우 True 값을 가져와서 제공합니다. 테스트 조건은 true입니다. 그렇지 않으면 False 또는 Null 값을 반환합니다. |
ISNULL(X) | 부울 | X가 NULL이면 true를 가져오고 그렇지 않으면 false를 반환합니다. |
ISNOTNULL(X) | 부울 | X가 NULL이 아니면 true를 가져와서 반환하고, 그렇지 않으면 false를 반환합니다. |
문자열 함수
문자열 조작과 문자열 연산 이러한 함수를 호출할 수 있습니다.
기능 명 | 반환 유형 | 상품 설명 |
---|---|---|
역방향(문자열 X) | 현 | X의 역방향 문자열을 제공합니다. |
rpad(문자열 str, int 길이, 문자열 패드) | 현 | 그것은 길이(정수 값)만큼 패드로 오른쪽 패딩된 str을 가져와서 제공합니다. |
rtrim(문자열 X) | 현 | X의 끝(오른쪽)에서 공백을 잘라낸 결과 문자열을 가져와 반환합니다. 예를 들어, rtrim(' 결과 ') 결과는 ' 결과'입니다. |
공간(INT n) | 현 | n개의 공백으로 구성된 문자열을 가져와서 제공합니다. |
분할(STRING str, STRING pat) | 정렬 | pat를 기준으로 str을 분할합니다(pat는 정규 표현식입니다). |
Str_to_map(텍스트[, delimiter1, delimiter2]) | 지도 | 두 개의 구분 기호를 사용하여 텍스트를 키-값 쌍으로 분할합니다. |
UDF(사용자 정의 함수)
Hive에서 사용자는 특정 클라이언트 요구 사항을 충족하기 위해 자체 기능을 정의할 수 있습니다. Hive에서는 이를 UDF라고 합니다. 사용자 정의 함수 Java 특정 모듈의 경우.
일부 UDF는 애플리케이션 프레임워크에서 코드를 재사용할 수 있도록 특별히 설계되었습니다. 개발자는 이러한 기능을 다음에서 개발할 것입니다. Java 해당 UDF를 Hive와 통합합니다.
Query 실행 중에 개발자는 코드를 직접 사용할 수 있으며 UDF는 사용자가 정의한 작업에 따라 출력을 반환합니다. 코딩과 실행 측면에서 높은 성능을 제공할 것입니다.
예를 들어 문자열 형태소 분석의 경우 Hive에는 미리 정의된 함수가 없습니다. 이를 위해 줄기 UDF를 다음과 같이 작성할 수 있습니다. JavaStem 기능이 필요한 경우 Hive에서 이 Stem UDF를 직접 호출할 수 있습니다.
여기서 어간 기능은 루트 단어에서 단어를 파생하는 것을 의미합니다. 이는 형태소 분석 알고리즘이 "wishing", "wished" 및 "wishs"라는 단어를 어근 "wish"로 줄이는 것과 같습니다. 이러한 유형의 기능을 수행하기 위해 UDF를 작성할 수 있습니다. Java 그리고 그것을 통합 하이브.
사용 사례에 따라 UDF를 작성할 수 있습니다. 이는 다양한 수의 입력 및 출력 값을 허용하고 생성합니다.
일반적인 유형의 UDF는 단일 입력 값을 허용하고 단일 출력 값을 생성합니다. 쿼리에 UDF가 사용되면 결과 데이터 세트의 각 행에 대해 UDF가 한 번씩 호출됩니다.
다른 방법으로는 값 그룹을 입력으로 받아들이고 단일 출력 값도 반환할 수 있습니다.