🌊

dataform-osmosis で Dataform の SQLX ファイルを簡単リファクタリング!

2024/10/28に公開

Dataform Osmosis とは?

dataform-osmosis は、Dataform で管理する SQLX ファイルを効率的に整理・整備するための CLI ツールです。このツールを使うことで、BigQuery のテーブル構造と SQLX ファイルの整合性を保ちながら、リファクタリングやメンテナンスを簡単に行うことができます。

Dataform 界隈では、dbt-osmosis のような便利なエコシステムがまだ整っておらず、Dataform ユーザーが効率的に SQLX ファイルを管理できるツールが不足しています。そこで、必要なツールがなければ作るしかないと考え、dataform-osmosis を開発しました。

Dataform のお世話になっている自分が、何か恩返しとして貢献できないかと考え、Dataform のコミュニティに役立つこのツールを公開することにしました。

https://github.com/hiracky16/dataform-osmosis

主な機能

  • BigQuery のカラム情報の同期:SQLX ファイルに BigQuery のカラム情報を自動的に追加
  • カラム説明の継承:参照元テーブルから同じカラム名の説明を継承し、説明不足を補完

インストール方法

dataform-osmosis は npm パッケージとして公開しています。以下のコマンドで簡単にインストールできます。

npm install -g dataform-osmosis

https://www.npmjs.com/package/dataform-osmosis

使い方

Dataform プロジェクトの検証

Dataform プロジェクトの設定を検証するには、次のコマンドを実行します:

dataform-osmosis valid

このコマンドは、BigQuery の設定を確認し、Dataform CLI が正しくセットアップされていることを確認します。

SQLX ファイルのリファクタリング

SQLX ファイルのカラム情報を更新して整列するには、以下のコマンドを使用します:

dataform-osmosis refactor -f [file_or_directory]

例えば以下のように table1 に依存する table2 があるとします。
table2.sqlx には columns が定義しておらずカラムの説明やポリシータグが付与されていません。

table1.sqlx
config {
    type: "table",
    "columns": {
        id: "id",
        name: {
          description: "name",
          bigqueryPolicyTags: ["projects/example-project/locations/us/taxonomies/123456789/policyTags/123456789"]
        }
    }
}
SELECT id,
    name
FROM ${ref('table0')}
table2.sqlx
config {
    type: "table"
}
SELECT *
FROM ${ref('table1')}

この状態で dataform-osmosis を実行すると table1.sqlx の説明やポリシータグを table2.sqlx が引き継ぐことができます。

> dataform-osmosis sqlx refactor -f definitions/
📁 Refactoring definitions/table1.sqlx
📁 Refactoring definitions/table2.sqlx
🔍️ Loading Dataform Project...
🔍️ Compiling Dataform Project...
🔍️ Loading BigQuery tables in dataform...
🔄 Refactoring definitions/table1.sqlx...
🔨 Updated SQLX file: definitions/table1.sqlx
✅️ Refactored definitions/table1.sqlx
🔄 Refactoring definitions/table2.sqlx...
🔨 Updated SQLX file: definitions/table2.sqlx
✅️ Refactored definitions/table2.sqlx
table2.sqlx
config {
  "type": "table",
  "columns": {
    "id": {
      "description": "id"
    },
    "name": {
      "description": "name",
      "bigqueryPolicyTags": [
        "projects/example-project/locations/us/taxonomies/123456789/policyTags/123456789"
      ]
    }
  }
}
SELECT *
FROM ${ref('table1')}

設定方法

dataform-osmosis では、BigQuery のプロジェクト設定を workflow_settings.yaml ファイルを通じて設定できます。

defaultProject: your-project-id
defaultLocation: asia-northeast1
defaultDataset: dataform
defaultAssertionDataset: dataform_assertions

ぜひ使ってみてください!

Dataform をお使いの皆様にとって、dataform-osmosis が SQLX ファイル管理の効率化に役立つことを願っています。ぜひ使ってみてフィードバックをいただけると幸いです!

今後も機能追加や改善を行っていく予定ですので、気軽に Issue や PR でのご協力もお待ちしております!

https://github.com/hiracky16/dataform-osmosis

Discussion