メインコンテンツまでスキップ

dbt Cloudに接続する

dbt (Data Build Tool)は、データアナリストやデータエンジニアがSELECT文を書くだけでデータを変換できる開発環境です。 dbt は、これらの SELECT 文をテーブルとビューに変換する処理を行います。 dbt は、コードを生の SQL にコンパイルし、Databricks の指定されたデータベースでそのコードを実行します。 dbt は、バージョン管理、ドキュメント化、モジュール性などの協調的なコーディング パターンとベスト プラクティスをサポートします。

dbt はデータを抽出またはロードしません。 dbt は、「ロード後の変換」アーキテクチャを使用して、変換ステップのみに焦点を当てています。 dbt は、データベースにデータのコピーがすでにあることを前提としています。

この記事では、dbt Cloudに焦点を当てています。 dbt Cloudには、ジョブのスケジューリング、CI / CD、ドキュメントの提供、監視とアラート、統合開発環境(IDE)のターンキーサポートが装備されています。

dbt Core と呼ばれる dbt のローカル バージョンも利用できます。 dbt Core を使用すると、ローカル開発マシン上の任意のテキスト エディターまたは IDE で dbt コードを記述し、コマンド ラインから dbt を実行できます。 dbt Core には、dbt コマンドラインインターフェイス (CLI) が含まれています。 dbt CLIは無料で使用でき、オープンソースです。 詳細については、「dbt Coreへの接続」を参照してください。

dbt Cloudと dbt Core ではホストされている git リポジトリ (GitHub、GitLab、 Bitbucketなど) を使用できるため、dbt Cloudを使用して dbt プロジェクトを作成し、dbt Cloudと dbt Core ユーザーが使用できるようにすることができます。 詳細については、 dbt Web サイトの「dbt プロジェクトの作成 」および「 既存のプロジェクトの使用 」を参照してください。

dbt の一般的な概要については、次の YouTube ビデオ (26 分) をご覧ください。

Partner Connectを使用してdbt Cloudに接続する

このセクションでは、 Partner Connectを使用して Databricks SQLウェアハウスを dbt Cloudに接続し、dbt Cloudにデータへの読み取りアクセス権を付与する方法について説明します。

標準接続とdbt Cloudの違い

Partner Connect を使用して dbt Cloud に接続するには、「 Partner Connect を使用してデータ準備パートナーに接続する」の手順に従います。 dbt Cloud 接続は、次の点で標準のデータ準備および変換接続とは異なります。

  • は、サービス プリンシパルと個人用アクセス トークンに加えて、Partner Connect SQLSQL DBT_CLOUD_ENDPOINT by デフォルトという名前の ウェアハウス (旧称 エンドポイント) を作成します。

接続手順

Partner Connectを使用して dbt Cloudに接続するには、次の手順を実行します。

  1. Partner Connectを使用してデータ準備パートナーに接続します

  2. dbt Cloudに接続すると、dbt Cloud ダッシュボードが表示されます。 dbt Cloud プロジェクトを探索するには、メニュー バーの dbt ロゴの横にある最初のドロップダウンから dbt アカウント名を選択し (表示されていない場合)、2 番目のドロップダウン メニューから Databricks Partner Connect 試用版 プロジェクトを選択します (表示されていない場合)。

ヒント

プロジェクトの設定を表示するには、「three stripes」または「hamburger」メニューをクリックし、「 アカウント」>「プロジェクト」 をクリックし、プロジェクト名をクリックします。 接続設定を表示するには、[ 接続] の横にあるリンクをクリックします。 設定を変更するには、[ 編集 ] をクリックします。

