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

SQL CROSS JOIN

Действительно редко встречающееся, но важное соединение: перекрестное соединение. Большинство вашей аналитической инженерной работы потребует объединения таблиц для создания надежных, широких таблиц, которые в конечном итоге будут доступны конечным бизнес-пользователям. Эти модели обычно создаются с использованием в основном левых (и некоторых внутренних) соединений.

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

Как создать перекрестное соединение

В отличие от обычных соединений, перекрестные соединения не используют ключи для объединения объектов базы данных:

select
<fields>
from <table_1> as t1
cross join <table_2> as t2

Перекрестные соединения — это одна из тех концепций SQL, которые легче понять на конкретном примере, так что давайте перейдем к нему.

Пример перекрестного соединения SQL

Таблица A date_spine

date
2022-01-01
2022-01-02
2022-01-03

Таблица B users

user_id
1
3
4
select
users.user_id as user_id,
date.date as date
from {{ ref('users') }} as users
cross join {{ ref('date_spine') }} as date
order by 1

Этот простой запрос вернет декартово произведение всех пользователей и дат, фактически создавая уникальную комбинацию пользователя на каждую дату в строке:

user_idtype
12022-01-01
12022-01-02
12022-01-03
22022-01-01
22022-01-02
22022-01-03
32022-01-01
32022-01-02
32022-01-03
Генерация суррогатных ключей из перекрестных соединений

В сгенерированной таблице выше уникальный ключ — это комбинация user_id и date для каждой строки. Чтобы добавить в эту таблицу, вы можете сгенерировать с использованием MD5-хэша макроса generate_surrogate_key в dbt-utils (например, {{ dbt_utils.generate_surrogate_key(user_id, type) }}), который в конечном итоге может быть присоединен к другим таблицам.

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

Когда сгенерированная таблица выше может быть полезной? Перекрестное соединение уникальных дат и пользователей может быть эффективным способом создания базовой таблицы для присоединения различных счетчиков событий, таких как ключевые события на веб-сайте, в электронной почте или продукте. Эти таблицы отчетного типа полезны для предоставления конечным бизнес-пользователям в BI-инструментах для просмотра агрегированных счетчиков на день на пользователя и других полезных метрик.

0