Поделиться через


Подключение к 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, сделайте следующее:

  1. Подключитесь к партнерам по подготовке данных с помощью Partner Connect.

  2. После подключения к 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, и ограничить его правами на чтение.

  1. Щелкните Значок каталога каталог на боковой панели.

  2. Выберите хранилище SQL (DBT_CLOUD_ENDPOINT) в раскрывающемся списке вверху справа.

    Выбор хранилища

    1. В обозревателе каталогов выберите каталог, содержащий базу данных для таблицы.
    2. Выберите базу данных, содержащую таблицу.
    3. Выберите таблицу.

    Совет

    Если каталог, база данных или таблица не отображаются, введите часть имени в полях Select Catalog (Выбрать каталог), Select Database (Выбрать базу данных) или Filter tables (Фильтровать таблицы) соответственно, чтобы отфильтровать список.

    Фильтровать таблицы

  3. Щелкните Разрешения.

  4. Нажмите кнопку "Предоставить".

  5. В поле 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 (Введите, чтобы добавить несколько пользователей или групп), пока эта строка не отобразится в списке, и выберите ее.

  6. Предоставьте доступ для чтения только путем SELECT выбора и READ METADATAвыбора.

  7. Щелкните 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, в частности имя узла сервера, порт и путь HTTP.

  • Маркер личного доступа Azure Databricks или токен Microsoft Entra ID (ранее Azure Active Directory). Чтобы создать личный маркер доступа, сделайте следующее:

    1. В рабочей области Azure Databricks щелкните имя пользователя Azure Databricks в верхней строке и выберите "Параметры " в раскрывающемся списке.
    2. Щелкните "Разработчик".
    3. Рядом с маркерами доступа нажмите кнопку "Управление".
    4. Щелкните Generate new token (Создание нового маркера).
    5. (Необязательно) Введите комментарий, который поможет определить этот маркер в будущем и изменить время существования маркера по умолчанию в течение 90 дней. Чтобы создать маркер без времени существования (не рекомендуется), оставьте поле время существования (дни) пустым (пустым).
    6. Щелкните Создать.
    7. Скопируйте отображаемый маркер в безопасное расположение и нажмите кнопку "Готово".

    Примечание.

    Не забудьте сохранить скопированный маркер в безопасном расположении. Не делитесь скопированным маркером с другими пользователями. Если вы потеряете скопированный маркер, вы не сможете повторно создать тот же маркер. Вместо этого необходимо повторить эту процедуру, чтобы создать новый маркер. Если вы потеряете скопированный маркер или считаете, что маркер скомпрометирован, 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, репозиторию, содержащему исходный код, и одной или нескольким средам (таким как тестирование и рабочие среды).

  1. Войдите в dbt Cloud.

  2. Щелкните значок параметров и нажмите кнопку "Параметры учетной записи".

  3. Щелкните Создать проект.

  4. В поле "Имя" введите уникальное имя проекта и нажмите кнопку "Продолжить".

  5. Для выбора подключения нажмите кнопку Databricks и нажмите кнопку "Далее".

  6. В поле Name (Имя) введите уникальное имя для этого соединения.

  7. Для выбора адаптера щелкните Databricks (dbt-databricks).

    Примечание.

    Databricks рекомендует использовать dbt-databricks, который поддерживает каталог Unity, а не dbt-spark. По умолчанию используются dbt-databricksновые проекты. Сведения о переносе существующего проекта dbt-databricksв раздел "Миграция из dbt-spark в dbt-databricks " в документации dbt.

  8. В разделе "Параметры" для имени узла сервера введите значение имени узла сервера из требований.

  9. В поле "Путь HTTP" введите значение пути HTTP из требований.

  10. Если рабочая область включена в каталоге Unity, в разделе "Необязательные параметры" введите имя каталога для использования dbt Cloud.

  11. В разделе "Учетные данные разработки" для маркера введите личный маркер доступа или маркер идентификатора Microsoft Entra из требований.

  12. Для схемы введите имя схемы, в которой требуется dbt Cloud создать таблицы и представления (например, default).

  13. Нажмите кнопку Проверить подключение.

  14. Если тест выполнен успешно, нажмите кнопку "Далее".