このプロジェクトの Databricks パーソナル アクセス トークン情報を表示するには、メニュー バーの [ユーザー] アイコンをクリックし、[ Databricks Partner Connect 試用版> [資格情報] > [プロファイル ] をクリックして、プロジェクトの名前をクリックします。 変更するには、[ 編集 ] をクリックします。

dbt Cloudにデータへの読み取りアクセス権を付与する手順

Partner Connect 、デフォルト カタログでのみ DBT_CLOUD_USER サービスプリンシパルに作成専用権限を付与します。 Databricksワークスペースで次の手順に従って、選択したデータに対する 読み取りアクセス権をDBT_CLOUD_USER サービスプリンシパルに付与します。

警告

これらの手順を適応させて、ワークスペース内のカタログ、データベース、およびテーブル間で dbt Cloud に追加のアクセス権を付与できます。 ただし、セキュリティのベスト・プラクティスとして、Databricks DBT_CLOUD_USER サービスプリンシパルが操作する必要がある個々のテーブルにのみアクセス権を付与し、それらのテーブルへの読み取りアクセスのみを許可することを強くお勧めします。

  1. サイドバーカタログアイコン カタログ をクリックします。

  2. 右上のドロップダウンリストで SQLウェアハウス( DBT_CLOUD_ENDPOINT )を選択します。

    ウェアハウスの選択

    1. [カタログ エクスプローラ ] で、テーブルのデータベースを含むカタログを選択します。

    2. テーブルを含むデータベースを選択します。

    3. テーブルを選択します。

ヒント

カタログ、データベース、またはテーブルがリストに表示されない場合は、[ カタログの選択 ]、[ データベースの選択 ]、または [テーブルのフィルタ] ボックスに名前の一部をそれぞれ入力して、リストを絞り込みます。

テーブル��をフィルタリング

  1. [ アクセス許可 ]をクリックします。

  2. 付与 をクリックします。

  3. [ 複数のユーザーまたはグループを追加するタイプ ] で、[ DBT_CLOUD_USER ] を選択します。 これは、前のセクションで作成した Databricks サービスプリンシパル Partner Connect です。

ヒント

DBT_CLOUD_USER が表示されない場合は、[ 複数のユーザーまたはグループを追加するための入力 ] ボックスに「DBT_CLOUD_USER」と入力して一覧に表示され、それを選択します。

  1. 読み取りアクセス権を付与するには、[ SELECT ] と [ READ METADATA] を選択します。

  2. OK 」をクリックします。

dbt Cloud に読み取りアクセス権を付与する追加のテーブルごとに、手順 4 から 9 を繰り返します。

dbt Cloud接続のトラブルシューティング

誰かがこのアカウントの dbt Cloudでプロジェクトを削除し、 dbt タイルをクリックすると、プロジェクトが見つからないことを示すエラー メッセージが表示されます。 これを修正するには、[ 接続の削除 ] をクリックし、この手順の最初から開始して接続を再度作成します。

dbt Cloudに手動で接続する

Databricksこのセクションでは、Databricks SQL Databricksワークスペース内の クラスタリング ウェアハウスまたは ウェアハウスをdbt Cloud に接続する方法について説明します。

important

DatabricksSQLウェアハウスに接続することをお勧めします。Databricks SQLアクセス権限がない場合、またはPythonモデルを実行する場合は、代わりにクラスタリングに接続できます。

必要条件

注記

自動化されたツール、システム、スクリプト、アプリで認証する際のセキュリティのベストプラクティスとして、Databricks では OAuth トークンを使用することをお勧めします。

personal access token authentication を使用する場合、 Databricks では、ワークスペース ユーザーではなく 、サービスプリンシパル に属する personal access token を使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、「 サービスプリンシパルのトークンの管理」を参照してください。

  • dbt Cloudを Unity Catalog、dbt バージョン 1.1 以上で管理されるデータに接続するには。

    この記事の手順では、最新の dbt バージョンを使用する新しい環境を作成します。 既存の環境のdbtバージョンのアップグレードに関する情報については、dbtdbt ドキュメントの「 Cloud の 最新バージョンへのアップグレード 」を参照してください。

ステップ1:dbt Cloudにサインアップする

dbt Cloud - サインアップ に移動し、電子メール、名前、会社情報を入力します。パスワードを作成し、[ アカウントの作成 ] をクリックします。

ステップ 2: dbt プロジェクトを作成する

このステップでは、dbtDatabricksクラスタリングまたはSQL ウェアハウスへの接続、ソース コードを含むリポジトリ、および 1 つ以上の環境 (テスト環境や本番運用環境など) を含む プロジェクト を作成します。

  1. dbt Cloudにサインインします

  2. 設定アイコンをクリックし、[ アカウント設定 ] をクリックします。

  3. [新しいプロジェクト ] をクリックします。

  4. [ 名前 ] にプロジェクトの一意の名前を入力します。[ 続行 ] をクリックします。

  5. Databricks[ 接続の選択] ドロップダウン メニューから コンピュート接続を選択するか、新しい接続を作成します。

    1. [ 新しい接続を追加 ] をクリックします。

      新しい接続の追加 ウィザードが新しいタブで開きます。

    2. [Databricks ] をクリックし、[ 次へ ] をクリックします。

注記

Databricks では、dbt-sparkではなく、Unity Catalog をサポートする dbt-databricksを使用することをお勧めします。デフォルトでは、新しいプロジェクトは dbt-databricks. 既存のプロジェクトを dbt-databricksに移行するには、dbt ドキュメントの「 dbt-spark から dbt-databricks への移行 」を参照してください。

  1. 設定」 の「 サーバーホスト名 」に、要件に含まれるサーバーのホスト名の値を入力します。

  2. [HTTP パス ] に、要件の HTTP パス値を入力します。

  3. ワークスペースが Unity Catalog に対応している場合は、 [オプション設定 ] で、dbt が使用するカタログの名前を入力します。

  4. [ 保存 ]をクリックします。

  5. [New project ] ウィザードに戻り、[ Connection ] ドロップダウン メニューから作成した接続を選択します。

  6. [開発資格情報 ] の [ トークン ] に、要件の個人用アクセス トークンを入力します。

  7. [スキーマ] に、dbt でテーブルとビューを作成するスキーマの名前を入力します。

  8. [ テスト接続 ] をクリックします。

  9. テストが正常に完了したら、[ 保存 ] をクリックします。

詳細については、DatabricksODBCdbtWeb サイトの 「 への接続 」を参照してください。

ヒント

このプロジェクトの設定を表示または変更したり、プロジェクトを完全に削除したりするには、設定アイコンをクリックし、[ アカウント設定] > [プロジェクト ] をクリックして、プロジェクトの名前をクリックします。 設定を変更するには、[ 編集 ] をクリックします。 プロジェクトを削除するには、[ 編集] > [プロジェクトの削除 ] をクリックします。

このプロジェクトの Databricks 個人用アクセス トークンの値を表示または変更するには、"person" アイコンをクリックし、[ プロファイル] > [資格情報 ] をクリックして、プロジェクトの名前をクリックします。 変更するには、[ 編集 ] をクリックします。

Databricks クラスタリングまたは Databricks SQL ウェアハウスに接続したら、画面の指示に従って リポジトリをセットアップし 、[ 続行 ] をクリックします。

リポジトリを設定したら、画面の指示に従ってユーザーを招待し、[ 完了] をクリックします。 または、「 スキップして完了」 をクリックします。

チュートリアル

このセクションでは、dbt Cloud プロジェクトを使用して、いくつかのサンプル データを操作します。 このセクションでは、プロジェクトが既に作成されており、dbt Cloud IDE がそのプロジェクトに対して開かれていることを前提としています。

ステップ 1: モデルを作成して実行する

このステップでは、dbt Cloud IDE を使用して、同じデータベース内の既存のデータに基づいて、データベース内の新しいビュー (デフォルト) または新しいテーブルを作成するselectステートメントである モデル を作成および実行します。この手順では、サンプル データセットのサンプル diamonds テーブルに基づいてモデルを作成します。

次のコードを使用して、このテーブルを作成します。

SQL
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. プロジェクトを開いた状態で、UI の上部にある [開発 ] をクリックします。

  2. 「dbt プロジェクトの初期化 」をクリックします。

  3. [ コミットと同期 ] をクリックし、コミット メッセージを入力して、[ コミット ] をクリックします。

  4. [ブランチの作成 ] をクリックし、ブランチの名前を入力して、[ 送信] をクリックします。

  5. 最初のモデルを作成する: 「 新規ファイルを作成 」をクリックします。

  6. テキストエディタで、次のSQL文を入力します。 このステートメントは、 diamonds テーブルから各ダイヤモンドのカラット、カット、カラー、クラリティの詳細のみを選択します。 config ブロックは、この文に基づいてデータベースにテーブルを作成するように dbt に指示します。

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

merge増分戦略などの追加の config オプションについては、dbt ドキュメントの Databricks 構成を参照してください。

  1. [ 名前を付けて保存 ] をクリックします。

  2. ファイル名に「 models/diamonds_four_cs.sql 」と入力し、[ 作成 ] をクリックします。

  3. 2 つ目のモデルを作成する: 右上隅にある「 [新しいファイルを作成] アイコン ( 新規ファイルを作成 )」をクリックします。

  4. テキストエディタで、次のSQL文を入力します。 この文は、diamonds_four_cs テーブルの colors カラムから一意の値を選択し、結果をアルファベット順にソートします。config ブロックがないため、このモデルは dbt に、この文に基づいてデータベースにビューを作成するように指示します。

    SQL
    select distinct color
    from diamonds_four_cs
    sort by color asc
  5. [ 名前を付けて保存 ] をクリックします。

  6. ファイル名に「 models/diamonds_list_colors.sql」と入力し、[ 作成 ] をクリックします。

  7. 3 つ目のモデルを作成する: 右上隅にある [新しいファイルを作成] アイコン ( 新規ファイルを作成 ) をクリックします。

  8. テキストエディタで、次のSQL文を入力します。 このステートメントは、ダイヤモンドの価格を色ごとに平均化し、結果を平均価格の高いものから低いものへと並べ替えます。 このモデルは、この文に基づいてデータベースにビューを作成するように dbt に指示します。

    SQL
    select color, avg(price) as price
    from diamonds
    group by color
    order by price desc
  9. [ 名前を付けて保存 ] をクリックします。

  10. ファイル名に「 models/diamonds_prices.sql 」と入力し、[ 作成 ] をクリックします。

  11. モデルの実行: コマンド ラインで、前の 3 つのファイルへのパスを指定して dbt run コマンドを実行します。 default データベースでは、dbt は diamonds_four_cs という名前の 1 つのテーブルと、diamonds_list_colorsdiamonds_pricesという名前の 2 つのビューを作成します。dbt は、これらのビュー名とテーブル名を、関連する .sql ファイル名から取得します。

    Bash
    dbt run --model models/diamonds_four_cs.sql models/diamonds_list_colors.sql models/diamonds_prices.sql
    Console
    ...
    ... | 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
  12. 次の SQL コードを実行して、新しいビューに関する情報を一覧表示し、テーブルとビューからすべての行を選択します。

    クラスタリングに接続している場合は、このSQL SQLコードを、ノートブックのデフォルト言語として を指定して、クラスタリングに接続されている ノートブック から実行できます。SQLウェアハウスに接続している場合は、SQLクエリ からこの コードを実行できます。

    SQL
    SHOW views IN default
    Console
    +-----------+----------------------+-------------+
    | namespace | viewName | isTemporary |
    +===========+======================+=============+
    | default | diamonds_list_colors | false |
    +-----------+----------------------+-------------+
    | default | diamonds_prices | false |
    +-----------+----------------------+-------------+
    SQL
    SELECT * FROM diamonds_four_cs
    Console
    +-------+---------+-------+---------+
    | carat | cut | color | clarity |
    +=======+=========+=======+=========+
    | 0.23 | Ideal | E | SI2 |
    +-------+---------+-------+---------+
    | 0.21 | Premium | E | SI1 |
    +-------+---------+-------+---------+
    ...
    SQL
    SELECT * FROM diamonds_list_colors
    Console
    +-------+
    | color |
    +=======+
    | D |
    +-------+
    | E |
    +-------+
    ...
    SQL
    SELECT * FROM diamonds_prices
    Console
    +-------+---------+
    | color | price |
    +=======+=========+
    | J | 5323.82 |
    +-------+---------+
    | I | 5091.87 |
    +-------+---------+
    ...

ステップ 2: より複雑なモデルを作成して実行する

この手順では、関連するデータ テーブルのセットに対して、より複雑なモデルを作成します。 これらのデータ テーブルには、3 つのチームが 6 試合のシーズンをプレイする架空のスポーツ リーグに関する情報が含まれています。 この手順では、データ・テーブルを作成し、モデルを作成し、モデルを実行します。

  1. 次の SQL コードを実行して、必要なデータ テーブルを作成します。

    クラスタリングに接続している場合は、このSQL SQLコードを、ノートブックのデフォルト言語として を指定して、クラスタリングに接続されている ノートブック から実行できます。SQLウェアハウスに接続している場合は、SQLクエリ からこの コードを実行できます。

    この手順のテーブルとビューは、この例の一部として識別するのに役立つ zzz_ で始まります。 独自のテーブルやビューでこのパターンに従う必要はありません。

    SQL
    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 に指示します。

    SQL
    -- 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'
    ) }}
    SQL
    -- 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. 2 つ目のモデルを作成する: 右上隅にある「 [新しいファイルを作成] アイコン ( 新規ファイルを作成 )」をクリックします。

  7. テキストエディタで、次の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
  8. [ 名前を付けて保存 ] をクリックします。

  9. ファイル名に「 models/zzz_win_loss_records.sql 」と入力し、[ 作成 ] をクリックします。

  10. モデルの実行: コマンド ラインで、前の 2 つのファイルへのパスを指定して dbt run コマンドを実行します。 default データベース (プロジェクト設定で指定) に、dbt は zzz_game_details という名前の 1 つのテーブルと zzz_win_loss_recordsという名前のビューを作成します。dbt は、これらのビュー名とテーブル名を、関連する .sql ファイル名から取得します。

    Bash
    dbt run --model models/zzz_game_details.sql models/zzz_win_loss_records.sql
    Console
    ...
    ... | 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クエリ からこの コードを実行できます。

    SQL
    SHOW VIEWS FROM default LIKE 'zzz_win_loss_records';
    Console
    +-----------+----------------------+-------------+
    | namespace | viewName | isTemporary |
    +===========+======================+=============+
    | default | zzz_win_loss_records | false |
    +-----------+----------------------+-------------+
    SQL
    SELECT * FROM zzz_game_details;
    Console
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    | 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 |
    +---------+---------------+---------------+------------+---------------+---------------+------------+
    SQL
    SELECT * FROM zzz_win_loss_records;
    Console
    +---------------+------+--------+
    | team | wins | losses |
    +===============+======+========+
    | Amsterdam | 3 | 1 |
    +---------------+------+--------+
    | San Francisco | 2 | 2 |
    +---------------+------+--------+
    | Seattle | 1 | 3 |
    +---------------+------+--------+

