Hadoop 차원 마스터 가이드

HadoopBeginner
지금 연습하기

소개

차원 간의 경계가 흐릿해지는 영역에서 현실의 구조에 균열이 생겨, 다른 세상의 존재가 빠져나올 수 있게 되었습니다. 이 존재는 수정의 전령 (Crystalline Harbinger) 으로 알려져 있으며, 순수한 에너지로 구성된 지각 있는 존재로, 빛의 만화경처럼 형태가 변하고 반짝입니다.

수정의 전령의 목표는 데이터의 힘을 활용하여 존재 자체의 구조를 재구성하는 것입니다. 이를 위해, 강력한 빅 데이터 처리 프레임워크인 Hadoop 의 복잡성을 마스터하려고 합니다. 그러나 전령의 Hadoop 에 대한 이해는 불완전하며, Hadoop 의 데이터 웨어하우징 구성 요소인 Hive 에서 "having" 절의 모든 잠재력을 발휘하기 위해서는 지침이 필요합니다.

귀하가 임무를 수락하기로 결정했다면, 수정의 전령을 일련의 단계를 통해 안내하여 "having" 절의 비밀을 밝히고, 전에 상상할 수 없었던 방식으로 데이터의 힘을 휘두를 수 있도록 하는 것입니다.

'having' 절의 목적 이해

이 단계에서는 Hive 에서 "having" 절의 기본적인 목적과 데이터 필터링 및 집계와 어떻게 관련되는지 살펴보겠습니다.

Hive 의 "having" 절은 지정된 조건을 기반으로 데이터 그룹을 필터링하기 위해 "group by" 절과 함께 사용됩니다. 데이터를 그룹화하고 집계한 후 필터를 적용하여 지정된 기준을 충족하지 않는 전체 그룹을 필터링할 수 있습니다.

다음은 "having" 절의 사용법을 보여주는 예시입니다.

먼저, 터미널에서 다음 명령을 실행하여 hadoop 사용자로 로그인했는지 확인합니다.

su - hadoop

그런 다음, 다음 명령을 실행하여 Hive 셸을 시작합니다.

hive

이제 샘플 테이블을 생성합니다.

CREATE TABLE sales (
  product STRING,
  category STRING,
  sales_amount FLOAT
);

샘플 데이터를 삽입합니다.

INSERT INTO sales VALUES
  ('Product A', 'Electronics', 1000.0),
  ('Product B', 'Electronics', 2000.0),
  ('Product C', 'Clothing', 500.0),
  ('Product D', 'Clothing', 1500.0),
  ('Product E', 'Electronics', 3000.0);

마지막으로, 카테고리별 총 판매액을 계산하고 총 판매액이 3000 보다 큰 카테고리를 필터링합니다.

CREATE TABLE result_1
AS
SELECT category, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY category
HAVING SUM(sales_amount) > 3000;

SELECT * FROM result_1;

이 예제에서는 먼저 product, category, sales_amount 열이 있는 sales라는 테이블을 생성합니다. 그런 다음 테이블에 샘플 데이터를 삽입합니다.

다음으로, "group by" 절을 사용하여 데이터를 category별로 그룹화하고, SUM 함수를 사용하여 각 카테고리의 총 판매액을 계산합니다. 그런 다음 "having" 절을 사용하여 total_sales가 3000 이하인 카테고리를 필터링합니다.

이 쿼리의 출력은 총 판매액 (2000.0 + 1000.0 + 3000.0 = 6000.0) 이 3000 을 초과하므로 "Electronics" 카테고리만 포함하고, "Clothing" 카테고리는 총 판매액 (500.0 + 1500.0 = 2000.0) 이 "having" 절에 지정된 조건을 충족하지 않으므로 제외됩니다.

여러 조건 기반 그룹 필터링

이전 단계에서는 "having" 절의 기본적인 사용법을 보여주었지만, Hive 는 ANDOR과 같은 논리 연산자를 사용하여 여러 조건을 기반으로 그룹을 필터링하는 것도 허용합니다.

다음은 "having" 절에서 여러 조건을 사용하는 방법을 보여주는 예시입니다.

제품 및 카테고리별 총 판매액을 계산하고, 총 판매액이 2000 보다 크고 'Electronics' 카테고리에 속하는 제품을 필터링합니다.

CREATE TABLE result_2
AS
SELECT product, category, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY product, category
HAVING SUM(sales_amount) > 2000 AND category = 'Electronics';

SELECT * FROM result_2;

이 예제에서는 데이터를 productcategory 모두로 그룹화하고, 각 productcategory 조합의 총 판매액을 계산합니다. 그런 다음 "having" 절을 사용하여 total_sales가 2000 이하이거나 category가 "Electronics"가 아닌 그룹을 필터링합니다.

이 쿼리의 출력은 "Product B" 및 "Product E"와 같이 총 판매액이 2000 보다 크고 "Electronics" 카테고리에 속하는 제품만 포함합니다.

OR 연산자를 사용하여 "having" 절에서 여러 조건을 결합할 수도 있습니다.

제품 및 카테고리별 총 판매액을 계산하고, 총 판매액이 2000 보다 크거나 'Clothing' 카테고리에 속하는 제품을 필터링합니다.

