Złączenia w BigQuery

Wprowadzenie do BigQuery

Matthew Forrest

Field CTO

Łączenie danych w BigQuery

  • INNER JOIN: Wartości istnieją w obu tabelach.

  • LEFT JOIN: Wszystkie wiersze z lewej tabeli, dopasowanie do prawej.

  • RIGHT JOIN: Wszystkie wiersze z prawej tabeli, dopasowanie do lewej.

  • FULL JOIN: Wszystkie wiersze z obu tabel, dopasowane i niedopasowane.

  • CROSS JOIN: Każdy wiersz dopasowany do każdego z obu tabel.

Obraz przedstawiający złączenia SQL wizualnie

Wprowadzenie do BigQuery

Praktyczne przykłady złączeń

Customers: tabela lewa

Orders: tabela prawa

  • INNER JOIN: Dopasowani klienci i ich zamówienia

  • LEFT JOIN: Wszyscy klienci, nawet bez złożonych zamówień

  • RIGHT JOIN: Wszystkie zamówienia, nawet bez powiązanego ID klienta

  • FULL JOIN: Wszyscy klienci i wszystkie zamówienia, nawet bez powiązania

  • CROSS JOIN: Każde zamówienie dopasowane do każdego klienta bez warunków

Wprowadzenie do BigQuery

INNER JOIN

  • Zwraca tylko pasujące wyniki z obu zbiorów danych
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        |
Wprowadzenie do BigQuery

LEFT JOIN

  • Zwraca wszystkie wiersze z lewego zbioru danych
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                 |
Wprowadzenie do BigQuery

RIGHT JOIN

  • Zwraca wszystkie wiersze z prawego zbioru danych
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  |
Wprowadzenie do BigQuery

OUTER JOIN

  • Złączenie „prawo-lewe": wszystkie wiersze z obu zbiorów danych
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  |
Wprowadzenie do BigQuery

SELF lub CROSS JOIN

  • Złączenie kartezjańskie – każdy wiersz z każdym wierszem
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 |
Wprowadzenie do BigQuery

Złączenia i UNNEST

  • Używane również do złączania danych po rozwinięciu
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         |
Wprowadzenie do BigQuery

Czas na ćwiczenia!

Wprowadzenie do BigQuery

Preparing Video For Download...