Подключение к dbt Cloud
dbt (средство построения данных) — это среда разработки, позволяющая аналитикам и специалистам по анализу данных преобразовывать данные с помощью простых инструкций выборки (SELECT). dbt преобразует такие инструкции выборки в таблицы и представления. dbt компилирует код в необработанные инструкции SQL, а затем выполняет его в указанной базе данных в Azure Databricks. dbt поддерживает шаблоны и лучшие методики программирования для совместной работы, такие как управление версиями, документация и модульная архитектура.
dbt не извлекает и не загружает данные. dbt работает только с этапом преобразования, используя архитектуру "преобразование после загрузки". В dbt предполагается, что у вас уже есть копия данных в базе.
В этой статье описано средство dbt Cloud. dbt Cloud изначально предоставляется с поддержкой таких функций, как планирование заданий, CI/CD, предоставление документации, мониторинг и оповещения, а также интегрированная среда разработки (IDE).
Также доступна локальная версия dbt под названием dbt Core. dbt Core позволяет писать код dbt в текстовом редакторе или в интегрированной среде разработки на локальном компьютере разработки, а затем запускать dbt из командной строки. В dbt Core предусмотрен интерфейс командной строки (CLI) dbt. Интерфейс dbt CLI является бесплатным и имеет открытый код. Дополнительные сведения см. в разделе Подключение к dbt Core.
Так как dbt Cloud и dbt Core могут использовать размещенные репозитории git (например, на GitHub, GitLab или BitBucket), с помощью dbt Cloud можно создать проект dbt и опубликовать его для пользователей d Cloud и dbt Core. Дополнительные сведения см. в статьях Создание проекта dbt и Использование существующего проекта на веб-сайте dbt.
Общие сведения о dbt см. в приведенном ниже видео на YouTube (26 минут).
Подключение к dbt Cloud с помощью Partner Connect
В этом разделе описывается, как подключить хранилище SQL Databricks к dbt Cloud с помощью Partner Connect, а затем предоставить dbt Cloud доступ на чтение к данным.
Различия между стандартными подключениями и dbt Cloud
Чтобы подключиться к dbt Cloud с помощью Partner Connect, выполните действия, описанные в разделе "Подключение к партнерам по подготовке данных" с помощью Partner Connect. Подключение dbt Cloud отличается от стандартных подключений для подготовки и преобразования данных в следующем:
- Помимо субъекта-службы и личного маркера доступа Partner Connect создает хранилище SQL (прежнее название — конечная точка SQL) с именем DBT_CLOUD_ENDPOINT по умолчанию.
Действия по подключению
Чтобы подключиться к dbt Cloud с помощью Partner Connect, сделайте следующее:
Подключитесь к партнерам по подготовке данных с помощью Partner Connect.
После подключения к dbt Cloud появится панель мониторинга dbt Cloud. Чтобы изучить проект dbt Cloud, в строке меню рядом с логотипом dbt выберите имя учетной записи dbt в первом раскрывающемся списке, если она не отображается, а затем выберите проект Databricks Partner Connect Trial во втором раскрывающемся меню, если он не отображается.
Совет
Чтобы просмотреть параметры проекта, щелкните меню в виде трех полосок ("гамбургер"), выберите Account Settings > Projects (Параметры учетной записи > Проекты) и щелкните имя проекта. Чтобы просмотреть параметры проекта, щелкните ссылку рядом с Connection (Подключение). Чтобы изменить нужные параметры, щелкните Edit.
Чтобы просмотреть сведения о личном маркере доступа Azure Databricks для этого проекта, щелкните значок "человечек" в строке меню, выберите Profile > Credentials > Databricks Partner Connect Trial (Профиль > Учетные данные > Пробная версия Databricks Partner Connect) и щелкните имя проекта. Чтобы внести изменения, нажмите кнопку Edit (Правка).
Действия, которые необходимо выполнить для предоставления dbt Cloud доступа на чтение к данным
Partner Connect предоставляет разрешение только на создание для субъекта-службы DBT_CLOUD_USER только для каталога по умолчанию. Выполните следующие действия в рабочей области Azure Databricks, чтобы предоставить субъекту-службе DBT_CLOUD_USER доступ на чтение к выбранным данным.
Предупреждение
Эти шаги можно изменить соответствующим образом, чтобы предоставить dbt Cloud дополнительный доступ к каталогам, базам данных и таблицам в рабочей области. Но для обеспечения безопасности в Databricks настоятельно рекомендуется предоставлять доступ только к отдельным таблицам, с которыми будет работать субъект-служба DBT_CLOUD_USER, и ограничить его правами на чтение.
Щелкните каталог на боковой панели.
Выберите хранилище SQL (DBT_CLOUD_ENDPOINT) в раскрывающемся списке вверху справа.
- В обозревателе каталогов выберите каталог, содержащий базу данных для таблицы.
- Выберите базу данных, содержащую таблицу.
- Выберите таблицу.
Совет
Если каталог, база данных или таблица не отображаются, введите часть имени в полях Select Catalog (Выбрать каталог), Select Database (Выбрать базу данных) или Filter tables (Фильтровать таблицы) соответственно, чтобы отфильтровать список.
Щелкните Разрешения.
Нажмите кнопку "Предоставить".
В поле Type to add multiple users or groups (Введите, чтобы добавить несколько пользователей или групп) выберите DBT_CLOUD_USER. Это субъект-служба Azure Databricks, созданная для вас Partner Connect в предыдущем разделе.
Совет
Если вы не видите DBT_CLOUD_USER, начните вводить
DBT_CLOUD_USER
в поле Type to add multiple users or groups (Введите, чтобы добавить несколько пользователей или групп), пока эта строка не отобразится в списке, и выберите ее.Предоставьте доступ для чтения только путем
SELECT
выбора иREAD METADATA
выбора.Щелкните OK.
Повторите шаги 4–9 для каждой дополнительной таблицы, к которой вы хотите предоставить доступ на чтение для dbt Cloud.
Устранение неполадок подключения dbt Cloud
Если проект в dbt Cloud для этой учетной записи будет удален и вы щелкнете плитку dbt, отобразится сообщение об ошибке с уведомлением о том, что проект не найден. Чтобы устранить эту проблему, щелкните Delete connection (Удалить подключение) и выполните эту процедуру сначала для создания подключения.
Подключение к dbt Cloud вручную
В этом разделе описано, как подключить кластер Azure Databricks или хранилище Databricks SQL в рабочей области Azure Databricks к dbt Cloud.
Внимание
Databricks рекомендует подключаться к хранилищу SQL. Если у вас нет права доступа к Databricks SQL или если вы хотите запустить модели Python, вы можете подключиться к кластеру.
Требования
Кластер хранилища SQL в рабочей области Azure Databricks.
- Справочник по конфигурации вычислений.
- Создание хранилища SQL.
Сведения о подключении для кластера или хранилища SQL, в частности имя узла сервера, порт и путь HTTP.
- Получение сведений о подключении для вычислительного ресурса Azure Databricks.
Маркер личного доступа Azure Databricks или токен Microsoft Entra ID (ранее Azure Active Directory). Чтобы создать личный маркер доступа, выполните действия, описанные в разделе "Личные маркеры доступа Azure Databricks" для пользователей рабочей области.
Примечание.
В качестве рекомендации по обеспечению безопасности при проверке подлинности с помощью автоматизированных средств, систем, сценариев и приложений Databricks рекомендуется использовать личные маркеры доступа, принадлежащие субъектам-службам, а не пользователям рабочей области. Сведения о создании маркеров для субъектов-служб см. в разделе "Управление маркерами" для субъекта-службы.
Чтобы подключить dbt Cloud к данным, управляемым каталогом Unity, dbt версии 1.1 или более поздней.
Действия, описанные в этой статье, создают новую среду, которая использует последнюю версию dbt. Сведения об обновлении версии dbt для существующей среды см. в разделе "Обновление до последней версии dbt в Облаке " в документации по dbt.
Шаг 1. Регистрация в dbt Cloud
Перейдите в раздел dbt Cloud - Signup (dbt Cloud — регистрация) и введите адрес электронной почты, имя и сведения о компании. Создайте пароль и щелкните Create my account (Создать мою учетную запись).
Шаг 2. Создание проекта dbt
На этом шаге вы создадите проект dbt, содержащий подключение к кластеру Azure Databricks или хранилищу SQL, репозиторию, содержащему исходный код, и одной или нескольким средам (таким как тестирование и рабочие среды).
Щелкните значок параметров и нажмите кнопку "Параметры учетной записи".
Щелкните Создать проект.
В поле "Имя" введите уникальное имя проекта и нажмите кнопку "Продолжить".
Для выбора подключения нажмите кнопку Databricks и нажмите кнопку "Далее".
В поле Name (Имя) введите уникальное имя для этого соединения.
Для выбора адаптера щелкните Databricks (dbt-databricks).
Примечание.
Databricks рекомендует использовать
dbt-databricks
, который поддерживает каталог Unity, а неdbt-spark
. По умолчанию используютсяdbt-databricks
новые проекты. Сведения о переносе существующего проектаdbt-databricks
в раздел "Миграция из dbt-spark в dbt-databricks " в документации dbt.В разделе "Параметры" для имени узла сервера введите значение имени узла сервера из требований.
В поле "Путь HTTP" введите значение пути HTTP из требований.
Если рабочая область включена в каталоге Unity, в разделе "Необязательные параметры" введите имя каталога для использования dbt Cloud.
В разделе "Учетные данные разработки" для маркера введите личный маркер доступа или маркер идентификатора Microsoft Entra из требований.
Для схемы введите имя схемы, в которой требуется dbt Cloud создать таблицы и представления (например,
default
).Нажмите кнопку Проверить подключение.
Если тест выполнен успешно, нажмите кнопку "Далее".
Дополнительные сведения см. в статье Подключение к ODBC Databricks на веб-сайте dbt.
Совет
Чтобы просмотреть или изменить параметры этого проекта, или удалить проект полностью, щелкните значок параметров, щелкните "Параметры > учетной записи" и щелкните имя проекта. Чтобы изменить параметры, выберите Edit (Правка). Чтобы удалить проект, выберите Edit (Правка) > Delete Project (Удалить проект).
Чтобы просмотреть или изменить значение личного маркера доступа Azure Databricks для этого проекта, щелкните значок человека, выберите Profile (Профиль) > Credentials (Учетные данные) и щелкните имя проекта. Чтобы внести изменения, нажмите кнопку Edit (Правка).
После подключения к кластеру Azure Databricks или хранилищу SQL Databricks следуйте инструкциям на экране, чтобы настроить репозиторий, а затем нажмите кнопку "Продолжить".
После настройки репозитория с помощью инструкций на экране пригласите пользователей и нажмите кнопку Complete (Завершить). Или нажмите кнопку "Пропустить" и "Завершить".
Учебник
В этом разделе показано, как обработать некоторые данные с помощью проекта dbt Cloud. Предполагается, что вы уже создали проект и открыли интегрированную среду разработки dbt Cloud для этого проекта.
Шаг 1. Создание и запуск моделей
На этом шаге вы с помощью dbt Cloud IDE будете создавать и запускать модели, которые представляют собой инструкции select
, создающие новое представление (по умолчанию) или новую таблицу в базе данных на основе уже существующей в этой базе информации. Эта процедура создает модель на основе образца diamonds
таблицы из наборов данных Sample.
Чтобы создать эту таблицу, используйте следующий код.
DROP TABLE IF EXISTS diamonds;
CREATE TABLE diamonds USING CSV OPTIONS (path "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header "true")
В этой процедуре предполагается, что эта таблица уже создана в базе данных default
вашей рабочей области.
Открыв проект, нажмите кнопку "Разработка " в верхней части пользовательского интерфейса.
Щелкните инициализировать проект dbt.
Нажмите кнопку "Фиксация" и "Синхронизировать", введите сообщение фиксации и нажмите кнопку "Зафиксировать".
Нажмите кнопку "Создать ветвь", введите имя ветви и нажмите кнопку "Отправить".
Создайте первую модель: нажмите кнопку "Создать файл".
В текстовом редакторе введите следующую инструкцию SQL. Эта инструкция выбирает только сведения о весе, огранке, цвете и прозрачности для каждого бриллианта из таблицы
diamonds
. Блокconfig
указывает dbt создать таблицу в базе данных на основе этой инструкции.{{ config( materialized='table', file_format='delta' ) }}
select carat, cut, color, clarity from diamonds
Совет
Дополнительные параметры, такие как добавочная
config
стратегия, см. в разделе "Конфигурации Databricks" в документации по dbt.merge
Нажмите кнопку Сохранить как.
Введите
models/diamonds_four_cs.sql
имя файла и нажмите кнопку "Создать".Создайте вторую модель: щелкните (создать файл) в правом верхнем углу.
В текстовом редакторе введите следующую инструкцию SQL. Эта инструкция выбирает уникальные значения из столбца
colors
в таблицеdiamonds_four_cs
, упорядочивая результаты по алфавиту от первого к последнему. Поскольку блокconfig
отсутствует, эта модель указывает dbt создать представление в базе данных на основе этой инструкции.select distinct color from diamonds_four_cs sort by color asc
Нажмите кнопку Сохранить как.
Введите
models/diamonds_list_colors.sql
имя файла и нажмите кнопку "Создать".Создайте третью модель: щелкните (создать файл) в правом верхнем углу.
В текстовом редакторе введите следующую инструкцию SQL. Эта инструкция усредняет цену бриллиантов по цвету и сортирует результаты по среднему значению цены от большего к меньшему. Эта модель указывает dbt создать представление в базе данных на основе этой инструкции.
select color, avg(price) as price from diamonds group by color order by price desc
Нажмите кнопку Сохранить как.
Для имени файла введите
models/diamonds_prices.sql
и нажмите кнопку "Создать".Запустите модели: в командной строке выполните
dbt run
команду с путями к трем предыдущим файлам. В базе данныхdefault
dbt создает одну таблицу с именемdiamonds_four_cs
и два представления с именамиdiamonds_list_colors
иdiamonds_prices
. dbt получает имена этих представлений и таблиц из связанных с ними имен файлов.sql
.dbt run --model models/diamonds_four_cs.sql models/diamonds_list_colors.sql models/diamonds_prices.sql
... ... | 1 of 3 START table model default.diamonds_four_cs.................... [RUN] ... | 1 of 3 OK created table model default.diamonds_four_cs............... [OK ...] ... | 2 of 3 START view model default.diamonds_list_colors................. [RUN] ... | 2 of 3 OK created view model default.diamonds_list_colors............ [OK ...] ... | 3 of 3 START view model default.diamonds_prices...................... [RUN] ... | 3 of 3 OK created view model default.diamonds_prices................. [OK ...] ... | ... | Finished running 1 table model, 2 view models ... Completed successfully Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3
Выполните следующий код SQL, чтобы вывести сведения о новых представлениях и выбрать все строки из таблицы и представлений.
При подключении к кластеру этот код SQL можно запустить из подключенной к кластеру записной книжки, указав для записной книжки SQL в качестве языка по умолчанию. При подключении к хранилищу SQL этот код SQL можно запустить из запроса.
SHOW views IN default
+-----------+----------------------+-------------+ | namespace | viewName | isTemporary | +===========+======================+=============+ | default | diamonds_list_colors | false | +-----------+----------------------+-------------+ | default | diamonds_prices | false | +-----------+----------------------+-------------+
SELECT * FROM diamonds_four_cs
+-------+---------+-------+---------+ | carat | cut | color | clarity | +=======+=========+=======+=========+ | 0.23 | Ideal | E | SI2 | +-------+---------+-------+---------+ | 0.21 | Premium | E | SI1 | +-------+---------+-------+---------+ ...
SELECT * FROM diamonds_list_colors
+-------+ | color | +=======+ | D | +-------+ | E | +-------+ ...
SELECT * FROM diamonds_prices
+-------+---------+ | color | price | +=======+=========+ | J | 5323.82 | +-------+---------+ | I | 5091.87 | +-------+---------+ ...
Шаг 2. Создание и запуск более сложных моделей
На этом шаге вы создадите более сложные модели для набора связанных таблиц данных. Эти таблицы данных содержат сведения о вымышленной спортивной лиге из трех команд, проводящих сезон из шести матчей. Эта процедура создает таблицы данных, создает модели и запускает их.
Выполните приведенный ниже код SQL, чтобы создать необходимые таблицы данных.
При подключении к кластеру этот код SQL можно запустить из подключенной к кластеру записной книжки, указав для записной книжки SQL в качестве языка по умолчанию. При подключении к хранилищу SQL этот код SQL можно запустить из запроса.
Названия таблиц и представлений на этом шаге начинаются с символов
zzz_
, которые помогают идентифицировать их как часть этого примера. Использовать этот шаблон в собственных таблицах и представлениях нет необходимости.DROP TABLE IF EXISTS zzz_game_opponents; DROP TABLE IF EXISTS zzz_game_scores; DROP TABLE IF EXISTS zzz_games; DROP TABLE IF EXISTS zzz_teams; CREATE TABLE zzz_game_opponents ( game_id INT, home_team_id INT, visitor_team_id INT ) USING DELTA; INSERT INTO zzz_game_opponents VALUES (1, 1, 2); INSERT INTO zzz_game_opponents VALUES (2, 1, 3); INSERT INTO zzz_game_opponents VALUES (3, 2, 1); INSERT INTO zzz_game_opponents VALUES (4, 2, 3); INSERT INTO zzz_game_opponents VALUES (5, 3, 1); INSERT INTO zzz_game_opponents VALUES (6, 3, 2); -- Result: -- +---------+--------------+-----------------+ -- | game_id | home_team_id | visitor_team_id | -- +=========+==============+=================+ -- | 1 | 1 | 2 | -- +---------+--------------+-----------------+ -- | 2 | 1 | 3 | -- +---------+--------------+-----------------+ -- | 3 | 2 | 1 | -- +---------+--------------+-----------------+ -- | 4 | 2 | 3 | -- +---------+--------------+-----------------+ -- | 5 | 3 | 1 | -- +---------+--------------+-----------------+ -- | 6 | 3 | 2 | -- +---------+--------------+-----------------+ CREATE TABLE zzz_game_scores ( game_id INT, home_team_score INT, visitor_team_score INT ) USING DELTA; INSERT INTO zzz_game_scores VALUES (1, 4, 2); INSERT INTO zzz_game_scores VALUES (2, 0, 1); INSERT INTO zzz_game_scores VALUES (3, 1, 2); INSERT INTO zzz_game_scores VALUES (4, 3, 2); INSERT INTO zzz_game_scores VALUES (5, 3, 0); INSERT INTO zzz_game_scores VALUES (6, 3, 1); -- Result: -- +---------+-----------------+--------------------+ -- | game_id | home_team_score | visitor_team_score | -- +=========+=================+====================+ -- | 1 | 4 | 2 | -- +---------+-----------------+--------------------+ -- | 2 | 0 | 1 | -- +---------+-----------------+--------------------+ -- | 3 | 1 | 2 | -- +---------+-----------------+--------------------+ -- | 4 | 3 | 2 | -- +---------+-----------------+--------------------+ -- | 5 | 3 | 0 | -- +---------+-----------------+--------------------+ -- | 6 | 3 | 1 | -- +---------+-----------------+--------------------+ CREATE TABLE zzz_games ( game_id INT, game_date DATE ) USING DELTA; INSERT INTO zzz_games VALUES (1, '2020-12-12'); INSERT INTO zzz_games VALUES (2, '2021-01-09'); INSERT INTO zzz_games VALUES (3, '2020-12-19'); INSERT INTO zzz_games VALUES (4, '2021-01-16'); INSERT INTO zzz_games VALUES (5, '2021-01-23'); INSERT INTO zzz_games VALUES (6, '2021-02-06'); -- Result: -- +---------+------------+ -- | game_id | game_date | -- +=========+============+ -- | 1 | 2020-12-12 | -- +---------+------------+ -- | 2 | 2021-01-09 | -- +---------+------------+ -- | 3 | 2020-12-19 | -- +---------+------------+ -- | 4 | 2021-01-16 | -- +---------+------------+ -- | 5 | 2021-01-23 | -- +---------+------------+ -- | 6 | 2021-02-06 | -- +---------+------------+ CREATE TABLE zzz_teams ( team_id INT, team_city VARCHAR(15) ) USING DELTA; INSERT INTO zzz_teams VALUES (1, "San Francisco"); INSERT INTO zzz_teams VALUES (2, "Seattle"); INSERT INTO zzz_teams VALUES (3, "Amsterdam"); -- Result: -- +---------+---------------+ -- | team_id | team_city | -- +=========+===============+ -- | 1 | San Francisco | -- +---------+---------------+ -- | 2 | Seattle | -- +---------+---------------+ -- | 3 | Amsterdam | -- +---------+---------------+
Создайте первую модель: щелкните (создать файл) в правом верхнем углу.
В текстовом редакторе введите следующую инструкцию SQL. Эта инструкция создает таблицу, которая содержит подробные сведения о каждом матче, например названия команд и итоговый счет. Блок
config
указывает dbt создать таблицу в базе данных на основе этой инструкции.-- Create a table that provides full details for each game, including -- the game ID, the home and visiting teams' city names and scores, -- the game winner's city name, and the game date.
{{ config( materialized='table', file_format='delta' ) }}
-- Step 4 of 4: Replace the visitor team IDs with their city names. select game_id, home, t.team_city as visitor, home_score, visitor_score, -- Step 3 of 4: Display the city name for each game's winner. case when home_score > visitor_score then home when visitor_score > home_score then t.team_city end as winner, game_date as date from ( -- Step 2 of 4: Replace the home team IDs with their actual city names. select game_id, t.team_city as home, home_score, visitor_team_id, visitor_score, game_date from ( -- Step 1 of 4: Combine data from various tables (for example, game and team IDs, scores, dates). select g.game_id, go.home_team_id, gs.home_team_score as home_score, go.visitor_team_id, gs.visitor_team_score as visitor_score, g.game_date from zzz_games as g, zzz_game_opponents as go, zzz_game_scores as gs where g.game_id = go.game_id and g.game_id = gs.game_id ) as all_ids, zzz_teams as t where all_ids.home_team_id = t.team_id ) as visitor_ids, zzz_teams as t where visitor_ids.visitor_team_id = t.team_id order by game_date desc
Нажмите кнопку Сохранить как.
Введите
models/zzz_game_details.sql
имя файла и нажмите кнопку "Создать".Создайте вторую модель: щелкните (создать файл) в правом верхнем углу.
В текстовом редакторе введите следующую инструкцию SQL. Эта инструкция создает представление со списком побед и поражений команд в течение сезона.
-- Create a view that summarizes the season's win and loss records by team. -- Step 2 of 2: Calculate the number of wins and losses for each team. select winner as team, count(winner) as wins, -- Each team played in 4 games. (4 - count(winner)) as losses from ( -- Step 1 of 2: Determine the winner and loser for each game. select game_id, winner, case when home = winner then visitor else home end as loser from zzz_game_details ) group by winner order by wins desc
Нажмите кнопку Сохранить как.
Введите
models/zzz_win_loss_records.sql
имя файла и нажмите кнопку "Создать".Запустите модели: в командной строке выполните
dbt run
команду с путями к двум предыдущим файлам. В базе данныхdefault
(как указано в параметрах проекта) dbt создает одну таблицу с именемzzz_game_details
и одно представление с именемzzz_win_loss_records
. dbt получает имена этих представлений и таблиц из связанных с ними имен файлов.sql
.dbt run --model models/zzz_game_details.sql models/zzz_win_loss_records.sql
... ... | 1 of 2 START table model default.zzz_game_details.................... [RUN] ... | 1 of 2 OK created table model default.zzz_game_details............... [OK ...] ... | 2 of 2 START view model default.zzz_win_loss_records................. [RUN] ... | 2 of 2 OK created view model default.zzz_win_loss_records............ [OK ...] ... | ... | Finished running 1 table model, 1 view model ... Completed successfully Done. PASS=2 WARN=0 ERROR=0 SKIP=0 TOTAL=2
Выполните приведенный ниже код SQL, чтобы вывести сведения о новом представлении и выбрать все строки из таблицы и представления.
При подключении к кластеру этот код SQL можно запустить из подключенной к кластеру записной книжки, указав для записной книжки SQL в качестве языка по умолчанию. При подключении к хранилищу SQL этот код SQL можно запустить из запроса.
SHOW VIEWS FROM default LIKE 'zzz_win_loss_records';
+-----------+----------------------+-------------+ | namespace | viewName | isTemporary | +===========+======================+=============+ | default | zzz_win_loss_records | false | +-----------+----------------------+-------------+
SELECT * FROM zzz_game_details;
+---------+---------------+---------------+------------+---------------+---------------+------------+ | game_id | home | visitor | home_score | visitor_score | winner | date | +=========+===============+===============+============+===============+===============+============+ | 1 | San Francisco | Seattle | 4 | 2 | San Francisco | 2020-12-12 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 2 | San Francisco | Amsterdam | 0 | 1 | Amsterdam | 2021-01-09 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 3 | Seattle | San Francisco | 1 | 2 | San Francisco | 2020-12-19 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 4 | Seattle | Amsterdam | 3 | 2 | Seattle | 2021-01-16 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 5 | Amsterdam | San Francisco | 3 | 0 | Amsterdam | 2021-01-23 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 6 | Amsterdam | Seattle | 3 | 1 | Amsterdam | 2021-02-06 | +---------+---------------+---------------+------------+---------------+---------------+------------+
SELECT * FROM zzz_win_loss_records;
+---------------+------+--------+ | team | wins | losses | +===============+======+========+ | Amsterdam | 3 | 1 | +---------------+------+--------+ | San Francisco | 2 | 2 | +---------------+------+--------+ | Seattle | 1 | 3 | +---------------+------+--------+
Шаг 3. Создание и запуск тестов
На этом шаге вы создадите тесты, которые являются утверждениями о моделях. При выполнении этих тестов в проекте dbt будет сообщать об их результатах.
Тесты бывают двух видов. Тесты схемы, написанные на языке YAML, возвращают количество записей, которые не прошли утверждение. Если это число равно нулю, это означает, что все записи успешно утверждены, поэтому тесты считаются пройденными. Тесты данных — это конкретные запросы, которые должны возвращать нулевое количество записей (в этом случае считается, что тест пройден).
Создайте тесты схемы: щелкните (создать файл) в правом верхнем углу.
В текстовом редакторе введите следующее содержимое. Этот файл содержит тесты схемы, которые проверяют выполнение следующих условий: указанные столбцы содержат уникальные значения, не содержат значений null, содержат только указанные значения или выполняется сочетание этих условий.
version: 2 models: - name: zzz_game_details columns: - name: game_id tests: - unique - not_null - name: home tests: - not_null - accepted_values: values: ['Amsterdam', 'San Francisco', 'Seattle'] - name: visitor tests: - not_null - accepted_values: values: ['Amsterdam', 'San Francisco', 'Seattle'] - name: home_score tests: - not_null - name: visitor_score tests: - not_null - name: winner tests: - not_null - accepted_values: values: ['Amsterdam', 'San Francisco', 'Seattle'] - name: date tests: - not_null - name: zzz_win_loss_records columns: - name: team tests: - unique - not_null - relationships: to: ref('zzz_game_details') field: home - name: wins tests: - not_null - name: losses tests: - not_null
Нажмите кнопку Сохранить как.
Введите
models/schema.yml
имя файла и нажмите кнопку "Создать".Создайте первый тест данных: щелкните (создать файл) в правом верхнем углу.
В текстовом редакторе введите следующую инструкцию SQL. Этот файл содержит тест данных, проверяющий наличие матчей вне рамок сезона.
-- This season's games happened between 2020-12-12 and 2021-02-06. -- For this test to pass, this query must return no results. select date from zzz_game_details where date < '2020-12-12' or date > '2021-02-06'
Нажмите кнопку Сохранить как.
Введите
tests/zzz_game_details_check_dates.sql
имя файла и нажмите кнопку "Создать".Создайте второй тест данных: щелкните (создать файл) в правом верхнем углу.
В текстовом редакторе введите следующую инструкцию SQL. Этот файл содержит тест данных, проверяющий наличие отрицательных значений счета или ничьих в матчах.
-- This sport allows no negative scores or tie games. -- For this test to pass, this query must return no results. select home_score, visitor_score from zzz_game_details where home_score < 0 or visitor_score < 0 or home_score = visitor_score
Нажмите кнопку Сохранить как.
Введите
tests/zzz_game_details_check_scores.sql
имя файла и нажмите кнопку "Создать".Создайте третий тест данных: щелкните (создать файл) в правом верхнем углу.
В текстовом редакторе введите следующую инструкцию SQL. Этот файл содержит тест данных, проверяющий, есть ли у команд отрицательные значения числа побед или поражений, не превышает ли число побед и поражений количество сыгранных матчей и не превышает ли число матчей допустимое количество.
-- Each team participated in 4 games this season. -- For this test to pass, this query must return no results. select wins, losses from zzz_win_loss_records where wins < 0 or wins > 4 or losses < 0 or losses > 4 or (wins + losses) > 4
Нажмите кнопку Сохранить как.
Введите
tests/zzz_win_loss_records_check_records.sql
имя файла и нажмите кнопку "Создать".Запустите тесты: в командной строке
dbt test
выполните команду.
Шаг 4. Очистка
Чтобы удалить таблицы и представления, созданные для этого примера, выполните указанный ниже код SQL.
При подключении к кластеру этот код SQL можно запустить из подключенной к кластеру записной книжки, указав для записной книжки SQL в качестве языка по умолчанию. При подключении к хранилищу SQL этот код SQL можно запустить из запроса.
DROP TABLE zzz_game_opponents;
DROP TABLE zzz_game_scores;
DROP TABLE zzz_games;
DROP TABLE zzz_teams;
DROP TABLE zzz_game_details;
DROP VIEW zzz_win_loss_records;
DROP TABLE diamonds;
DROP TABLE diamonds_four_cs;
DROP VIEW diamonds_list_colors;
DROP VIEW diamonds_prices;
Следующие шаги
- Дополнительные сведения о моделях dbt.
- Узнайте, как тестировать проекты dbt.
- Узнайте, как использовать Jinja — язык шаблонов для программирования SQL в проектах dbt.
- Ознакомьтесь с лучшими методиками dbt.