Дополнительные сведения см. в статье Подключение к 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 вашей рабочей области.

  1. Открыв проект, нажмите кнопку "Разработка " в верхней части пользовательского интерфейса.

  2. Щелкните инициализировать проект dbt.

  3. Нажмите кнопку "Фиксация" и "Синхронизировать", введите сообщение фиксации и нажмите кнопку "Зафиксировать".

  4. Нажмите кнопку "Создать ветвь", введите имя ветви и нажмите кнопку "Отправить".

  5. Создайте первую модель: нажмите кнопку "Создать файл".

  6. В текстовом редакторе введите следующую инструкцию SQL. Эта инструкция выбирает только сведения о весе, огранке, цвете и прозрачности для каждого бриллианта из таблицы diamonds. Блок config указывает dbt создать таблицу в базе данных на основе этой инструкции.

    {{ config(
      materialized='table',
      file_format='delta'
    ) }}
    
    select carat, cut, color, clarity
    from diamonds
    

    Совет

    Дополнительные параметры, такие как добавочная config стратегия, см. в разделе "Конфигурации Databricks" в документации по dbt.merge

  7. Нажмите кнопку Сохранить как.

  8. Введите models/diamonds_four_cs.sql имя файла и нажмите кнопку "Создать".

  9. Создайте вторую модель: щелкните Значок создания файла (создать файл) в правом верхнем углу.

  10. В текстовом редакторе введите следующую инструкцию SQL. Эта инструкция выбирает уникальные значения из столбца colors в таблице diamonds_four_cs, упорядочивая результаты по алфавиту от первого к последнему. Поскольку блок config отсутствует, эта модель указывает dbt создать представление в базе данных на основе этой инструкции.

    select distinct color
    from diamonds_four_cs
    sort by color asc
    
  11. Нажмите кнопку Сохранить как.

  12. Введите models/diamonds_list_colors.sqlимя файла и нажмите кнопку "Создать".

  13. Создайте третью модель: щелкните Значок создания файла (создать файл) в правом верхнем углу.

  14. В текстовом редакторе введите следующую инструкцию SQL. Эта инструкция усредняет цену бриллиантов по цвету и сортирует результаты по среднему значению цены от большего к меньшему. Эта модель указывает dbt создать представление в базе данных на основе этой инструкции.

    select color, avg(price) as price
    from diamonds
    group by color
    order by price desc
    
  15. Нажмите кнопку Сохранить как.

  16. Для имени файла введите models/diamonds_prices.sql и нажмите кнопку "Создать".

  17. Запустите модели: в командной строке выполните 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
    
  18. Выполните следующий код 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. Создание и запуск более сложных моделей

На этом шаге вы создадите более сложные модели для набора связанных таблиц данных. Эти таблицы данных содержат сведения о вымышленной спортивной лиге из трех команд, проводящих сезон из шести матчей. Эта процедура создает таблицы данных, создает модели и запускает их.

  1. Выполните приведенный ниже код 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     |
    -- +---------+---------------+
    
  2. Создайте первую модель: щелкните Значок создания файла (создать файл) в правом верхнем углу.

  3. В текстовом редакторе введите следующую инструкцию 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
    
  4. Нажмите кнопку Сохранить как.

  5. Введите models/zzz_game_details.sql имя файла и нажмите кнопку "Создать".

  6. Создайте вторую модель: щелкните Значок создания файла (создать файл) в правом верхнем углу.

  7. В текстовом редакторе введите следующую инструкцию 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
    
  8. Нажмите кнопку Сохранить как.

  9. Введите models/zzz_win_loss_records.sql имя файла и нажмите кнопку "Создать".

  10. Запустите модели: в командной строке выполните 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
    
  11. Выполните приведенный ниже код 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, возвращают количество записей, которые не прошли утверждение. Если это число равно нулю, это означает, что все записи успешно утверждены, поэтому тесты считаются пройденными. Тесты данных — это конкретные запросы, которые должны возвращать нулевое количество записей (в этом случае считается, что тест пройден).

  1. Создайте тесты схемы: щелкните Значок создания файла (создать файл) в правом верхнем углу.

  2. В текстовом редакторе введите следующее содержимое. Этот файл содержит тесты схемы, которые проверяют выполнение следующих условий: указанные столбцы содержат уникальные значения, не содержат значений 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
    
  3. Нажмите кнопку Сохранить как.

  4. Введите models/schema.ymlимя файла и нажмите кнопку "Создать".

  5. Создайте первый тест данных: щелкните Значок создания файла (создать файл) в правом верхнем углу.

  6. В текстовом редакторе введите следующую инструкцию 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'
    
  7. Нажмите кнопку Сохранить как.

  8. Введите tests/zzz_game_details_check_dates.sqlимя файла и нажмите кнопку "Создать".

  9. Создайте второй тест данных: щелкните Значок создания файла (создать файл) в правом верхнем углу.

  10. В текстовом редакторе введите следующую инструкцию 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
    
  11. Нажмите кнопку Сохранить как.

  12. Введите tests/zzz_game_details_check_scores.sqlимя файла и нажмите кнопку "Создать".

  13. Создайте третий тест данных: щелкните Значок создания файла (создать файл) в правом верхнем углу.

  14. В текстовом редакторе введите следующую инструкцию 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
    
  15. Нажмите кнопку Сохранить как.

  16. Введите tests/zzz_win_loss_records_check_records.sqlимя файла и нажмите кнопку "Создать".

  17. Запустите тесты: в командной строке 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;

Следующие шаги

Дополнительные ресурсы