Dataformの設定〜実行までやってみた

## 今回試すこと
* Dataform利用までの設定をしてみる
* データ操作処理を作成/実行してみる

    1\. リポジトリ作成
    2\. ワークスペース作成
    3\. コード作成/実行

## Dataformの設定
今回はGoogleリファレンスを見ながら実施

https://cloud.google.com/dataform/docs/overview?hl=ja

初めて利用される際はAPI有効化が必要ですので、
Dataformを開いた画面でAPI有効化を実施ください。

#### 1\. リポジトリ作成
Dataformを利用するためには、レポジトリの作成、ワークスペースの作成、実際のワークフローの作成のプロセスを踏む必要があります。

ではまずはリポジトリを作成していきましょう。
リポジトリでは、Dataformで作成するコードが管理されます。

APIが有効化されていれば、Dataformのボタンを押すとこの画面が開きます。
![スクリーンショット 2024-06-05 19.20.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/eb737ccc-b5b6-a469-b624-c9269fe0436c.png)

今回はお試しなので、こんな感じで設定します。
![スクリーンショット 2024-06-05 19.27.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/9dd5b32a-f454-cd20-d69b-947847525218.png)

無事レポジトリができましたね。これから作るコードがこの中で管理されていきます。
![スクリーンショット 2024-06-05 19.30.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/ba6c7af7-1881-54b3-585c-820b892a8f1c.png)


#### 2\. ワークスペース作成
次にワークスペースを作成していきます。
ワークスペースとは実際コードを書いて開発したり、実際のワークフローを作成したりできる開発基盤です。

それでは上記の作成したレポジトリの中に移動しましょう。
左上の「開発ワークスペースを作成」をクリック。
![スクリーンショット 2024-06-05 19.40.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/890dfde0-19b0-2c2f-32d8-b0bacfc07307.png)

作りたいワークスペースの名前を入力して、作成を押下します。
![スクリーンショット 2024-06-05 19.44.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/706ce995-6443-521e-251d-abfbb262ee2e.png)

ワークスペースは数秒で作成されます。
![スクリーンショット 2024-06-05 19.46.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/19e01cb3-3ecb-9e05-dfae-8203d881d6fd.png)


#### 3\. コード作成/実行
作成されたワークスペースに入って、Dataformで開発をしてみましょう。
![スクリーンショット 2024-06-05 19.47.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/2d1a07b6-b34e-4395-f9a0-258442f4cf15.png)

初めは何も入ってないので、とりあえず「ワークスペースを初期化」を押下して必要なフォルダをデフォルトで作成しましょう。
![スクリーンショット 2024-06-05 19.49.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/db53d4a4-67cf-5e36-84c8-f01499fa7364.png)


SQLを作成する前にBigQueryにデータセットを作成しておきます。
今回は公開データセットから「bigquery-public-data.america_health_rankings.ahr」をCSVでエクスポートし、自分の作成したプロジェクト配下にインポートしてコピーしました。
![スクリーンショット 2024-06-22 23.33.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/84322c73-60e0-650a-886a-cecb1118177a.png)
なお、公開データセットを利用する場合は以下を参照。

https://cloud.google.com/bigquery/public-data?hl=ja


ここからDataformでコードを作成していきます。
今回は公開テーブルの指定したカラムを抽出する処理をDataformで作成してみます。

まず、コードを記載するためのsqlxファイルを作成します。
フォルダエクスプローラのdefinitionsの3点リーダーを押下して、ファイルを作成します。ファイル名は末尾に".sqlx"を付けましょう。
![スクリーンショット 2024-06-20 18.23.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/5cd6b073-ae64-f393-38e3-a2b270b8da53.png)

以下2つの.sqlxファイルを作成します。
・ahr_declaration.sqlx　：　テーブル定義用
・ahr_fillna.sqlx　　　　：　抽出処理　
(※ファイル名がfiinaなのは処理とは関係ないです）
![スクリーンショット 2024-06-26 17.36.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/b22cd9db-936c-baf8-efc4-4292c5753956.png)

ファイルを作成して、COMPILED GRAPHのタブを見てみると以下のようにそれぞれのファイル名のコンポーネントが作成されます。
![スクリーンショット 2024-06-26 17.39.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/f9f13b54-4a62-5e6f-40a2-e7e88ca67a83.png)

CODEタブに戻って以下のコードをそれぞれのファイルに記載します。
<details><summary>ahr_declaration.sqlx　：　テーブル定義用</summary>

```ahr_declaration.sqlx
config {
  type: "declaration",
  database: "abstract-ring-404322",
  schema: "sample_dataform",
  name: "ahr"
}

```

</details>

<details><summary>ahr_fillna.sqlx　　　　：　抽出処理</summary>

```ahr_fillna.sqlx
select measure_name,state_name from ${ref("ahr")}   

```

</details>

コードが記載できたらもう一度COMPILED GRAPHを見てみましょう。
記載したコードに応じてワークフローが可視化されています。
![スクリーンショット 2024-06-26 17.55.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/43cf6b2e-10bd-946b-179f-e95f2726abdb.png)

ではCODEのタブに戻って「X件の変更をCOMMIT」を押下して、COMMITしましょう。
Dataformではソース管理も行われるため、プログラムを変更した際はCOMMITしておきましょう。

COMMITしたら「PUSH TO DEFAULT BRANCH」と出るので、変更したコードをマスターブランチにPUSHしておきましょう。

それではワークフローを実行してみましょう。
ウィンドウ上部の「実行を開始」＞「操作を実行」の順に押下すると下記画面が表示されます。今回は全体を実行してみるので、「ALL ACTION」を選択します。
それぞれの処理を個別に実行することも可能です。
![スクリーンショット 2024-06-26 18.02.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/9b82a5fd-0c8a-0840-4b28-14d330b63965.png)

EXECUTIONから実行したジョブの結果を見ると失敗していました。
![スクリーンショット 2024-06-26 18.06.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/5acf1ce3-931f-02fb-235c-a7610d140f02.png)

エラーを見たところサービスアカウントへの権限が足りてないとのことなので権限を追加。（ジョブ実行の権限だけでなく、BigQueryのデータを参照できる権限も必要）
![スクリーンショット 2024-06-26 18.09.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/cf88f3f6-d98f-9621-8942-1770c07955b0.png)

権限を追加して再実行したところ成功しました。
今回SELECT分を処理として選んでしまったため、当画面で処理結果は見ることができませんでした。（この画面で抽出した結果が見れると思っていました、、、）
![スクリーンショット 2024-06-26 18.16.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739555/186c5399-5636-d26f-5439-fc4f088f1b83.png)

実際に処理された結果を見てみたい場合は、今回の抽出処理部をINSERTやUPDATE分にしてみて、テーブルが実際に更新されるのを見てみるのが良いと思います。


## まとめ
今回はDataformでコードを記載して実行まで実施してみました。
データ処理をsqlxベースで簡単に記載することができ、記載したコードベースで処理の流れも可視化されるのでBigQueryで複雑な処理をするケースでは有効だと思います。
複雑な加工処理を一連の流れで実施する必要がある際にはぜひ使ってみてください。