수도승의 데이터 퀘스트

HadoopBeginner
지금 연습하기

소개

동쪽 신비로운 땅에, 고대 지혜의 안개에 싸인 우뚝 솟은 산 정상에 존경받는 수도원이 서 있었습니다. 그 성스러운 벽 안에는 데이터 조작의 신성한 예술의 달인인 히로라는 존경받는 전사 수도승이 살고 있었습니다. 데이터의 비밀을 풀기 위한 그의 변함없는 헌신은 학자들과 수도승 모두에게 존경을 받게 했습니다.

어느 날, 수도원의 주지 스님은 걱정스러운 표정으로 히로를 자신의 방으로 불렀습니다. "히로, 심각한 상황이 발생했네," 주지 스님이 말했습니다. "우리 조상들의 고대 지식을 담고 있는 성스러운 두루마리가 온 세상에 흩어졌네. 이 귀중한 정보가 영원히 사라지기 전에 회수하고 정리해야 하네."

히로는 깊이 고개를 숙이며 결의에 찬 눈빛을 빛냈습니다. "존경하는 스승님, 실망시켜 드리지 않겠습니다," 그는 맹세했습니다. "Hadoop 과 Table Generating Functions (테이블 생성 함수) 의 힘으로, 저는 온 세상을 샅샅이 뒤져 우리 조상들의 지혜에 질서를 되찾겠습니다."

주지 스님은 엄숙하게 고개를 끄덕이며 히로의 변함없는 결의에 신뢰를 보냈습니다. 이렇게 히로의 Hive 의 Table Generating Functions (테이블 생성 함수) 를 마스터하기 위한 여정이 시작되었고, 이는 그의 기술과 결의를 최대한 시험하는 여정이 될 것입니다.

Lateral View (래터럴 뷰) 함수 탐구

이 단계에서는 복잡한 데이터 구조를 더 관리하기 쉬운 형태로 분해할 수 있게 해주는 강력한 Lateral View (래터럴 뷰) 함수에 대해 자세히 알아보겠습니다.

먼저, 작업할 샘플 데이터 세트를 만들어 보겠습니다. /home/hadoop 디렉토리로 이동하여 다음과 같은 내용으로 sample.txt라는 새 파일을 만듭니다.

다음 명령어를 사용하여 터미널에서 hadoop 사용자로 전환합니다.

su - hadoop
## 디렉토리로 이동하여 새 파일 생성
cd /home/hadoop
vim sample.txt

다음 내용을 입력합니다.

1,2,3|4,5|6,7,8
9,10|11,12,13|14,15

파일이 저장되고 접근 가능한지 확인합니다.

다음으로, 이 데이터를 저장할 Hive 테이블을 만들 것입니다. 터미널에서 다음 명령을 실행하여 Hive CLI 를 엽니다.

hive

Hive CLI 내에서 다음 명령을 실행합니다.

CREATE TABLE sample_table (line STRING);
LOAD DATA LOCAL INPATH '/home/hadoop/sample.txt' INTO TABLE sample_table;

이제 Lateral View (래터럴 뷰) 함수를 사용하여 line 열의 복잡한 문자열 데이터를 분해해 보겠습니다.

SELECT line, x, y
FROM sample_table
LATERAL VIEW OUTER EXPLODE(SPLIT(line, '\\|')) temp AS x
LATERAL VIEW OUTER EXPLODE(SPLIT(x, ',')) temp2 AS y;