SELECT product, category, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY product, category
HAVING SUM(sales_amount) > 2000 OR category = 'Clothing';

이 쿼리는 카테고리에 관계없이 총 판매액이 2000 보다 큰 모든 제품과 총 판매액에 관계없이 "Clothing" 카테고리에 속하는 모든 제품을 포함합니다.

'having' 절에서 집계 함수 사용

"having" 절은 COUNT, MAX, MIN, AVG와 같은 집계 함수와 함께 사용할 수도 있습니다. 이를 통해 이러한 집계 함수와 관련된 조건을 기반으로 그룹을 필터링할 수 있습니다.

다음은 "having" 절에서 COUNT 함수를 사용하는 방법을 보여주는 예시입니다.

각 카테고리의 제품 수를 계산하고, 2 개 이상의 제품이 있는 카테고리를 필터링합니다.

CREATE TABLE result_3
AS
SELECT category, COUNT(product) AS product_count
FROM sales
GROUP BY category
HAVING COUNT(product) > 2;

SELECT * FROM result_3;

이 예제에서는 COUNT 함수를 사용하여 각 category의 제품 수를 계산합니다. 그런 다음 "having" 절을 사용하여 product_count가 2 이하인 카테고리를 필터링합니다.

이 쿼리의 출력은 2 개 이상의 제품이 관련된 카테고리만 포함합니다.

"having" 절에서 집계 함수를 다른 조건과 결합할 수도 있습니다.

각 카테고리의 최대 판매액을 계산하고, 최대 판매액이 2000 보다 크고 2 개 이상의 제품이 있는 카테고리를 필터링합니다.

SELECT category, MAX(sales_amount) AS max_sales, COUNT(product) AS product_count
FROM sales
GROUP BY category
HAVING MAX(sales_amount) > 2000 AND COUNT(product) > 2;

이 쿼리는 각 카테고리의 최대 판매액 (max_sales) 과 제품 수 (product_count) 를 계산합니다. "having" 절은 max_sales가 2000 이하이거나 product_count가 2 이하인 카테고리를 필터링합니다.

'where' 절과 'having' 절 결합

"where" 절과 "having" 절은 Hive 쿼리에서 서로 다른 목적을 수행합니다. "where" 절은 데이터를 그룹화하고 집계하기 전에 개별 행을 필터링하는 데 사용되는 반면, "having" 절은 데이터를 그룹화하고 집계한 후에 데이터 그룹을 필터링하는 데 사용됩니다.

경우에 따라 원하는 필터링 동작을 달성하기 위해 두 절을 단일 쿼리에 결합해야 할 수 있습니다. 다음은 "where" 절과 "having" 절을 결합하는 방법을 보여주는 예시입니다.

카테고리별 총 판매액을 계산하고, 판매액이 1000 보다 큰 제품을 필터링하고, 총 판매액이 3000 보다 큰 카테고리를 필터링합니다.

CREATE TABLE result_4
AS
SELECT category, SUM(sales_amount) AS total_sales
FROM sales
WHERE sales_amount > 1000
GROUP BY category
HAVING SUM(sales_amount) > 3000;

SELECT * FROM result_4;

이 예제에서는 먼저 "where" 절을 사용하여 sales_amount가 1000 이하인 개별 행을 필터링합니다. 즉, 판매액이 1000 보다 큰 제품만 후속 그룹화 및 집계에 고려됩니다.

다음으로, 필터링된 데이터를 category별로 그룹화하고 SUM 함수를 사용하여 각 카테고리의 총 판매액을 계산합니다. 마지막으로, "having" 절을 사용하여 total_sales가 3000 이하인 카테고리를 필터링합니다.

이 쿼리의 출력은 판매액이 1000 보다 큰 제품에서 계산된 총 판매액이 3000 보다 큰 카테고리만 포함합니다.

요약

이 랩에서는 Hive 의 "having" 절의 복잡성을 통해 Crystalline Harbinger 를 안내하는 여정을 시작했습니다. 이 강력한 기능을 마스터함으로써 Harbinger 는 이제 전례 없는 정밀도로 데이터를 필터링하고 분석하여 다중 우주의 광대한 데이터 저장소의 비밀을 풀 수 있습니다.

일련의 단계를 통해 "having" 절의 기본적인 목적을 탐구하고, 지정된 조건을 기반으로 데이터 그룹을 필터링하는 기능을 시연했습니다. 그런 다음 논리 연산자를 사용하여 여러 조건을 적용하고, "having" 절 내에서 집계 함수를 활용하며, 복잡한 데이터 필터링 시나리오를 위해 "where" 절과 "having" 절을 결합하는 방법을 배웠습니다.

이 랩을 통해 Crystalline Harbinger 는 귀중한 지식과 기술을 습득하여 Hadoop 의 진정한 잠재력을 활용하고 데이터 분석의 힘을 통해 존재의 구조를 재구성할 수 있게 되었습니다. 각 단계마다 새로운 가능성을 열어 Harbinger 가 전례 없는 정밀도와 제어력으로 광대한 데이터 영역을 탐색할 수 있도록 했습니다.