Limit
- DUMP를 이용하여 출력할 때 출력되는 튜플의 계수를 제한
- 아래 예제는 최대 3개의 출력만을 가진다.
X = LIMIT A 3;
DUMP X;
Order by
- 릴레이션의 튜플이 있을 때 하나의 속성을 기준으로 정렬할 수 있는 명령어로 오름차순(ASC), 내림차순(DESC)이 가능
- sample_data 수정 후 저장
- A에 데이터의 속성 이름과 데이터 형태 지정 후 저장
- a3 속성을 내림차순 정렬
A = LOAD 'sample_data' AS (a1:int,a2:int,a3:int);
X = ORDER A BY a3 DESC;
DUMP X;
Rank
- Rank는 릴레이션의 튜플이 있을 때 하나의 속성을 기준으로 순위를 지정하여 반환
- sample_data 수정 및 HDFS에 저장
- A 릴레이션에 데이터 속성 이름과 데이터 형태를 지정하여 저장
- 각 튜플의 첫 번째 데이터에 자동으로 순위가 매겨진 것을 볼 수 있음.
- Rank를 사용할 때 속성을 지정하지 않으면, 단순히 첫 번째 튜플부터 순차적으로 값을 추가
A = load 'sample_data' USING PigStorage(',') AS (f1:chararray,f2:int,f3:chararray);
B = rank A;
DUMP B;
- C 릴레이션에 A 릴레이션의 f1 속성을 내림차순, f2 속성을 오름차순으로 지정하여 저장 후 출력
- f1 속성을 기준으로 문자열(알파벳 순)의 순위가 내림차순으로 정렬되고, f1의 값이 동일하다면, 동일한 f1 값 내에서 f2 속성을 기준으로 숫자의 순위가 오름차순 정렬
- 또한 첫번 째 속성에는 순위가 매겨진 것을 확인할 수 있으며, f1의 값이 동일하면 공동 순위로 표현됨
C = rank A by f1 DESC, f2 ASC;
DUMP C;
sample
- sample은 지정한 릴레이션의 값을 무작위로 추출하여 저장하는 명령어
- 앞장에서 실시한 마지막 릴레이션인 C의 현재 데이터중 절반을 부작위로 추출하여 X 릴레이션에 저장
- 0.5가 50%를 의미하여 입력할 수 있는 값의 범위는 0~ 1로 입력 가능
- C 릴레이션의 데이터는 11개이며 50%를 하여 11/2 하면 5.5 이지만 개수 출력에는 올림을 적용하여 6개 출력
X = SAMPLE C 0.5;
DUMP X;
Split
- 일부 특정 조건식을 기반으로 릴레이션의 튜플을 2개 이상의 릴레이션으로 분할
- sample_data 수정 및 저장
- A 릴레이션에 데이터 속성 이름과 데이터 타입을 지정하여 저장
- X 릴레이션에 f1 속성 값이 7이하이고, Y 릴레이션에 f2 속성값이 5이며, Z 릴레이션에 f3의 값이 6보다 작거나 큰 튜플을 저장 후 출력
A = LOAD 'sample_data' AS (f1:int,f2:int,f3:int);
SPLIT A INTO X IF f1<7, Y IF f2==5, Z IF (f3<6 OR f3>6);
DUMP X;
DUMP Y;
DUMP Z;
DUMP X 결과
DUMP Y 결과
DUMP Z 결과
Store
- HDFS에 릴레이션을 저장하는 명령어로 데이터내 각 속성을 구분하는 구분자를 지정하여 저장할 수 있음
- 앞장에서 수행한 A 릴레이션의 데이터에서 각 속성을 슬러쉬('/')로 구분하여 output 디렉터리로 저장
- 경로를 지정하지 않으면 HDFS 홈 디렉토리임 /user/hadoop 그저께 저장되며 Root 디렉터리 아래에 저장하고 싶으면 절대경로로 입력해야 함.
STORE A INTO 'output' USING PigStorage('/');
- /user/root/output 디렉토리가 생성된 것을 확인할 수 있다.
- CONCAT 옵션을 사용하면 각 속성의 데이터 형식을 지정할 수 있음
- 앞에서 수행한 A 릴레이션의 데이터에서 각 속성에 a,b,c 라는 형식을 지정하여 B 릴레이션에 저장
- 앞에서 수행한 A 릴레이션의 데이터에서 각 속성을 콤마(",")로 구분하여 output2 디렉터리로 저장
B = FOREACH A GENERATE CONCAT('a:',(chararray)f1), CONCAT('b:',(chararray)f2), CONCAT('c:',(chararray)f3);
STORE B INTO 'output2' using PigStorage(',');
- /user/root/output2 디렉토리가 생성되는 것을 확인할 수 있다.
Union
- 둘 이상의 데이터를 병합
- 단순 병합이기 때문에 튜플의 순서를 유지하지 않고, 모든 튜플이 동일한 스키마를 준수하는지 또는 동일한 수의 속성이 잇는지 확인하지 않음.
- 또한 중복 튜플을 제거하지 않음
- sample_data2 수정 후 저장
- A에 sample_data를 B에 sample_data2를 불러오고, Union 수행
- 전혀 다른 형태의 자료가 병합되어 X 릴레이션에 저장된 것을 확인
A = LOAD 'sample_data' AS (a1:int, a2:int, a3:int);
B = LOAD 'sample_data2' USING PigStorage(',') as (b1:int, b2:int,b3:int);
X = UNION A, B;
DUMP X;
AVG
- 평균 계산 가능
- sample_data 수정 후 저장
- A 릴레이션에 콤마 형태로 데이터의 속성을 구분하고, 속성 이름과 데이터 타입을 정하여 저장
- B 릴레이션에 GROUP BY 구문을 통해 name 속성을 기준으로 그룹화
- C 릴레이션에 FOREACH GENERATE 구문을 통해 A 릴레이션의 name 속성과 gpa 속성의 평균을 계산하여 B 릴레이션으로 지정하여 저장 후 출력
A = LOAD 'sample_data' USING PigStorage(',') AS (name:chararray, term:chararray, gpa:float);
B = GROUP A BY name;
C = FOREACH B GENERATE A.name, AVG(A.gpa);
DUMP C;
BagToString
- Bag의 자료형태로 나타내는 구조를 문자열로 형변환이 가능
- sample_data 수정 후 저장
- team_parks 릴레이션에 데이터의 속성 이름과 형태를 지정하여 저장
- team_parklist 릴레잇녀에 FOREACH GENERATE 구문을 통해 team_parks 릴레이션의 team_id 속성을 그룹화하고, park_id 속성을 BagTo STring 함수를 통해 Bag 형태의 내부 튜플을 세미콜론을 통해 구분 지어 형변환하여 저장 후 출력
- 두 번째 데이터의 속성인 park_id가 BagToString 함수를 통해 세미콜론(";")을 기준으로 데이터가 구분되어 저장+
team_parks = LOAD 'sample_data' AS (team_id:chararray, park_id:chararray);
team_parkslist = FOREACH (GROUP team_parks BY team_id) GENERATE group AS team_id, BagToString(team_parks.park_id, ';');
DUMP team_parkslist;
'빅데이터 관리 > Hadoop' 카테고리의 다른 글
PIG 기본명령어 - 6 (0) | 2023.05.16 |
---|---|
PIG 기본 명령어 - 5 (1) | 2023.05.16 |
PIG 기본 명령어 - 3 (0) | 2023.05.15 |
PIG 기본 명령어 - 2 (0) | 2023.05.15 |
PIG 기본 명령어 - 1 (0) | 2023.05.15 |