はじめに
データの分散管理が増加する中、AWS S3の柔軟なストレージとDatabricksの分析プラットフォーム、さらにdbt(data build tool)を組み合わせることで、スケーラブルで管理しやすいデータパイプラインを構築できます。
本記事では、以下の内容を段階的に解説します:
- AWS S3をDatabricks Unity Catalogに接続する方法
- 接続したデータをDatabricksとdbtで処理する方法
- Databricksジョブを使ってデータパイプラインを自動化する方法
Part 1: AWS S3をUnity Catalogに接続する
Unity Catalogを利用して、AWS S3をDatabricksと連携します。この手順では、IAMロールの設定やS3バケットの準備を行います。
必要な準備
-
AWS IAMロールの作成と設定:
DatabricksがS3にアクセスできるようにIAMロールを作成し、IAMポリシーとの信頼ポリシーを設定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetLifecycleConfiguration",
"s3:PutLifecycleConfiguration"
],
"Resource": [
"arn:aws:s3:::<作成したS3バケット>/*",
"arn:aws:s3:::<作成したS3バケット>"
],
"Effect": "Allow"
},
{
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::<AWSアカウントID>:role/<作成したIAMロール>"
],
"Effect": "Allow"
}
]
}
信頼ポリシーの編集
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::414351767826:role/unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL",
"arn:aws:iam::<AWSアカウントID>:role/<作成したIAMロール>"
]
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "<DatabricksアカウントID>"
}
}
}
]
}
Databricksでの設定
Part 2: データパイプラインの構築(Databricks + dbt)
次に、S3からのデータを活用し、Databricksとdbtを使ってデータトランスフォーメーションを行います。
dbtモデルの開発をスキップしたい場合は以下のリポジトリを利用することでdbt on databricksを簡単にテストすることもできます。
デモ用のGithubリポジトリ:https://github.com/olyalukashina/jaffle_shop.git
dbtプロジェクトの設定
-
dbt-databricksのインストール
Databricksに適したパッケージをインストールします:
pip install dbt-databricks
-
dbtプロジェクトの初期化
既存の
jaffle_shop
プロジェクトをDatabricksに適応:dbt init my_project cd my_project
-
profiles.ymlの設定
S3から読み込んだデータをDatabricksで処理するよう、
profiles.yml
を以下のように設定します。my_databricks_project: target: dev outputs: dev: type: databricks host: <databricks-instance> http_path: <sql-warehouse-path> schema: analytics token: <your-access-token> target: dev default:
-
dbtモデルの作成
S3データに基づくモデルを作成します(例: 売上データの集計)。
-- models/sales_summary.sql SELECT order_date, SUM(total) AS daily_sales FROM {{ ref('raw_sales') }} GROUP BY order_date ORDER BY order_date;
-
dbtプロジェクトをGithubに保存
作成したdbtプロジェクトをGithubにpushします。
Part 3: Databricksジョブで自動化
-
Databricksジョブの作成
dbt deps dbt run
-
トリガーの設定
-
動作チェック
実際にS3にデータを入れてみてフローが動くか確認します。成功と表示され、すべてのdbtモデルがPASSされていれば成功となります。
またUnity Data Catalogか作られたテーブルのリネージを確認することもできます。
https://docs.databricks.com/ja/data-governance/unity-catalog/data-lineage.html
-
実行通知
さらに以下の設定を行うことでメールやSlackへの成功失敗通知を流すことも可能です。(例:Slackの設定)
↓
結論
この記事では、AWS S3をDatabricksと統合し、dbtを使ったデータパイプラインの構築方法を解説しました。このアプローチを活用すれば、スケーラブルなデータ基盤を構築し、データガバナンスを強化できます。さらに、Databricksジョブを使用することで、定期実行やエラー通知の自動化が可能となり、運用効率が向上します。
Databricksとdbtの連携を活用して、エンタープライズ規模のデータ分析基盤を構築してみてください!