Подключение к dbt Cloud

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, сделайте следующее:

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

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

  1. Щелкните значок данных.Каталог на боковой панели.

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

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

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

    Совет

    Если вы не видите список каталога, базы данных или таблицы, введите любую часть имени в полях "Выбор каталога", "Выбор базы данных" или " Фильтрация таблиц " соответственно, чтобы сузить список.

    Фильтрация таблиц

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

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

  5. Чтобы добавить несколько пользователей или групп, выберите DBT_CLOUD_USER. Это субъект-служба Azure Databricks, который Partner Connect создал для вас в предыдущем разделе.

    Совет

    Если вы не видите DBT_CLOUD_USER, начните вводить DBT_CLOUD_USER в поле "Тип", чтобы добавить нескольких пользователей или групп , пока не появится в списке, а затем выберите его.

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

  7. Нажмите кнопку "ОК".

Повторите шаги 4–9 для каждой дополнительной таблицы, к которой вы хотите предоставить доступ на чтение для dbt Cloud.

Устранение неполадок подключения dbt Cloud

Если кто-то удаляет проект в dbt Cloud для этой учетной записи, и вы щелкаете плитку dbt , появится сообщение об ошибке, указывающее, что проект не найден. Чтобы устранить эту проблему, нажмите кнопку "Удалить подключение", а затем начните с начала этой процедуры, чтобы снова создать подключение.

Подключение к dbt Cloud вручную

В этом разделе описано, как подключить кластер Azure Databricks или хранилище Databricks SQL в рабочей области Azure Databricks к dbt Cloud.

Внимание

Databricks рекомендует подключаться к хранилищу SQL. Если у вас нет права доступа к Databricks SQL или если вы хотите запустить модели Python, вы можете подключиться к кластеру.

Требования

  • Чтобы подключить dbt Cloud к данным, управляемым Unity Catalog, требуется версия dbt 1.1 или выше.

    Действия, описанные в этой статье, создают новую среду, которая использует последнюю версию dbt. Сведения об обновлении версии dbt для существующей среды см. в разделе "Обновление до последней версии dbt в Облаке" в документации по dbt.

Шаг 1. Регистрация в dbt Cloud

Перейдите в dbt Cloud — зарегистрируйтесь и введите электронную почту, имя и сведения о компании. Создайте пароль и нажмите кнопку "Создать учетную запись".

Шаг 2. Создание проекта dbt

На этом шаге вы создадите проект dbt, содержащий подключение к кластеру Azure Databricks или хранилищу SQL, репозиторию, содержащему исходный код, и одной или нескольким средам (таким как тестирование и рабочие среды).

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

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

  3. Нажмите кнопку "Создать проект".

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

  5. Выберите вычислительное подключение Azure Databricks в раскрывающемся меню "Выбор подключения " или создайте новое подключение:

    1. Нажмите кнопку "Добавить новое подключение".

      Мастер добавления нового подключения откроется на новой вкладке.

    2. Нажмите кнопку Databricks и нажмите кнопку "Далее".

      Примечание.

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

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

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

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

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

    7. Вернитесь в мастер создания проекта и выберите только что созданное соединение в раскрывающемся меню "Подключение ".

  6. В разделе «Учетные данные разработки» для токена введите личный токен доступа или токен Microsoft Entra ID из требований.

  7. Для схемы введите имя схемы, в которой вы хотите, чтобы dbt создал таблицы и представления.

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

  9. Если тест выполнен успешно, нажмите кнопку "Сохранить".

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

  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 параметрах, таких как merge инкрементальная стратегия, см. в разделе Конфигурации Databricks документации dbt.

  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;

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

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