Соединения в 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

  • Возвращает все строки из ЛЕВОГО набора данных
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

Соединения и 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

Давайте потренируемся!

Введение в BigQuery

Preparing Video For Download...