1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DatabricksAdvent Calendar 2024

Day 24

AWS S3×databricks×dbtでデータパイプラインを構築する方法

Last updated at Posted at 2024-12-04

はじめに

データの分散管理が増加する中、AWS S3の柔軟なストレージとDatabricksの分析プラットフォーム、さらにdbt(data build tool)を組み合わせることで、スケーラブルで管理しやすいデータパイプラインを構築できます。

本記事では、以下の内容を段階的に解説します:

  1. AWS S3をDatabricks Unity Catalogに接続する方法
  2. 接続したデータをDatabricksとdbtで処理する方法
  3. Databricksジョブを使ってデータパイプラインを自動化する方法

Part 1: AWS S3をUnity Catalogに接続する

Unity Catalogを利用して、AWS S3をDatabricksと連携します。この手順では、IAMロールの設定やS3バケットの準備を行います。

必要な準備

  • DatabricksアカウントIDの確認:
    Databricksアカウントコンソール(アカウントを管理)から取得
    スクリーンショット 2024-12-04 14.46.15.png

  • AWS IAMロールの作成と設定:
    DatabricksがS3にアクセスできるようにIAMロールを作成し、IAMポリシーとの信頼ポリシーを設定します。

  • IAMポリシーを設定:
    必要なS3アクセス権をIAMロールに付与します。
    スクリーンショット 2024-12-04 14.52.07.png

{
  "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"
    }
  ]
}

信頼ポリシーの編集

  1. 作成したIAMロールを検索してクリックします。
  2. 信頼関係」タブを開き、「信頼ポリシーを編集」をクリックします。
  3. 以下のポリシーを貼り付けます。
    スクリーンショット 2024-12-04 14.54.37.png
{
  "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での設定

  1. Databricksの「外部ロケーションを追加」画面で、S3バケットとIAMロールのARNを指定します。
    スクリーンショット 2024-12-04 14.25.10.png

  2. 設定を保存し、Unity Catalogの外部ストレージとしてS3を登録します。
    スクリーンショット 2024-12-04 14.25.45.png
                      ↓
    スクリーンショット 2024-12-04 14.26.14.png

Part 2: データパイプラインの構築(Databricks + dbt)

次に、S3からのデータを活用し、Databricksとdbtを使ってデータトランスフォーメーションを行います。
dbtモデルの開発をスキップしたい場合は以下のリポジトリを利用することでdbt on databricksを簡単にテストすることもできます。

デモ用のGithubリポジトリ:https://github.com/olyalukashina/jaffle_shop.git

dbtプロジェクトの設定

  1. dbt-databricksのインストール

    Databricksに適したパッケージをインストールします:

    pip install dbt-databricks
    
  2. dbtプロジェクトの初期化

    既存のjaffle_shopプロジェクトをDatabricksに適応:

    dbt init my_project
    cd my_project
    
  3. 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:
    
  4. 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;
    
  5. dbtプロジェクトをGithubに保存
    作成したdbtプロジェクトをGithubにpushします。

Part 3: Databricksジョブで自動化

  1. Databricksジョブの作成

    • Databricksの「ワークフロー」セクションで新しいジョブを作成して保存します。
      スクリーンショット 2024-12-04 14.33.29.png

    • dbtタスクを追加し、必要なdbtコマンドを設定:

    dbt deps
    dbt run
    
  2. トリガーの設定

    • スケジュールとトリガーのタブで、S3の到着をトリガーに設定します。
      スクリーンショット 2024-12-04 14.21.14.png
  3. 動作チェック
    実際にS3にデータを入れてみてフローが動くか確認します。成功と表示され、すべてのdbtモデルがPASSされていれば成功となります。
    スクリーンショット 2024-12-04 14.37.08.png
    スクリーンショット 2024-12-04 14.37.44.png
    またUnity Data Catalogか作られたテーブルのリネージを確認することもできます。
    https://docs.databricks.com/ja/data-governance/unity-catalog/data-lineage.html
    スクリーンショット 2024-12-09 12.14.27.png

  4. 実行通知
    さらに以下の設定を行うことでメールやSlackへの成功失敗通知を流すことも可能です。(例:Slackの設定)
    スクリーンショット 2024-12-04 15.18.20.png

    スクリーンショット 2024-12-04 15.17.26.png

結論

この記事では、AWS S3をDatabricksと統合し、dbtを使ったデータパイプラインの構築方法を解説しました。このアプローチを活用すれば、スケーラブルなデータ基盤を構築し、データガバナンスを強化できます。さらに、Databricksジョブを使用することで、定期実行やエラー通知の自動化が可能となり、運用効率が向上します。
Databricksとdbtの連携を活用して、エンタープライズ規模のデータ分析基盤を構築してみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?