BigQuery의 조인

BigQuery 입문

Matthew Forrest

Field CTO

BigQuery에서 데이터 조인

  • INNER JOIN: 두 테이블 모두에 값이 있음.

  • LEFT JOIN: 왼쪽 테이블의 모든 행, 오른쪽과 일치 항목 결합.

  • RIGHT JOIN: 오른쪽 테이블의 모든 행, 왼쪽과 일치 항목 결합.

  • FULL JOIN: 양쪽 테이블의 모든 행, 일치/비일치 모두 포함.

  • CROSS JOIN: 양쪽 테이블의 모든 행을 서로 모두 매칭.

SQL 조인을 시각적으로 보여주는 이미지

BigQuery 입문

조인의 실제 예시

Customers: 왼쪽 테이블

Orders: 오른쪽 테이블

  • INNER JOIN: 고객과 주문 매칭

  • LEFT JOIN: 주문이 없어도 모든 고객 표시

  • RIGHT JOIN: 고객 ID가 없어도 모든 주문 표시

  • FULL JOIN: 상호작용이 없어도 모든 고객과 모든 주문 표시

  • CROSS JOIN: 조건 없이 모든 주문을 모든 고객과 매칭

BigQuery 입문

INNER JOIN

  • 두 데이터셋에서 일치하는 결과만 반환합니다.
SELECT
  c.customer_id, s.product_name
FROM customers c
-- The INNER keyword is optional
JOIN sales_data s
ON c.customer_id = s.customer_id;
| customer_id | product_name         |
|-------------|----------------------|
| 1           | Bluetooth Headphones |
| 2           | Running Shoes        |
BigQuery 입문

LEFT JOIN

  • 왼쪽(LEFT) 데이터셋의 모든 행을 반환합니다.
SELECT
  c.customer_id, s.product_name
FROM customers c
LEFT JOIN sales_data s
ON c.customer_id = s.customer_id;
| customer_id | product_name         |
|-------------|----------------------|
| 1           | Bluetooth Headphones |
| 2           | Running Shoes        |
| 3           | null                 |
BigQuery 입문

RIGHT JOIN

  • 오른쪽(RIGHT) 데이터셋의 모든 행을 반환합니다.
SELECT
  c.customer_id, s.product_name
FROM customers c
RIGHT JOIN sales_data s
ON c.customer_id = s.customer_id;
| customer_id | product_name         |
|-------------|----------------------|
| 1           | Bluetooth Headphones |
| 2           | Running Shoes        |
| null        | External Microphone  |
BigQuery 입문

OUTER JOIN

  • “오른쪽-왼쪽” 조인: 오른쪽과 왼쪽 데이터셋의 모든 행
SELECT
  c.customer_id, s.product_name
FROM customers c
OUTER JOIN sales_data s
ON c.customer_id = s.customer_id;
| customer_id | product_name         |
|-------------|----------------------|
| 1           | Bluetooth Headphones |
| 2           | Running Shoes        |
| 3           | null                 |
| null        | External Microphone  |
BigQuery 입문

SELF 또는 CROSS JOIN

  • 카테시안 조인: 모든 행을 모든 행과 결합
SELECT
  c.customer_id,
  s.product_name,

-- Adding table names separated 
-- by a comma is a CROSS JOIN
-- Order is determined by the
-- left table, here "customers"
FROM customers c, sales_data s;
| customer_id | product_name         |
|-------------|----------------------|
| 1           | Bluetooth Headphones |
| 1           | null                 |
| 2           | Bluetooth Headphones |
| 2           | null                 |
| 3           | null                 |
| 3           | Bluetooth Headphones |
BigQuery 입문

JOIN과 UNNEST

  • unnest된 데이터 조인에도 사용
SELECT
  c.customer_id,
  payments.method
FROM customers c, 
UNNEST(
  customers.payment_methods
) payments;
| customer_id | product_name |
|-------------|--------------|
| 1           | Visa         |
| 1           | Mastercard   |
| 1           | Venmo        |
| 1           | Paypal       |
| 2           | Amex         |
| 2           | Visa         |
BigQuery 입문

Ayo berlatih!

BigQuery 입문

Preparing Video For Download...