Перейти к основному содержимому

SQL LEFT JOIN

Любимое соединение аналитического инженера: левое соединение. Без сомнения, это, вероятно, самое часто используемое соединение в любом проекте dbt (и не без причины).

Левое соединение возвращает все строки в операторе FROM, независимо от совпадения в объекте базы данных для левого соединения. Сравните это с внутренним соединением, где возвращаются только те строки, для которых есть успешные совпадения ключей между объектом базы данных в операторе FROM и в операторе внутреннего соединения.

Как создать левое соединение

Как и для всех соединений, вам нужны некоторые объекты базы данных (например, таблицы/представления), ключи для соединения и оператор select, чтобы выполнить левое соединение:

select
<fields>
from <table_1> as t1
left join <table_2> as t2
on t1.id = t2.id

В приведенном выше примере используется только одно поле из каждой таблицы для их соединения; если вы соединяете два объекта базы данных, которые требуют нескольких полей, вы можете использовать операторы AND/OR, а еще лучше, суррогатные ключи. Вы также можете добавить WHERE, GROUP BY, ORDER BY, HAVING и другие операторы после ваших соединений для создания фильтрации, упорядочивания и выполнения агрегаций. Вы можете также использовать левое (или любое другое) соединение столько раз, сколько вам нужно, в одном запросе или .

Пример левого соединения в SQL

Таблица A car_type

user_idcar_type
1van
2sedan
3truck

Таблица B car_color

user_idcar_color
1red
3green
4yellow
select
car_type.user_id as user_id,
car_type.car_type as type,
car_color.car_color as color
from {{ ref('car_type') }} as car_type
left join {{ ref('car_color') }} as car_color
on car_type.user_id = car_color.user_id

Этот простой запрос вернет все строки из Таблицы A и добавит столбец color к строкам, где есть успешное совпадение с Таблицей B:

user_idtypecolor
1vanred
2sedannull
3truckgreen

Поскольку в Таблице B нет user_id = 2, цвет недоступен, поэтому в результате в столбце color для user_id 2 будет null.

Примеры использования левого соединения в SQL

Левые соединения являются основой в моделировании данных и работе аналитических инженеров — они позволяют легко соединять объекты базы данных друг с другом, сохраняя количество строк исходной таблицы (в операторе from). В отличие от правых соединений, которые возвращают все строки в объекте базы данных для правого соединения (а не в операторе from), левые соединения кажутся более интуитивно понятными для понимания и построения.

Убедитесь, что ваши соединения правильные, а не левые правые

Обратите внимание, если вы используете левые соединения: если в объекте базы данных для левого соединения есть несколько записей для одного ключа, в конечном результате запроса могут появиться дубликаты. Здесь dbt-тесты, такие как тестирование на уникальность и равное количество строк между исходными таблицами и дочерними моделями, могут помочь вам выявить ошибки в логике моделирования данных и улучшить качество данных.

Где вы не увидите (и не должны видеть) левые соединения, так это в стейджинговых моделях, которые используются для очистки и подготовки сырых исходных данных для аналитических целей. Любые соединения в ваших проектах dbt должны происходить дальше по потоку в промежуточных и март-моделях, чтобы улучшить модульность и чистоту .

0