Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
dbt (средство построения данных) — это среда разработки, позволяющая аналитикам и специалистам по анализу данных преобразовывать данные с помощью простых инструкций выборки (SELECT). dbt преобразует эти операторы SELECT в таблицы и представления. 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 во втором раскрывающемся меню, если он не отображается.
Совет
Чтобы просмотреть параметры проекта, щелкните меню "Три полосы" или "Гамбургер", выберите пункт " Параметры > учетной записи" и щелкните имя проекта. Чтобы просмотреть параметры подключения, щелкните ссылку рядом с подключением. Чтобы изменить все параметры, нажмите кнопку "Изменить".
Чтобы просмотреть информацию о токене личного доступа Azure Databricks для этого проекта, щелкните на иконку профиля на панели меню, выберите «Профиль > учетные > данные Databricks Partner Connect Пробная версия», и затем щелкните на имя проекта. Чтобы внести изменения, нажмите кнопку "Изменить".
Действия, которые необходимо выполнить для предоставления dbt Cloud доступа на чтение к данным
Partner Connect предоставляет разрешение только на создание субъекта-службы DBT_CLOUD_USER только в каталоге по умолчанию. Выполните следующие действия в рабочей области Azure Databricks, чтобы предоставить субъекту-службе DBT_CLOUD_USER доступ на чтение к выбранным данным.
Предупреждение
Эти шаги можно изменить соответствующим образом, чтобы предоставить dbt Cloud дополнительный доступ к каталогам, базам данных и таблицам в рабочей области. Однако, в целях обеспечения безопасности, Databricks настоятельно рекомендует предоставлять доступ только к тем отдельным таблицам, с которыми требуется работать сервисному принципалу DBT_CLOUD_USER, и предоставлять только права на чтение для этих таблиц.
Щелкните
Каталог на боковой панели.
Выберите хранилище SQL (DBT_CLOUD_ENDPOINT) в раскрывающемся списке в правом верхнем углу.
- В обозревателе каталогов выберите каталог, содержащий базу данных для таблицы.
- Выберите базу данных, содержащую таблицу.
- Выберите таблицу.
Совет
Если вы не видите список каталога, базы данных или таблицы, введите любую часть имени в полях "Выбор каталога", "Выбор базы данных" или " Фильтрация таблиц " соответственно, чтобы сузить список.
Щелкните "Разрешения".
Нажмите "Предоставить".
Чтобы добавить несколько пользователей или групп, выберите DBT_CLOUD_USER. Это субъект-служба Azure Databricks, который Partner Connect создал для вас в предыдущем разделе.
Совет
Если вы не видите DBT_CLOUD_USER, начните вводить
DBT_CLOUD_USERв поле "Тип", чтобы добавить нескольких пользователей или групп , пока не появится в списке, а затем выберите его.Предоставьте доступ только для чтения, выбрав
SELECTиREAD METADATA.Нажмите кнопку "ОК".
Повторите шаги 4–9 для каждой дополнительной таблицы, к которой вы хотите предоставить доступ на чтение для dbt Cloud.
Устранение неполадок подключения dbt Cloud
Если кто-то удаляет проект в dbt Cloud для этой учетной записи, и вы щелкаете плитку dbt , появится сообщение об ошибке, указывающее, что проект не найден. Чтобы устранить эту проблему, нажмите кнопку "Удалить подключение", а затем начните с начала этой процедуры, чтобы снова создать подключение.
Подключение к dbt Cloud вручную
В этом разделе описано, как подключить кластер Azure Databricks или хранилище Databricks SQL в рабочей области Azure Databricks к dbt Cloud.
Внимание
Databricks рекомендует подключаться к хранилищу SQL. Если у вас нет права доступа к Databricks SQL или если вы хотите запустить модели Python, вы можете подключиться к кластеру.
Требования
Кластер или хранилище SQL в вашей рабочей области Azure Databricks.
Сведения о подключении для кластера или хранилища SQL, в частности имя узла сервера, порт и путь HTTP .
Токен личного доступа Azure Databricks или токен Microsoft Entra ID (ранее Azure Active Directory). Чтобы создать личный маркер доступа, выполните действия, описанные в разделе "Создание личных маркеров доступа для пользователей рабочей области".
Примечание.
В качестве рекомендации по обеспечению безопасности при аутентификации с использованием автоматизированных инструментов, систем, скриптов и приложений Databricks рекомендует использовать токены личного доступа, принадлежащие служебным принципалам, а не пользователям рабочей области. Сведения о создании маркеров для субъектов-служб см. в разделе "Управление маркерами" для субъекта-службы.
Чтобы подключить dbt Cloud к данным, управляемым Unity Catalog, требуется версия dbt 1.1 или выше.
Действия, описанные в этой статье, создают новую среду, которая использует последнюю версию dbt. Сведения об обновлении версии dbt для существующей среды см. в разделе "Обновление до последней версии dbt в Облаке" в документации по dbt.
Шаг 1. Регистрация в dbt Cloud
Перейдите в dbt Cloud — зарегистрируйтесь и введите электронную почту, имя и сведения о компании. Создайте пароль и нажмите кнопку "Создать учетную запись".
Шаг 2. Создание проекта dbt
На этом шаге вы создадите проект dbt, содержащий подключение к кластеру Azure Databricks или хранилищу SQL, репозиторию, содержащему исходный код, и одной или нескольким средам (таким как тестирование и рабочие среды).
Щелкните значок параметров и нажмите кнопку "Параметры учетной записи".
Нажмите кнопку "Создать проект".
В поле "Имя" введите уникальное имя проекта и нажмите кнопку "Продолжить".
Выберите вычислительное подключение Azure Databricks в раскрывающемся меню "Выбор подключения " или создайте новое подключение:
Нажмите кнопку "Добавить новое подключение".
Мастер добавления нового подключения
откроется на новой вкладке. Нажмите кнопку Databricks и нажмите кнопку "Далее".
Примечание.
Databricks рекомендует использовать
dbt-databricks, который поддерживает каталог Unity, а неdbt-spark. По умолчанию в новых проектах используетсяdbt-databricks. Чтобы перенести существующий проект наdbt-databricks, смотрите раздел "Миграция из dbt-spark в dbt-databricks" в документации dbt.В разделе "Параметры" для имени узла сервера введите значение имени узла сервера из требований.
В поле "Путь HTTP" введите значение пути HTTP из требований.
Если в рабочей области включена функция каталога Unity, в разделе "Необязательные параметры" введите имя каталога для использования dbt.
Нажмите кнопку "Сохранить".
Вернитесь в мастер создания проекта и выберите только что созданное соединение в раскрывающемся меню "Подключение ".
В разделе «Учетные данные разработки» для токена введите личный токен доступа или токен Microsoft Entra ID из требований.
Для схемы введите имя схемы, в которой вы хотите, чтобы dbt создал таблицы и представления.
Нажмите кнопку "Проверить подключение".
Если тест выполнен успешно, нажмите кнопку "Сохранить".
Дополнительные сведения см. в разделе "Подключение к ODBC Databricks " на веб-сайте dbt.
Совет
Чтобы просмотреть или изменить параметры этого проекта, или удалить проект полностью, щелкните значок параметров, щелкните " Параметры > учетной записи" и щелкните имя проекта. Чтобы изменить параметры, нажмите кнопку "Изменить". Чтобы удалить проект, нажмите Редактировать > Удалить проект.
Чтобы просмотреть или изменить значение маркера личного доступа Azure Databricks для этого проекта, щелкните значок "Person", щелкните "Учетные данные профиля>" и щелкните имя проекта. Чтобы внести изменения, нажмите кнопку "Изменить".
После подключения к кластеру Azure Databricks или хранилищу SQL Databricks следуйте инструкциям на экране, чтобы настроить репозиторий, а затем нажмите кнопку "Продолжить".
После настройки репозитория следуйте инструкциям на экране, чтобы пригласить пользователей, а затем нажмите кнопку "Завершить". Или нажмите кнопку "Пропустить" и "Завершить".
Учебник
В этом разделе вы будете использовать свой проект dbt Cloud для работы с примерами данных. Предполагается, что вы уже создали проект и открыли интегрированную среду разработки dbt Cloud для этого проекта.
Шаг 1. Создание и запуск моделей
На этом шаге вы используете dbt Cloud IDE для создания и запуска моделей, которые представляют собой select инструкции, создающие новое представление (по умолчанию) или новую таблицу в базе данных на основе существующих данных в той же базе данных. Эта процедура создает модель на основе таблицы diamonds из примеров наборов данных .
Чтобы создать эту таблицу, используйте следующий код.
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параметрах, таких какmergeинкрементальная стратегия, см. в разделе Конфигурации Databricks документации dbt.Нажмите кнопку "Сохранить как".
Введите
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команду с путями к трем предыдущим файлам. В базе данныхdefaultdbt создает одну таблицу с именем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.