예제가 포함된 Hive 조인 및 하위 쿼리 튜토리얼

쿼리 결합

조인 쿼리는 Hive에 있는 두 테이블에 대해 수행할 수 있습니다. 이해를 위해 회원가입 Concepts 여기 분명히 우리는 여기에 두 개의 테이블을 만들고 있습니다.

  • Sample_joins(고객 세부 정보와 관련됨)
  • Sample_joins1(직원이 수행한 주문 세부 정보와 관련됨)

단계 1) 직원의 ID, 이름, 나이, 주소 및 급여 열 이름이 포함된 "sample_joins" 테이블 생성

쿼리 조인

단계 2) 데이터 로드 및 표시

쿼리 조인

위 스크린샷에서

  1. Customers.txt에서 Sample_joins로 데이터 로드
  2. Sample_joins 테이블 내용 표시

단계 3) Sample_joins1 테이블 생성 및 데이터 로딩, 표시

쿼리 조인

위의 스크린샷에서 우리는 다음을 관찰할 수 있습니다.

  1. Orderid, Date1, Id, Amount 열이 포함된 Sample_joins1 테이블 생성
  2. Orders.txt에서 Sample_joins1로 데이터 로드
  3. Sample_joins1에 있는 레코드 표시

앞으로 우리가 만든 테이블에서 수행할 수 있는 다양한 유형의 조인을 살펴보겠지만 그 전에 조인에 대한 다음 사항을 고려해야 합니다.

조인에서 관찰해야 할 몇 가지 사항은 다음과 같습니다.

  • 조인에서는 동등 조인만 허용됩니다.
  • 동일한 쿼리에서 두 개 이상의 테이블을 조인할 수 있습니다.
  • 일치하지 않는 ON 절에 대한 더 많은 제어를 제공하기 위해 LEFT, RIGHT, FULL OUTER 조인이 존재합니다.
  • 조인은 교환 가능하지 않습니다.
  • 조인은 LEFT 조인인지 RIGHT 조인인지에 관계없이 왼쪽 결합입니다.

다양한 유형의 조인

조인에는 4가지 유형이 있습니다.

  • 내부 조인
  • 왼쪽 외부 조인
  • 오른쪽 외부 결합
  • 전체 외부 결합

내부 조인 :

두 테이블에 공통된 레코드는 이 내부 조인에 의해 검색됩니다.

내부 조인

위의 스크린샷에서 우리는 다음을 관찰할 수 있습니다.

  1. 여기서는 (c.Id= o.Id)와 같은 조건이 일치하는 Sample_joins 테이블과 Sample_joins1 테이블 사이에 JOIN 키워드를 사용하여 조인 쿼리를 수행합니다.
  2. 쿼리에 언급된 조건을 확인하여 두 테이블에 모두 존재하는 공통 레코드를 표시하는 출력

검색어 :

SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);

왼쪽 외부 조인:

  • Hive 쿼리 언어 LEFT OUTER JOIN은 오른쪽 테이블에 일치하는 항목이 없더라도 왼쪽 테이블의 모든 행을 반환합니다.
  • ON 절이 오른쪽 테이블의 XNUMX개 레코드와 일치하는 경우 조인은 여전히 ​​오른쪽 테이블의 각 열에 NULL이 있는 결과 레코드를 반환합니다.

왼쪽 외부 결합

위의 스크린샷에서 우리는 다음을 관찰할 수 있습니다.

  1. 여기서는 (c.Id= o.Id)와 같은 조건이 일치하는 Sample_joins 테이블과 Sample_joins1 테이블 사이에 "LEFT OUTER JOIN" 키워드를 사용하여 조인 쿼리를 수행합니다.예를 들어 여기서는 직원 ID를 참조로 사용하고 있으며, ID가 테이블의 오른쪽과 왼쪽에서 공통인지 여부를 확인합니다. 일치하는 조건으로 작용합니다.
  2. 쿼리에 언급된 조건을 확인하여 두 테이블 모두에 존재하는 공통 레코드를 표시하는 출력입니다. 위 출력의 NULL 값은 Right 테이블인 Sample_joins1에 값이 없는 열입니다.

검색어 :

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c LEFT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

오른쪽 외부 조인:

  • Hive 쿼리 언어 RIGHT OUTER JOIN은 왼쪽 테이블에 일치하는 항목이 없더라도 오른쪽 테이블의 모든 행을 반환합니다.
  • ON 절이 왼쪽 테이블의 XNUMX개 레코드와 일치하는 경우 조인은 여전히 ​​왼쪽 테이블의 각 열에 NULL이 있는 결과 레코드를 반환합니다.
  • RIGHT 조인은 항상 오른쪽 테이블의 레코드와 왼쪽 테이블의 일치하는 레코드를 반환합니다. 왼쪽 테이블에 해당 열에 해당하는 값이 없으면 해당 위치에 NULL 값이 반환됩니다.

