dbt Cloud に接続する
DBT(データ構築ツール)は、データアナリストやデータエンジニアが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クラウドに接続する
このセクションでは、 Partner Connectを使用して Databricks SQLウェアハウスを dbt Cloudに接続し、dbt Cloudにデータへの読み取りアクセス権を付与する方法について説明します。
標準接続とdbtクラウドの違い
Partner Connectを使用して dbt Cloudに接続するには、「 Partner Connectを使用してデータ準備パートナーに接続する」の手順に従います。dbt Cloud接続は、次の点で標準のデータ準備および変換接続とは異なります。
サービスプリンシパルと個人用アクセストークンに加えて、 Partner Connect は Cloud by Default という名前の SQLウェアハウス (以前の SQLエンドポイント) を作成します。
接続するステップ
Partner Connectを使用して dbt Cloudに接続するには、次の手順を実行します。
dbt Cloudに接続すると、dbt Cloud ダッシュボードが表示されます。 dbt Cloud プロジェクトを探索するには、メニュー バーの dbt ロゴの横にある最初のドロップダウンから dbt アカウント名を選択し (表示されていない場合)、2 番目のドロップダウン メニューから Databricks Partner Connect 試用版 プロジェクトを選択します (表示されていない場合)。
ヒント
プロジェクトの設定を表示するには、「3 ストライプ」または「ハンバーガー」メニューをクリックし、「 アカウント設定」>「プロジェクト」をクリックして、プロジェクトの名前をクリックします。 接続設定を表示するには、[ 接続] の横にあるリンクをクリックします。 設定を変更するには、[ 編集] をクリックします。
このプロジェクトの Databricks 個人用アクセストークン情報を表示するには、メニュー バーの "人" アイコンをクリックし、[ プロファイル] > [Databricks Partner Connect 試用版>資格情報] をクリックして、プロジェクトの名前をクリックします。 変更するには、[ 編集] をクリックします。
dbt Cloudにデータへの読み取りアクセス権を付与するステップ
Partner Connect は、デフォルト カタログでのみ クラウド サービスプリンシパルに作成専用権限を付与します。 Databricks ワークスペースで次のステップ に従って、選択したデータへの読み取りアクセス権を クラウド サービスプリンシパルに付与します。
警告
これらのステップ を調整して、ワークスペース内のカタログ、データベース、およびテーブルに対する追加のアクセス権を dbt cloud に付与できます。 ただし、セキュリティのベスト プラクティスとして、Databricks では、 クラウド サービスプリンシパルが操作する必要がある個々のテーブルにのみアクセス権を付与し、それらのテーブルへの読み取りアクセス権のみを付与することを強くお勧めします。
サイドバーの [カタログ ]をクリックします 。
右上のドロップダウン リストで SQLウェアハウス (クラウド) を選択します。
[カタログ エクスプローラー] で、テーブルのデータベースを含むカタログを選択します。
テーブルを含むデータベースを選択します。
テーブルを選択します。
ヒント
カタログ、データベース、またはテーブルが一覧に表示されない場合は、[ カタログの選択]、[ データベースの選択]、または [テーブルのフィルター ] ボックスに名前の一部を入力して、一覧を絞り込みます。
[ アクセス許可] をクリックします。
[ 許可] をクリックします。
[ 複数のユーザーまたはグループを追加するには 種類] で [ クラウド] を選択します。 これは、前のセクションで作成した Databricks サービスプリンシパル Partner Connect 。
ヒント
クラウドが表示されない場合は、一覧に表示されるまで [複数のユーザーまたはグループを追加する
DBT_CLOUD_USER
の種類] ボックスに「」と入力して選択します。読み取りアクセス権を付与するには、
SELECT
とREAD METADATA
を選択します。OK をクリックします。
dbt cloud に読み取りアクセス権を付与する追加のテーブルごとに、ステップ 4 から 9 を繰り返します。
dbtクラウドに手動で接続する
このセクションでは、Databricks ワークスペース内の Databricks クラスターまたは Databricks SQLウェアハウスを dbt Cloud に接続する方法について説明します。
重要
Databricks では、SQLウェアハウスに接続することをお勧めします。 Databricks SQL アクセス資格がない場合、または Python モデルを実行する場合は、代わりにクラスターに接続できます。
要件
Databricks ワークスペース内のクラスターまたは SQLウェアハウス。
クラスターまたは SQLウェアハウスの接続の詳細 (具体的には、 サーバーのホスト名、 ポート、 および HTTP パス の値)。
Databricks 個人用アクセストークン。個人用アクセストークンを作成するには、「ワークスペース ユーザー向けの個人用アクセストークンDatabricks」の手順に従います。
注
セキュリティのベスト プラクティスとして、自動化されたツール、システム、スクリプト、アプリを使用して認証する場合、 Databricksでは、ワークスペース ユーザーではなく、サービス プリンシパルに属する個人のアクセス トークンを使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、 「サービスプリンシパルのトークンの管理」を参照してください。
dbt Cloudを Unity Catalog、dbt バージョン 1.1 以上で管理されるデータに接続するには。
この記事のステップ は、最新の dbt バージョンを使用する新しい環境を作成します。 既存の環境の dbt バージョンのアップグレードに関する情報については、dbt ドキュメントの「 クラウドでの dbt の最新バージョンへのアップグレード 」を参照してください。
ステップ1:dbtクラウドにサインアップする
dbt Cloud - サインアップ に移動し、Eメール、名前、会社情報を入力します。パスワードを作成し、[ アカウントの作成] をクリックします。
ステップ 2: dbt プロジェクトを作成する
このステップでは、Databricks クラスターまたは SQLウェアハウスへの接続、ソース コードを含むリポジトリ、および 1 つ以上の環境 (テスト環境や運用環境など) を含む dbt プロジェクトを作成します。
設定アイコンをクリックし、[ アカウント設定] をクリックします。
[ 新しいプロジェクト] をクリックします。
[ 名前] にプロジェクトの一意な名前を入力し、[ 続行] をクリックします。
Databricks[ 接続の選択] ドロップダウン メニューから コンピュート接続を選択するか、新しい接続を作成します。
[ 新しい接続を追加] をクリックします。
新しい接続の追加ウィザードが新しいタブで開きます。
[Databricks] をクリックし、[次へ] をクリックします。
注
Databricks では、
dbt-spark
ではなく、 Unity Catalogをサポートするdbt-databricks
を使用することをお勧めします。 デフォルトでは、新しいプロジェクトではdbt-databricks
が使用されます。 既存のプロジェクトをdbt-databricks
に移行するには、dbt ドキュメントの「 dbt-spark から dbt-databricks への移行 」を参照してください。[ 設定] の [サーバー ホスト名] に、要件の サーバー ホスト名の値を入力します。
[HTTP パス] に、要件の HTTP パス値を入力します。
ワークスペースが Unity Catalog に対応している場合は、 [オプション設定] で、dbt が使用するカタログの名前を入力します。
[保存]をクリックします。
[New project] ウィザードに戻り、[Connection] ドロップダウン メニューから作成した接続を選択します。
[開発資格情報] の [トークン] に、要件から個人用アクセス トークンを入力します。
[スキーマ] に、dbt でテーブルとビューを作成するスキーマの名前を入力します。
[ 接続のテスト] をクリックします。
テストが正常に完了したら、[ 保存] をクリックします。
詳細については、dbt Web サイトの「 Databricks ODBC への接続 」を参照してください。
ヒント
このプロジェクトの設定を表示または変更したり、プロジェクトを完全に削除したりするには、設定アイコンをクリックし、[ アカウント設定] >[プロジェクト] をクリックして、プロジェクトの名前をクリックします。 設定を変更するには、[ 編集] をクリックします。 プロジェクトを削除するには、[ 編集] > [プロジェクトの削除] をクリックします。
このプロジェクトの Databricks 個人用アクセストークンの値を表示または変更するには、"個人" アイコンをクリックし、[ プロファイル] > 資格情報をクリックして、プロジェクトの名前をクリックします。 変更するには、[ 編集] をクリックします。
Databricks クラスターまたは Databricks SQLウェアハウスに接続した後、画面の指示に従って リポジトリをセットアップし、[ 続行] をクリックします。
リポジトリを設定したら、画面の指示に従ってユーザーを招待し、[ 完了] をクリックします。 または、「 スキップ&完了」をクリックします。
チュートリアル
このセクションでは、dbt Cloud プロジェクトを使用して、いくつかのサンプル データを操作します。 このセクションでは、プロジェクトが既に作成されており、dbt Cloud IDE がそのプロジェクトに対して開かれていることを前提としています。
ステップ 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
データベースにすでに作成されていることを前提としています。
プロジェクトを開いた状態で、UI の上部にある [ 開発 ] をクリックします。
[ dbt プロジェクトの初期化] をクリックします。
[ コミットと同期] をクリックし、コミット メッセージを入力して、[ コミット] をクリックします。
[ ブランチの作成] をクリックし、ブランチの名前を入力して、[ 送信] をクリックします。
最初のモデルを作成する:「 新規ファイルを作成」をクリックします。
テキスト・エディターで、以下の SQL ステートメントを入力します。 このステートメントは、
diamonds
テーブルから各ダイヤモンドのカラット、カット、カラー、クラリティの詳細のみを選択します。config
ブロックは、この文に基づいてデータベースにテーブルを作成するように dbt に指示します。{{ config( materialized='table', file_format='delta' ) }}
select carat, cut, color, clarity from diamonds
ヒント
merge
増分戦略などの追加のconfig
オプションについては、dbt ドキュメントの「 Databricks 構成 」を参照してください。「 名前を付けて保存」をクリックします。
ファイル名に「
models/diamonds_four_cs.sql
」と入力し、[ 作成] をクリックします。2 つ目のモデルを作成する:右上隅にある「( 新規ファイルを作成 )」をクリックします 。
テキスト・エディターで、以下の SQL ステートメントを入力します。 このステートメントは、
diamonds_four_cs
テーブルのcolors
列から一意の値を選択し、結果をアルファベット順に最初から最後まで並べ替えます。config
ブロックがないため、このモデルは、このステートメントに基づいてデータベースにビューを作成するように dbt に指示します。select distinct color from diamonds_four_cs sort by color asc
「 名前を付けて保存」をクリックします。
ファイル名に「
models/diamonds_list_colors.sql
」と入力し、[ 作成] をクリックします。3 番目のモデルを作成する:右上隅にある「( 新規ファイルを作成 )」をクリックします 。
テキスト・エディターで、以下の SQL ステートメントを入力します。 このステートメントでは、ダイヤモンドの価格を色別に平均し、結果を平均価格の高いものから低いものの順に並べ替えます。 このモデルは、このステートメントに基づいてデータベースにビューを作成するように dbt に指示します。
select color, avg(price) as price from diamonds group by color order by price desc
「 名前を付けて保存」をクリックします。
ファイル名に「
models/diamonds_prices.sql
」と入力し、「 作成」をクリックします。モデルの実行: コマンド ラインで、上記の 3 つのファイルへのパスを指定して
dbt run
コマンドを実行します。default
データベースでは、dbt はdiamonds_four_cs
という名前のテーブルを 1 つ作成し、diamonds_list_colors
とdiamonds_prices
という名前の 2 つのビューを作成します。dbt は、関連する.sql
ファイル名からこれらのビュー名とテーブル名を取得します。dbt run --model models/diamonds_four_cs.sql models/diamonds_list_colors.sql models/diamonds_prices.sql
... ... | 1 of 3 START table model default.diamonds_four_cs.................... [RUN] ... | 1 of 3 OK created table model default.diamonds_four_cs............... [OK ...] ... | 2 of 3 START view model default.diamonds_list_colors................. [RUN] ... | 2 of 3 OK created view model default.diamonds_list_colors............ [OK ...] ... | 3 of 3 START view model default.diamonds_prices...................... [RUN] ... | 3 of 3 OK created view model default.diamonds_prices................. [OK ...] ... | ... | Finished running 1 table model, 2 view models ... Completed successfully Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3
次の SQL コードを実行して、新しいビューに関する情報を一覧表示し、テーブルとビューからすべての行を選択します。
クラスターに接続している場合は、クラスターに接続されている ノートブック からこの SQL コードを実行し、ノートブックのデフォルト言語として SQL を指定できます。 SQLウェアハウスに接続している場合は、このSQLコードを クエリから実行できます。
SHOW views IN default
+-----------+----------------------+-------------+ | namespace | viewName | isTemporary | +===========+======================+=============+ | default | diamonds_list_colors | false | +-----------+----------------------+-------------+ | default | diamonds_prices | false | +-----------+----------------------+-------------+
SELECT * FROM diamonds_four_cs
+-------+---------+-------+---------+ | carat | cut | color | clarity | +=======+=========+=======+=========+ | 0.23 | Ideal | E | SI2 | +-------+---------+-------+---------+ | 0.21 | Premium | E | SI1 | +-------+---------+-------+---------+ ...
SELECT * FROM diamonds_list_colors
+-------+ | color | +=======+ | D | +-------+ | E | +-------+ ...
SELECT * FROM diamonds_prices
+-------+---------+ | color | price | +=======+=========+ | J | 5323.82 | +-------+---------+ | I | 5091.87 | +-------+---------+ ...
ステップ 2: より複雑なモデルを作成して実行する
このステップでは、関連するデータ テーブルのセットに対して、より複雑なモデルを作成します。 これらのデータ テーブルには、6 試合のシーズンをプレイする 3 つのチームの架空のスポーツ リーグに関する情報が含まれています。 この手順では、データ テーブルを作成し、モデルを作成して、モデルを実行します。
次の SQL コードを実行して、必要なデータ テーブルを作成します。
クラスターに接続している場合は、クラスターに接続されている ノートブック からこの SQL コードを実行し、ノートブックのデフォルト言語として SQL を指定できます。 SQLウェアハウスに接続している場合は、このSQLコードを クエリから実行できます。
このステップ のテーブルとビューは、この例の一部として識別しやすいように
zzz_
で始まります。 独自のテーブルとビューに対してこのパターンに従う必要はありません。DROP TABLE IF EXISTS zzz_game_opponents; DROP TABLE IF EXISTS zzz_game_scores; DROP TABLE IF EXISTS zzz_games; DROP TABLE IF EXISTS zzz_teams; CREATE TABLE zzz_game_opponents ( game_id INT, home_team_id INT, visitor_team_id INT ) USING DELTA; INSERT INTO zzz_game_opponents VALUES (1, 1, 2); INSERT INTO zzz_game_opponents VALUES (2, 1, 3); INSERT INTO zzz_game_opponents VALUES (3, 2, 1); INSERT INTO zzz_game_opponents VALUES (4, 2, 3); INSERT INTO zzz_game_opponents VALUES (5, 3, 1); INSERT INTO zzz_game_opponents VALUES (6, 3, 2); -- Result: -- +---------+--------------+-----------------+ -- | game_id | home_team_id | visitor_team_id | -- +=========+==============+=================+ -- | 1 | 1 | 2 | -- +---------+--------------+-----------------+ -- | 2 | 1 | 3 | -- +---------+--------------+-----------------+ -- | 3 | 2 | 1 | -- +---------+--------------+-----------------+ -- | 4 | 2 | 3 | -- +---------+--------------+-----------------+ -- | 5 | 3 | 1 | -- +---------+--------------+-----------------+ -- | 6 | 3 | 2 | -- +---------+--------------+-----------------+ CREATE TABLE zzz_game_scores ( game_id INT, home_team_score INT, visitor_team_score INT ) USING DELTA; INSERT INTO zzz_game_scores VALUES (1, 4, 2); INSERT INTO zzz_game_scores VALUES (2, 0, 1); INSERT INTO zzz_game_scores VALUES (3, 1, 2); INSERT INTO zzz_game_scores VALUES (4, 3, 2); INSERT INTO zzz_game_scores VALUES (5, 3, 0); INSERT INTO zzz_game_scores VALUES (6, 3, 1); -- Result: -- +---------+-----------------+--------------------+ -- | game_id | home_team_score | visitor_team_score | -- +=========+=================+====================+ -- | 1 | 4 | 2 | -- +---------+-----------------+--------------------+ -- | 2 | 0 | 1 | -- +---------+-----------------+--------------------+ -- | 3 | 1 | 2 | -- +---------+-----------------+--------------------+ -- | 4 | 3 | 2 | -- +---------+-----------------+--------------------+ -- | 5 | 3 | 0 | -- +---------+-----------------+--------------------+ -- | 6 | 3 | 1 | -- +---------+-----------------+--------------------+ CREATE TABLE zzz_games ( game_id INT, game_date DATE ) USING DELTA; INSERT INTO zzz_games VALUES (1, '2020-12-12'); INSERT INTO zzz_games VALUES (2, '2021-01-09'); INSERT INTO zzz_games VALUES (3, '2020-12-19'); INSERT INTO zzz_games VALUES (4, '2021-01-16'); INSERT INTO zzz_games VALUES (5, '2021-01-23'); INSERT INTO zzz_games VALUES (6, '2021-02-06'); -- Result: -- +---------+------------+ -- | game_id | game_date | -- +=========+============+ -- | 1 | 2020-12-12 | -- +---------+------------+ -- | 2 | 2021-01-09 | -- +---------+------------+ -- | 3 | 2020-12-19 | -- +---------+------------+ -- | 4 | 2021-01-16 | -- +---------+------------+ -- | 5 | 2021-01-23 | -- +---------+------------+ -- | 6 | 2021-02-06 | -- +---------+------------+ CREATE TABLE zzz_teams ( team_id INT, team_city VARCHAR(15) ) USING DELTA; INSERT INTO zzz_teams VALUES (1, "San Francisco"); INSERT INTO zzz_teams VALUES (2, "Seattle"); INSERT INTO zzz_teams VALUES (3, "Amsterdam"); -- Result: -- +---------+---------------+ -- | team_id | team_city | -- +=========+===============+ -- | 1 | San Francisco | -- +---------+---------------+ -- | 2 | Seattle | -- +---------+---------------+ -- | 3 | Amsterdam | -- +---------+---------------+
最初のモデルを作成する:右上隅にある「( 新規ファイルを作成 )」をクリックします 。
テキスト・エディターで、以下の SQL ステートメントを入力します。 このステートメントは、チーム名やスコアなど、各ゲームの詳細を提供するテーブルを作成します。
config
ブロックは、この文に基づいてデータベースにテーブルを作成するように dbt に指示します。-- Create a table that provides full details for each game, including -- the game ID, the home and visiting teams' city names and scores, -- the game winner's city name, and the game date.
{{ config( materialized='table', file_format='delta' ) }}
-- Step 4 of 4: Replace the visitor team IDs with their city names. select game_id, home, t.team_city as visitor, home_score, visitor_score, -- Step 3 of 4: Display the city name for each game's winner. case when home_score > visitor_score then home when visitor_score > home_score then t.team_city end as winner, game_date as date from ( -- Step 2 of 4: Replace the home team IDs with their actual city names. select game_id, t.team_city as home, home_score, visitor_team_id, visitor_score, game_date from ( -- Step 1 of 4: Combine data from various tables (for example, game and team IDs, scores, dates). select g.game_id, go.home_team_id, gs.home_team_score as home_score, go.visitor_team_id, gs.visitor_team_score as visitor_score, g.game_date from zzz_games as g, zzz_game_opponents as go, zzz_game_scores as gs where g.game_id = go.game_id and g.game_id = gs.game_id ) as all_ids, zzz_teams as t where all_ids.home_team_id = t.team_id ) as visitor_ids, zzz_teams as t where visitor_ids.visitor_team_id = t.team_id order by game_date desc
「 名前を付けて保存」をクリックします。
ファイル名に「
models/zzz_game_details.sql
」と入力し、[ 作成] をクリックします。2 つ目のモデルを作成する:右上隅にある「( 新規ファイルを作成 )」をクリックします 。
テキスト・エディターで、以下の SQL ステートメントを入力します。 このステートメントは、シーズンのチームの勝敗記録を一覧表示するビューを作成します。
-- Create a view that summarizes the season's win and loss records by team. -- Step 2 of 2: Calculate the number of wins and losses for each team. select winner as team, count(winner) as wins, -- Each team played in 4 games. (4 - count(winner)) as losses from ( -- Step 1 of 2: Determine the winner and loser for each game. select game_id, winner, case when home = winner then visitor else home end as loser from zzz_game_details ) group by winner order by wins desc
「 名前を付けて保存」をクリックします。
ファイル名に「
models/zzz_win_loss_records.sql
」と入力し、[ 作成] をクリックします。モデルの実行: コマンド ラインで、前の 2 つのファイルへのパスを指定して
dbt run
コマンドを実行します。default
データベース (プロジェクト設定で指定) に、dbt はzzz_game_details
という名前のテーブルを 1 つ作成し、zzz_win_loss_records
という名前のビューを 1 つ作成します。dbt は、関連する.sql
ファイル名からこれらのビュー名とテーブル名を取得します。dbt run --model models/zzz_game_details.sql models/zzz_win_loss_records.sql
... ... | 1 of 2 START table model default.zzz_game_details.................... [RUN] ... | 1 of 2 OK created table model default.zzz_game_details............... [OK ...] ... | 2 of 2 START view model default.zzz_win_loss_records................. [RUN] ... | 2 of 2 OK created view model default.zzz_win_loss_records............ [OK ...] ... | ... | Finished running 1 table model, 1 view model ... Completed successfully Done. PASS=2 WARN=0 ERROR=0 SKIP=0 TOTAL=2
次の SQL コードを実行して、新しいビューに関する情報を一覧表示し、テーブルとビューからすべての行を選択します。
クラスターに接続している場合は、クラスターに接続されている ノートブック からこの SQL コードを実行し、ノートブックのデフォルト言語として SQL を指定できます。 SQLウェアハウスに接続している場合は、このSQLコードを クエリから実行できます。
SHOW VIEWS FROM default LIKE 'zzz_win_loss_records';
+-----------+----------------------+-------------+ | namespace | viewName | isTemporary | +===========+======================+=============+ | default | zzz_win_loss_records | false | +-----------+----------------------+-------------+
SELECT * FROM zzz_game_details;
+---------+---------------+---------------+------------+---------------+---------------+------------+ | game_id | home | visitor | home_score | visitor_score | winner | date | +=========+===============+===============+============+===============+===============+============+ | 1 | San Francisco | Seattle | 4 | 2 | San Francisco | 2020-12-12 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 2 | San Francisco | Amsterdam | 0 | 1 | Amsterdam | 2021-01-09 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 3 | Seattle | San Francisco | 1 | 2 | San Francisco | 2020-12-19 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 4 | Seattle | Amsterdam | 3 | 2 | Seattle | 2021-01-16 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 5 | Amsterdam | San Francisco | 3 | 0 | Amsterdam | 2021-01-23 | +---------+---------------+---------------+------------+---------------+---------------+------------+ | 6 | Amsterdam | Seattle | 3 | 1 | Amsterdam | 2021-02-06 | +---------+---------------+---------------+------------+---------------+---------------+------------+
SELECT * FROM zzz_win_loss_records;
+---------------+------+--------+ | team | wins | losses | +===============+======+========+ | Amsterdam | 3 | 1 | +---------------+------+--------+ | San Francisco | 2 | 2 | +---------------+------+--------+ | Seattle | 1 | 3 | +---------------+------+--------+
ステップ 3: テストを作成して実行する
このステップでは、モデルについて行うアサーションである テストを作成します。 これらのテストを実行すると、dbt はプロジェクト内の各テストが成功したか失敗したかを通知します。
テストには 2 つのタイプがあります。 YAMLで記述されたスキーマテストは、アサーションに合格しないレコードの数を返します。この数値が 0 の場合、すべてのレコードが合格するため、テストに合格します。 データ テスト は、合格するために 0 レコードを返す必要がある特定のクエリです。
スキーマテストを作成する:右上隅にある( 新規ファイルの作成 )をクリックします 。
テキスト エディターで、次の内容を入力します。 このファイルには、指定された列が一意の値を持つか、null ではないか、指定された値のみを持つか、またはその組み合わせがあるかを判断するスキーマ テストが含まれています。
version: 2 models: - name: zzz_game_details columns: - name: game_id tests: - unique - not_null - name: home tests: - not_null - accepted_values: values: ['Amsterdam', 'San Francisco', 'Seattle'] - name: visitor tests: - not_null - accepted_values: values: ['Amsterdam', 'San Francisco', 'Seattle'] - name: home_score tests: - not_null - name: visitor_score tests: - not_null - name: winner tests: - not_null - accepted_values: values: ['Amsterdam', 'San Francisco', 'Seattle'] - name: date tests: - not_null - name: zzz_win_loss_records columns: - name: team tests: - unique - not_null - relationships: to: ref('zzz_game_details') field: home - name: wins tests: - not_null - name: losses tests: - not_null
「 名前を付けて保存」をクリックします。
ファイル名に「
models/schema.yml
」と入力し、[ 作成] をクリックします。最初のデータテストを作成する:右上隅にある( 新規ファイルの作成 )をクリックします 。
テキスト・エディターで、以下の SQL ステートメントを入力します。 このファイルには、レギュラーシーズン外にゲームが発生したかどうかを判断するためのデータテストが含まれています。
-- This season's games happened between 2020-12-12 and 2021-02-06. -- For this test to pass, this query must return no results. select date from zzz_game_details where date < '2020-12-12' or date > '2021-02-06'
「 名前を付けて保存」をクリックします。
ファイル名に「
tests/zzz_game_details_check_dates.sql
」と入力し、[ 作成] をクリックします。2 つ目のデータテストを作成する:右上隅にある「( 新規ファイルを作成 )」をクリックします 。
テキスト・エディターで、以下の SQL ステートメントを入力します。 このファイルには、スコアが負であったか、ゲームが引き分けであったかを判断するためのデータテストが含まれています。
-- This sport allows no negative scores or tie games. -- For this test to pass, this query must return no results. select home_score, visitor_score from zzz_game_details where home_score < 0 or visitor_score < 0 or home_score = visitor_score
「 名前を付けて保存」をクリックします。
ファイル名に「
tests/zzz_game_details_check_scores.sql
」と入力し、[ 作成] をクリックします。3 番目のデータテストを作成する:右上隅にある「( 新規ファイルを作成 )」をクリックします 。
テキスト・エディターで、以下の SQL ステートメントを入力します。 このファイルには、負の勝敗記録があったチーム、プレイしたゲームよりも勝敗記録が多かったチーム、または許可されたよりも多くのゲームをプレイしたチームがあるかどうかを判断するためのデータテストが含まれています。
-- Each team participated in 4 games this season. -- For this test to pass, this query must return no results. select wins, losses from zzz_win_loss_records where wins < 0 or wins > 4 or losses < 0 or losses > 4 or (wins + losses) > 4
「 名前を付けて保存」をクリックします。
ファイル名に「
tests/zzz_win_loss_records_check_records.sql
」と入力し、[ 作成] をクリックします。テストの実行: コマンド ラインで、
dbt test
コマンドを実行します。
ステップ 4: クリーンアップ
この例で作成したテーブルとビューを削除するには、次の SQL コードを実行します。
クラスターに接続している場合は、クラスターに接続されている ノートブック からこの SQL コードを実行し、ノートブックのデフォルト言語として SQL を指定できます。 SQLウェアハウスに接続している場合は、このSQLコードを クエリから実行できます。
DROP TABLE zzz_game_opponents;
DROP TABLE zzz_game_scores;
DROP TABLE zzz_games;
DROP TABLE zzz_teams;
DROP TABLE zzz_game_details;
DROP VIEW zzz_win_loss_records;
DROP TABLE diamonds;
DROP TABLE diamonds_four_cs;
DROP VIEW diamonds_list_colors;
DROP VIEW diamonds_prices;
次のステップ
dbt モデルの詳細については、こちらを参照してください。
dbt プロジェクト をテストする 方法について説明します。
テンプレート言語である Jinja を使用して dbt プロジェクトで SQL をプログラミングする方法を学習します。
dbt の ベスト プラクティスについて説明します。