データアナリティクス事業本部のueharaです。
今回は、『dbtで始めるデータパイプライン構築〜入門から実践〜』をdbt-core (CLI)で実施してみたいと思います。
はじめに
『dbtで始めるデータパイプライン構築〜入門から実践〜』は dbt-tokyo がzennで公開しているdbtを利用したデータパイプライン構築の入門資料です。
こちらの資料ではdbt Cloudを利用していますが、今回は dbt Core (CLI) を利用して同様の検証が可能な環境を構築したいと思います。
環境構築
BigQueryの準備
こちらは原著のBigQueryの準備と同様の作業を行います。
キー情報が含まれたJSONファイルをダウンロードした後は、自分が分かるところに保存しておいて下さい(後で使います)。
dbt Coreのセットアップ
原著ではdbt Cloudを利用していますが、冒頭で述べたようにここではdbt Core (CLI)を利用します。
Pythonがインストールされていることが前提で話を進めますので、インストールがまだの方は用意をお願いします。
dbtはHomebrewやdbtが既にインストールされたDocker Imageを使って利用することもできますが、今回は公式ドキュメントで recommended となっているpipによるインストールを行います。 (参考)
まずは仮想環境を作成します。
$ python -m venv dbt-env
仮想環境を作成できたらアクティベートします。
$ source dbt-env/bin/activate
今回はBigQueryを利用するので、 dbt-bigquery
をインストールします。
$ pip install dbt-bigquery
これでインストールは完了です。dbt --version
コマンドを実行し、適切にインストールできていることを確認します。
$ dbt --version
Core:
- installed: 1.7.2
- latest: 1.7.2 - Up to date!
Plugins:
- bigquery: 1.7.2 - Up to date!
プロジェクトの作成
環境構築ができたら、プロジェクトの作成を行います。
プロジェクト名をdbt_tutorial
とすると、以下コマンドでプロジェクトの作成が開始できます。
$ dbt init dbt_tutorial
上記コマンドを実行すると対話形式で profiles.yml
の作成をすることができます。
今回、設定値は以下の値にしてみました。
項目 | 設定値 |
---|---|
Which database would you like to use? | bigquery |
Desired authentication method option | service_account |
keyfile | (BigQueryの準備で用意したJSONファイルのpath) |
project (GCP project id) | (GCP project id) |
dataset (the name of your dbt dataset) | dbt_tutorial |
threads (1 or more) | 1 |
job_execution_timeout_seconds [300] | 300 |
Desired location option (enter a number) | US |
設定が完了すると、 ~/.dbt/profiles.yml
が作成されます。
$ cat ~/.dbt/profiles.yml
dbt_tutorial:
outputs:
dev:
dataset: dbt_tutorial
job_execution_timeout_seconds: 300
job_retries: 1
keyfile: (path of key file)
location: US
method: service-account
priority: interactive
project: (GCP project id)
threads: 1
type: bigquery
target: dev
動かしてみる
作成したプロジェクト(今回は dbt_tutorial
)のフォルダに移動します。
$ cd dbt_tutorial
直後のフォルダ構成は以下の通りです。
$ tree -L 1
.
├── README.md
├── analyses
├── dbt_packages
├── dbt_project.yml
├── logs
├── macros
├── models
├── seeds
├── snapshots
├── target
└── tests
あとは原著のdbt Cloud上での操作をローカルファイルに読み替えて実行します。
1点注意ですが、原著のテストテーブルの準備について、csvの格納フォルダが data
になっていますが、これはdbt 1.0.0から seeds
というフォルダに変更になっています。
したがって、raw_customers.csv
, raw_orders.csv
, raw_payments.csv
は以下のように seeds
フォルダに格納します。
ファイルを準備した後、 dbt seed
コマンドを実行することで、テストテーブルの用意をすることができます。
$ dbt seed
06:33:47 Running with dbt=1.7.2
06:33:47 Registered adapter: bigquery=1.7.2
06:33:47 Unable to do partial parsing because profile has changed
06:33:48 Found 2 models, 3 seeds, 4 tests, 0 sources, 0 exposures, 0 metrics, 447 macros, 0 groups, 0 semantic models
06:33:48
06:33:51 Concurrency: 1 threads (target='dev')
06:33:51
06:33:51 1 of 3 START seed file dbt_tutorial.raw_customers .............................. [RUN]
06:33:57 1 of 3 OK loaded seed file dbt_tutorial.raw_customers .......................... [INSERT 100 in 6.57s]
06:33:57 2 of 3 START seed file dbt_tutorial.raw_orders ................................. [RUN]
06:34:03 2 of 3 OK loaded seed file dbt_tutorial.raw_orders ............................. [INSERT 99 in 5.45s]
06:34:03 3 of 3 START seed file dbt_tutorial.raw_payments ............................... [RUN]
06:34:10 3 of 3 OK loaded seed file dbt_tutorial.raw_payments ........................... [INSERT 113 in 6.77s]
06:34:10
06:34:10 Finished running 3 seeds in 0 hours 0 minutes and 21.68 seconds (21.68s).
06:34:10
06:34:10 Completed successfully
06:34:10
06:34:10 Done. PASS=3 WARN=0 ERROR=0 SKIP=0 TOTAL=3
BigQueryのコンソールを確認すると、きちんとテーブルが作成できていることが確認できました。
その他についても、原著の通りファイルを用意して dbt run
や dbt test
コマンドを実行することでモデルの作成やテストを実行することができます。
最後に
今回は、今回は、『dbtで始めるデータパイプライン構築〜入門から実践〜』をdbt-core (CLI)で実施してみました。
参考になりましたら幸いです。