JOIN в 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: Показує всі замовлення, навіть без ідентифікатора клієнта

  • 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

  • Повертає всі рядки з ЛІВОГО набору даних
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

  • Повертає всі рядки з ПРАВОГО набору даних
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

  • Також використовують для обʼєднання розгорнутих (unnested) даних
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

Давайте потренуємось!

Вступ до BigQuery

Preparing Video For Download...