HIVE에서 매크로 사용
3467 단어 Hadoop
create temporary macro sayhello (x string) concat('hello,',x,'!');
select sayhello(' '); -- :hello, !
위의 코드에서, 우선 우리는sayhello라는 매크로를 정의했고, 입력 매개 변수는 문자열 x이고, 출력은 x에 대한 결합이다.나중에 HR에 인사해야 할 경우 sayhello('HR')를 입력하면 됩니다.
우리는 매크로를 사용자 정의 '함수'로 간주할 수 있으며, 그 개발 과정은 UDF에 비해 더욱 간편하다.
작업에서 자주 사용하는 매크로는 다음과 같습니다.
1. 빈 값에 대한 처리
1. NULL에 빈 문자열 돌리기
create temporary macro empty2null (x string) if(trim(x) = '', null, x);
장면 사용:coalesce나 nvl를 사용할 때, 이전 인자가 빈 문자열이면 다음 인자를 찾을 수 없습니다.하면, 만약, 만약...
nvl(empty2null(a),empty2null(b))
a가 공백일 경우 b의 값을 반환하고 b가 공백일 경우 또는 NULL일 경우 NUL을 반환합니다.
이 예에서 우리는 코드를 작성하는 시간을 절약할 뿐만 아니라 a나 b가 공백일 수 있는지 조사하는 데 더 이상 정력을 들일 필요가 없다. 머리가 없으면 이런 방식으로 코드를 작성하면 된다.이와 유사하게 숫자 필드의 경우 0-NULL 매크로를 작성할 수 있습니다.
2. NULL 빈 문자열 돌리기
create temporary macro null2empty (x string) if(x is null, '', x);
장면 1 사용: concat을 사용하여 두 필드를 연결할 때 하나가 NULL이면 출력도 NULL이다.이때 출력이 NULL이 되지 않도록 하려면 NULL을 빈 문자열로 전환할 수 있습니다.마찬가지로 두 필드가 NULL일 수 있는지 조사하는 데 더 이상 신경 쓸 필요가 없다.
장면 2를 사용한다: 예를 들어case-when의 여러 가지 출력은 NULL과 공백을 포함한다.
3. NULL과 공백 판단
create temporary macro nn(x string) nvl(trim(x),'') = '';
x가 NULL 또는 빈 문자열이면 true로 돌아갑니다.개인적으로 이 논리는 여전히 매우 자주 사용된다고 생각하기 때문에 이렇게 매크로를 썼는데 이름이 간단하고 n을 두 번 두드리면 된다.
추가:
create temporary macro nn2rand (x string) case when nn(x) then concat('hive',rand()) else x end;
말 그대로 nn2rand, NULL과 빈 문자열을 무작위 문자열로 바꿉니다.'키=NULL 또는 빈 문자열'로 인한 데이터 경사 문제가 발생하면 키를 무작위 문자열로 전환시켜 이 부분의 기록을 각각의 Reduce에 고르게 분배해야 한다.
2. 시간에 대한 계산
1.지난달 첫날
create temporary macro firstDayLastMonth (x string) trunc(add_months(x,-1),'MM');
CURRENT로 전송DATE가 필요합니다.이 매크로를 쓰는 이유는firstDayLastMonth라는 이름을 사용하면 프로그램을 더욱 쉽게 읽을 수 있기 때문이다.
2.지난달 마지막 날
create temporary macro lastDayLastMonth (x string) last_day(add_months(x,-1));
CURRENT로 전송DATE가 필요합니다.이유가 같다.
3.시간차
create temporary macro hourdiff (x string, y string) hour(x)-hour(y)+(datediff(x,y))*24;
되돌아오는 두 시간은 몇 시간 차이가 난다
4. 날짜 처리
create temporary macro properdt (dt string) concat_ws('-',split(dt,'/')[0],lpad(split(dt,'/')[1],2,'0'),lpad(split(dt,'/')[2],2,'0'));
2019/1/1을 2019-01-01로 바꾸는 기능이다.그 중에서 2019/1/1은 excel에서 자주 사용하는 형식이고 2019-01-01은hive표에서 자주 사용하는 형식이다.로컬 파일을hdfs에 업로드하고hive에서 조회하려면 사용하십시오.
5. 시간 비교
create temporary macro earliest (x string, y string) least(empty2null(x),empty2null(y));
타임 1과 타임 2를 두 개의 시간 필드로 하고 모두string 형식으로 빈 문자열로 결함을 표시합니다.현재의 수요는 두 개의 시간이 비교적 빠른 것을 고르는 것이다.최소값을 직접 선택하면 타임1이 공백일 때 반드시 공백을 출력합니다. (모든 문자열보다 공백이 작기 때문에) 그러나 타임2가 공백이 아니라면 타임2를 결과로 해야 합니다.위의 매크로를 사용하여 빈 문자열을 NULL로 변환한 후 최소값을 얻을 수 있습니다.
수학 계산
create temporary macro halfceil (x decimal)
case
when x = floor(x) then x
when x - floor(x) <= 0.5 then floor(x) + 0.5
else ceil(x)
end;
기능: 0.5로 위로 정렬.예를 들어 1.2는 1.5, 1.7은 2.0이 되고 1.5, 2.0은 변하지 않는다.매크로가 있으면 아무리 긴 수학 공식이라도 단행으로 실현할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Hadoop 클러스터의 JobHistory Server 상세 정보역사 서버를 통해 이미 실행된 Mapreduce 작업 기록을 볼 수 있습니다. 이렇게 하면 우리는 해당 기계의 19888 포트에서 역사 서버의 WEB UI 인터페이스를 열 수 있다.이미 실행된 작업 상황을 볼 수 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.