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_id | car_type |
---|---|
1 | van |
2 | sedan |
3 | truck |
Таблица B car_color
user_id | car_color |
---|---|
1 | red |
3 | green |
4 | yellow |
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_id | type | color |
---|---|---|
1 | van | red |
2 | sedan | null |
3 | truck | green |
Поскольку в Таблице B нет user_id
= 2, цвет недоступен, поэтому в результате в столбце color
для user_id
2 будет null.
Примеры использования левого соединения в SQL
Левые соединения являются основой в моделировании данных и работе аналитических инженеров — они позволяют легко соединять объекты базы данных друг с другом, сохраняя количество строк исходной таблицы (в операторе from). В отличие от правых соединений, которые возвращают все строки в объекте базы данных для правого соединения (а не в операторе from), левые соединения кажутся более интуитивно понятными для понимания и построения.
Обратите внимание, если вы используете левые соединения: если в объекте базы данных для левого соединения есть несколько записей для одного ключа, в конечном результате запроса могут появиться дубликаты. Здесь dbt-тесты, такие как тестирование на уникальность и равное количество строк между исходными таблицами и дочерними моделями, могут помочь вам выявить ошибки в логике моделирования данных и улучшить качество данных.
Где вы не увидите (и не должны видеть) левые соединения, так это в стейджинговых моделях, которые используются для очистки и подготовки сырых исходных данных для аналитических целей. Любые соединения в ваших проектах dbt должны происходить дальше по потоку в промежуточных и март-моделях, чтобы улучшить модульность и чистоту .