형 변환(cast) 연산자
- sample_data 수정 후 HDFS에 저장
A = LOAD 'sample_data' AS (f1:int, f2:int);
B = GROUP A BY f1;
DUMP B;
- B 릴레이션에 GROUP BY를 통해 f1 속성 값을 기준으로 Inner Bag 형태로 튜플이 생성된 것을 확인
데이터 형 변환
- X 릴레이션의 첫 번째 속성은 B 릴레이션의 첫 번째 값인 group
- 두 번째 속성은 A 릴레이션에 COUNT 함수를 이용하여 int 형태의 데이터를 chararray 형태로 변환하여 Inner Bag 데이터의 개수를 total 속성명으로 변경하여 저장 후 확인
X = FOREACH B GENERATE group, (chararray)COUNT(A) AS total;
DUMP X;
- X 릴레이션을 확인하면 첫 번쨰 속성은 B 릴레이션의 group 속성값이며, 두 번째 속성은 int 형태를 chararray 형태로 변환하여 개수를 출력
- A, B, X 릴레이션을 DESCRIBE 명령어를 통해 데이터 속성명과 데이터 타입에 대한 구조를 확인하면 쉽게 이해할 수 있다.
데이터 조건 지정(ASSERT)
- sample_data 수정 후 저장
- A 릴레이션에 데이터의 속성 이름과 데이터 형태를 정함
- A 릴레이션에 ASSERT를 이용하여 a0 속성의 값은 3 이상(a0 > 3)이어야 하는 조건과 설명을 입력 후 출력
A = LOAD 'sample_data' AS (a0:int, a1:int, a2:int);
ASSERT A by a0 > 3, 'a0 should be greater than 3';
DUMP A
- 에러가 발생한다.
- A 릴레이션에 저장된 데이터 중 첫번째 데이터의 a0 속성 값은 1이기 때문에 ASSERT로 설정한 a0 > 3에 위배되기 때문에 에러가 발생한다.
직교 연산자 CROSS
- 직교 연산자란 두 개 이상의 릴레이션의 전체 곱연산을 의미
- sample_data 정 후 저장
- 직교 연산은 릴레이션이 2개가 필요하기 때문에 sample_data2도 생성해줌
- A 릴레이션과 B 릴레이션에 데이터 속성 이름과 데이터 형태를 정함
A = LOAD 'sample_data' AS (a1:int,a2:int,a3:int);
B = LOAD 'sample_data2' AS (b1:int,b2:int);
X = CROSS A, B;
DUMP X;
- A 릴레이션, B 릴레이션을 서로 교차하여 곱한 결과
Cube 연산
- sample_data 수정 후 저장
- Cube 연산은 차원별로 지정된 그룹의 모든 가능한 조합에 대한 집계를 계산
- n 차원에 대해 큐브에 의해 생성 된 조합 별 그룹 수는 2^n
- Rollup 연산은 차원별로 지정된 그룹의 계층적 순서를 기반으로 여러 수준의 집계를 계산
- n차원에 대해 롤업으로 생성 된 조합 별 그룹 수는 n+1
salesinp = LOAD 'sample_data' USING PigStorage(',') AS (product:chararray, year:int, region:chararray, state:chararray, city:chararray, sales:long);
cubedinp = CUBE salesinp BY CUBE(product,year);
DUMP cubedinp;
- salesinp 릴레이션에 PigStorage(',')을 이용하여 입력한 데이터의 콤마(', ')를 기준으로 각 속성명과 데이터 타입을 정하여 저장
- cubedinp 릴레이션에 CUBE BY CUBE 구문을 이용하여 salesinp 릴레이션의 product, year 속성을 그룹화하여 묶을 수 있는 모든 경우의 수를 계산하여 저장 후 출력
- CUBE(product, year)에 의해 product와 year 속성을 이용하여 생성할 수 있는 그룹의 경우의 수를 전부 출력하는 것을 볼 수 있다. 2^n -> 2^2 = 4
Rollup 연산
rolledup = CUBE salesinp BY ROLLUP (region, state, city);
DUMP rolledup;
- rolledup 릴레이션에 CUBE BY ROLLUP 구문을 이용하여 salesinp 릴레이션의 region, state, city 속성에 대해 생성할 수 있는 계층적 그룹의 경우의 수를 집계하여 저장 후 출력
- region, state, city 순서로 그룹을 구성할 때 계층적 경우의 수를 전부 출력
- n+1 개를 가짐 3+1 = 4개
Distinct 연산
- Distinct 연산은 중복 튜플을 제거할 수 있는 연산이다
- sample_data 수정 후 저장
- A 릴레이션에 PigStorage(',')를 이용하여 입력한 데이터의 콤마(", ")를 기준으로 각 속성명과 데이터 타입을 정하여 저장 후 출력
A = LOAD 'sample_data' USING PigStorage(',') AS (a1:int,a2:int,a3:int);
DUMP A;
X = DISTINCT A;
DUMP X;
복합 FOREACH ~ GENERATE
- FOREACH ~ GENERATE 구문을 통해 데이터의 속성 중 원하는 속성을 가져오는 예제를 수행하였다.
- sample_data 수정 후 저장
- A 릴레이션에 데이터 속성 이름과 데이터 타입을 저장하고, B 릴레이션에 GROUP ~ BY 구문을 통해 url 속성을 기준으로 그룹화 진행 후 출력
A = LOAD 'sample_data’ AS (url:chararray,outlink:chararray);
B = GROUP A BY url;
DUMP B;
- X 릴레이션에 A 릴레이션의 FILTER BY 구문을 통해 outlink 속성의 데이터가 'www.xyz.org' 인 것만 저장
- DA 릴레이션에 Dinstinct를 통해 중복을 제거하고 저장
- 마지막으로 B 릴레이션의 첫 번째 속성인 그룹화된 group 속성과, 중복을 제거한 DA 릴레이션의 데이터 개수를 COUNT 함수를 통해 집계 후 출력
X = FOREACH B {
FA= FILTER A BY outlink == 'www.xyz.org’;
DA = DISTINCT FA;
GENERATE group, COUNT(DA);
}
DUMP X;
- 복합 FOREACH ~ GENERATE는 함수처럼 사용할 수 있으며, 각 기능에 대한 이해가 필요하기 때문에 결과 해석 이미지 추가
'빅데이터 관리 > Hadoop' 카테고리의 다른 글
PIG 기본명령어 - 4 (0) | 2023.05.16 |
---|---|
PIG 기본 명령어 - 3 (0) | 2023.05.15 |
PIG 기본 명령어 - 1 (0) | 2023.05.15 |
FLUME - Tomcat 연결해보기 (0) | 2023.05.11 |
하둡 기본 명령어 - 1 (0) | 2023.05.09 |