제공된 SQL 문은 Hive 쿼리 언어를 사용하여 sample_table이라는 테이블에서 데이터를 검색합니다. 쿼리에 대한 간략한 설명은 다음과 같습니다.

  1. 테이블에서 line, x, y의 세 열을 선택하려고 합니다.

  2. 데이터는 sample_table 테이블에서 검색됩니다.

  3. 쿼리는 LATERAL VIEW OUTER EXPLODE 절을 두 번 사용하여 두 개의 별도 작업을 수행합니다.

    • 첫 번째 LATERAL VIEW OUTER EXPLODE(SPLIT(line, '\\|')) temp AS x는 구분자 |를 사용하여 line 열의 값을 분할합니다. 그런 다음 EXPLODE 함수는 결과 배열을 여러 행으로 변환합니다. 이러한 exploded (익스플로드) 된 값은 별칭 x에 할당됩니다.
    • 두 번째 LATERAL VIEW OUTER EXPLODE(SPLIT(x, ',')) temp AS y는 구분자 ,를 사용하여 x 열 (이전 단계에서 생성됨) 의 값을 분할합니다. 다시, EXPLODE 함수는 결과 배열을 여러 행으로 변환합니다. 이러한 exploded (익스플로드) 된 값은 별칭 y에 할당됩니다.

요약하면, 쿼리는 sample_table에서 각 행을 가져와 두 번의 분할을 수행합니다. 먼저 |line 열을 분할하여 x 열에 다른 값을 가진 여러 행을 생성합니다. 그런 다음 ,x 열을 분할하여 y 열에 다른 값을 가진 더 많은 행을 생성합니다. 결과는 line, x, y 값의 모든 가능한 조합을 가진 행 집합입니다.

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 쿼리 언어로 작성된 쿼리입니다. 쿼리에 대한 설명은 다음과 같습니다.

  1. SELECT key, map_keys, map_values: 결과에서 선택할 열을 지정합니다. 결과에는 key, map_keys, map_values의 세 열이 포함됩니다.
  2. FROM map_table: 쿼리가 map_table 테이블에서 수행됨을 나타냅니다.
  3. LATERAL VIEW EXPLODE(value) temp AS map_keys, map_values: map_tablevalue 열을 익스플로드하는 lateral view (래터럴 뷰) 입니다. EXPLODE 함수는 MAP 열의 각 키 - 값 쌍을 별도의 행으로 변환하는 데 사용됩니다. 익스플로드된 값은 별칭 map_keysmap_values에 할당됩니다.

요약하면, 쿼리는 map_table 테이블에서 데이터를 검색합니다. 그런 다음 LATERAL VIEW EXPLODE 절을 사용하여 value 열을 확장하여 MAP 열의 각 키 - 값 쌍에 대해 별도의 행을 생성합니다. 결과 행에는 map_tablekey 열과 함께, MAP 열의 개별 키와 값을 나타내는 익스플로드된 map_keysmap_values 열이 포함됩니다.

요약

이 랩에서는 전사 수도승 히로의 변함없는 결의에 이끌려 Hive Table Generating Functions (Hive 테이블 생성 함수) 의 신비로운 영역을 탐험하는 여정을 시작했습니다. 직접적인 탐구를 통해 Lateral View (래터럴 뷰) 및 Explode (익스플로드) 함수의 힘을 풀고, 복잡한 데이터 구조를 더 관리하기 쉬운 형태로 변환하는 기술을 마스터했습니다.

복잡한 데이터를 개별 요소로 분해함으로써, 우리는 그 안에 숨겨진 비밀을 풀고 귀중한 통찰력을 드러내며 더 깊은 이해를 위한 길을 열었습니다. 히로의 탐구가 흩어진 고대 지혜의 두루마리를 다시 모은 것처럼, 이러한 강력한 함수에 대한 우리의 숙달은 한때 불가능하다고 여겨졌던 방식으로 데이터를 구성하고 분석할 수 있도록 우리에게 힘을 실어주었습니다.

이 랩은 우리의 기술적 능력을 강화했을 뿐만 아니라 데이터 조작의 지속적인 유산에 대한 깊은 감사를 심어주었습니다. 우리가 여정을 계속함에 따라, 여기서 배운 교훈이 우리의 길을 비추는 빛이 되어 데이터 예술에 대한 더욱 위대한 숙달을 향한 우리의 길을 밝혀주기를 바랍니다.