Explode (익스플로드) 함수 마스터하기
이 단계에서는 배열 및 맵과 같은 복잡한 데이터 유형을 여러 행으로 변환할 수 있게 해주는 Explode (익스플로드) 함수에 대해 알아보겠습니다.
새로운 샘플 데이터 세트를 만드는 것으로 시작해 보겠습니다. /home/hadoop 디렉토리로 이동하여 다음과 같은 내용으로 array_data.txt라는 파일을 만듭니다.
## 디렉토리로 이동하여 새 파일 생성
cd /home/hadoop
vim array_data.txt
다음 내용을 입력합니다.
[1,2,3],[4,5],[6,7,8,9]
[10,11],[12,13,14],[15]
다음으로, 이 데이터를 저장할 Hive 테이블을 만듭니다.
CREATE TABLE array_table (arr ARRAY<STRING>);
LOAD DATA LOCAL INPATH '/home/hadoop/array_data.txt' INTO TABLE array_table;
이제 Explode (익스플로드) 함수를 사용하여 배열 데이터를 개별 행으로 평탄화해 보겠습니다.
SELECT explode(arr) AS num FROM array_table;
이 쿼리는 arr 배열의 각 요소를 별도의 행으로 변환하고, 해당 값을 num 열에 표시합니다.
또한 Explode (익스플로드) 함수를 Lateral View (래터럴 뷰) 와 함께 사용하여 맵과 같은 복잡한 데이터 유형을 처리할 수도 있습니다.
CREATE TABLE map_table (key STRING, value MAP<STRING, INT>);
INSERT INTO map_table
SELECT * FROM (
SELECT 'entry1' AS key, map('a', 1, 'b', 2, 'c', 3) AS value
UNION ALL
SELECT 'entry2' AS key, map('d', 4, 'e', 5) AS value
) AS temp_table;
SELECT key, map_keys, map_values
FROM map_table
LATERAL VIEW EXPLODE(value) temp AS map_keys, map_values;
제공된 SQL 문은 Hive 쿼리 언어로 작성된 쿼리입니다. 쿼리에 대한 설명은 다음과 같습니다.
SELECT key, map_keys, map_values: 결과에서 선택할 열을 지정합니다. 결과에는 key, map_keys, map_values의 세 열이 포함됩니다.
FROM map_table: 쿼리가 map_table 테이블에서 수행됨을 나타냅니다.
LATERAL VIEW EXPLODE(value) temp AS map_keys, map_values: map_table의 value 열을 익스플로드하는 lateral view (래터럴 뷰) 입니다. EXPLODE 함수는 MAP 열의 각 키 - 값 쌍을 별도의 행으로 변환하는 데 사용됩니다. 익스플로드된 값은 별칭 map_keys 및 map_values에 할당됩니다.
요약하면, 쿼리는 map_table 테이블에서 데이터를 검색합니다. 그런 다음 LATERAL VIEW EXPLODE 절을 사용하여 value 열을 확장하여 MAP 열의 각 키 - 값 쌍에 대해 별도의 행을 생성합니다. 결과 행에는 map_table의 key 열과 함께, MAP 열의 개별 키와 값을 나타내는 익스플로드된 map_keys 및 map_values 열이 포함됩니다.