오른쪽 외부 결합

위의 스크린샷에서 우리는 다음을 관찰할 수 있습니다.

  1. 여기서는 (c.Id= o.Id)와 같은 조건이 일치하는 Sample_joins 테이블과 Sample_joins1 테이블 사이에 "RIGHT OUTER JOIN" 키워드를 사용하여 조인 쿼리를 수행합니다.
  2. 쿼리에 언급된 조건을 확인하여 두 테이블에 모두 존재하는 공통 레코드를 표시하는 출력

질문:

  SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c RIGHT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

완전 외부 조인:

쿼리에 제공된 JOIN 조건을 기반으로 Sample_joins 및 Sample_joins1 테이블의 레코드를 결합합니다.

두 테이블의 모든 레코드를 반환하고 양쪽에서 일치하는 값이 누락된 열에 대해 NULL 값을 채웁니다.

완전 외부 조인

위의 화면 샷에서 다음 사항을 확인할 수 있습니다.

  1. 여기서는 (c.Id= o.Id)와 같은 조건이 일치하는 Sample_joins 테이블과 Sample_joins1 테이블 사이에 "FULL OUTER JOIN" 키워드를 사용하여 조인 쿼리를 수행하고 있습니다.
  2. 쿼리에 언급된 조건을 확인하여 두 테이블에 있는 모든 레코드를 표시하는 출력입니다. 여기서 출력되는 Null 값은 두 테이블의 열에서 누락된 값을 나타냅니다.

질문

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

하위 쿼리

쿼리 내에 존재하는 쿼리를 하위 쿼리라고 합니다. 기본 쿼리는 하위 쿼리에서 반환된 값에 따라 달라집니다.

하위 쿼리는 두 가지 유형으로 분류될 수 있습니다.

  • FROM 절의 하위 쿼리
  • WHERE 절의 하위 쿼리

사용시기 :

  • 서로 다른 테이블의 두 열 값에서 결합된 특정 값을 얻으려면
  • 다른 테이블에 대한 한 테이블 값의 종속성
  • 다른 테이블의 한 열 값 비교 확인

구문 :

Subquery in FROM clause
SELECT <column names 1, 2…n>From (SubQuery) <TableName_Main >
Subquery in WHERE clause
SELECT <column names 1, 2…n> From<TableName_Main>WHERE col1 IN (SubQuery);

예:

SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2

여기서 t1과 t2는 테이블 이름입니다. 색칠된 부분은 테이블 t1에서 수행된 하위 쿼리입니다. 여기서 a와 b는 하위 쿼리에 추가되어 col1에 할당된 열입니다. Col1은 Main 테이블에 있는 열 값입니다. 하위 쿼리에 있는 이 "col1" 열은 col1 열의 기본 테이블 쿼리와 동일합니다.

사용자 정의 스크립트 포함

하이브 클라이언트 요구 사항에 맞게 사용자별 스크립트를 작성할 수 있는 가능성을 제공합니다. 사용자는 요구 사항에 맞게 자신만의 맵과 축소 스크립트를 작성할 수 있습니다. 이를 임베디드 사용자 정의 스크립트라고 합니다. 코딩 논리는 사용자 정의 스크립트에 정의되어 있으며 ETL 시간에 해당 스크립트를 사용할 수 있습니다.

임베디드 스크립트를 선택해야 하는 경우:

  • 클라이언트별 요구 사항에 따라 개발자는 Hive에서 스크립트를 작성하고 배포해야 합니다.
  • Hive 내장 기능이 특정 도메인 요구 사항에 대해 작동하지 않는 경우

이를 위해 Hive에서는 TRANSFORM 절을 사용하여 맵 및 감속기 스크립트를 모두 포함합니다.

이 내장된 사용자 정의 스크립트에서 우리는 다음 사항을 준수해야 합니다.

  • 열은 문자열로 변환되고 사용자 스크립트에 제공되기 전에 TAB으로 구분됩니다.
  • 사용자 스크립트의 표준 출력은 TAB으로 구분된 문자열 열로 처리됩니다.

샘플 임베디드 스크립트,

FROM (
	FROM pv_users
	MAP pv_users.userid, pv_users.date
	USING 'map_script'
	AS dt, uid
	CLUSTER BY dt) map_output

INSERT OVERWRITE TABLE pv_users_reduced
	REDUCE map_output.dt, map_output.uid
	USING 'reduce_script'
	AS date, count;

위 스크립트에서 다음을 관찰할 수 있습니다.

이것은 이해를 위한 샘플 스크립트일 뿐입니다.

  • pv_users는 map_script에 언급된 사용자 ID 및 날짜와 같은 필드가 있는 사용자 테이블입니다.
  • pv_users 테이블의 날짜 및 개수에 정의된 감속기 스크립트