Joiny v BigQuery

Introduction to BigQuery

Matthew Forrest

Field CTO

Spojování dat v BigQuery

  • INNER JOIN: Hodnoty existují v obou tabulkách.

  • LEFT JOIN: Všechny řádky levé tabulky, shody z pravé.

  • RIGHT JOIN: Všechny řádky pravé tabulky, shody z levé.

  • FULL JOIN: Všechny řádky obou tabulek, shody i neshody.

  • CROSS JOIN: Každý řádek s každým řádkem z obou tabulek.

Obrázek vizuálně znázorňující SQL joiny

Introduction to BigQuery

Příklady joinů z praxe

Zákazníci: levá tabulka

Objednávky: pravá tabulka

  • INNER JOIN: Odpovídající zákazníci a jejich objednávky

  • LEFT JOIN: Všichni zákazníci, i ti bez objednávek

  • RIGHT JOIN: Všechny objednávky, i ty bez záznamu zákazníka

  • FULL JOIN: Všichni zákazníci a všechny objednávky, i bez vzájemné interakce

  • CROSS JOIN: Každá objednávka spojena s každým zákazníkem bez podmínek

Introduction to BigQuery

INNER JOIN

  • Vrátí pouze shodné záznamy z obou tabulek
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        |
Introduction to BigQuery

LEFT JOIN

  • Vrátí všechny řádky z LEVÉ tabulky
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                 |
Introduction to BigQuery

RIGHT JOIN

  • Vrátí všechny řádky z PRAVÉ tabulky
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  |
Introduction to BigQuery

OUTER JOIN

  • Kombinace RIGHT a LEFT joinu: všechny řádky z obou tabulek
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  |
Introduction to BigQuery

SELF nebo CROSS JOIN

  • Kartézský součin – každý řádek s každým řádkem
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 |
Introduction to BigQuery

Joiny a UNNEST

  • Používá se také pro spojení rozbalených dat
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         |
Introduction to BigQuery

Pojďme procvičovat!

Introduction to BigQuery

Preparing Video For Download...