ステップ 3: テストを作成して実行する

この手順では、モデルについて行うアサーションである テスト を作成します。 これらのテストを実行すると、dbt はプロジェクト内の各テストが成功したか失敗したかを示します。

テストには 2 つのタイプがあります。 YAML で記述された スキーマ テスト は、アサーションに合格しなかったレコードの数を返します。この数値が 0 の場合、すべてのレコードが合格するため、テストは合格します。 データ テスト は、合格するために 0 個のレコードを返す必要がある特定のクエリです。

  1. スキーマテストを作成する: 右上隅にある「 [新しいファイルを作成] アイコン ( Create New File )」をクリックします。

  2. テキストエディターで、次の内容を入力します。 このファイルには、指定した列が一意の値を持つか、null でないか、指定した値のみを持つか、またはその組み合わせがあるかを判断するスキーマ テストが含まれています。

    YAML
    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文を入力します。 このファイルには、レギュラーシーズン以外で試合が行われたかどうかを判断するためのデータテストが含まれています。

    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. 2 つ目のデータ テストを作成する: 右上隅にある [ [新しいファイルを作成] アイコン ( 新しいファイルを作成 )] をクリックします。

  10. テキストエディタで、次の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
  11. [ 名前を付けて保存 ] をクリックします。

  12. ファイル名に「 tests/zzz_game_details_check_scores.sql」と入力し、[ 作成 ] をクリックします。

  13. 3つ目のデータテストを作成する:右上隅の [新しいファイルを作成] アイコン ( 新しいファイルを作成 ) をクリックします。

  14. テキストエディタで、次の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
  15. [ 名前を付けて保存 ] をクリックします。

  16. ファイル名に「 tests/zzz_win_loss_records_check_records.sql」と入力し、[ 作成 ] をクリックします。

  17. テストの実行: コマンド ラインで、 dbt test コマンドを実行します。

ステップ4:クリーンアップ

この例で作成したテーブルとビューを削除するには、次の SQL コードを実行します。

クラスタリングに接続している場合は、この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 を使用して、dbt プロジェクトで SQL をプログラミングする方法を学びます。
  • dbt のベスト・プラクティスについて学習します。

追加のリソース