こんにちは。香田です。
GCPで提供されているCloud Dataprepを利用して、
GCSのデータをBigQueryにロードするJobのスケジュール実行について解説していきます。
今回は下記のようにGCSバケットの日時フォルダに保存されるデータに対して、
毎日指定した時間にスケジュール実行していきます。
gs://<bucket-name>/dataprep/mock-data
└── 2020
└── 04
├── 01
│ ├── aaa.csv
│ └── bbb.csv
├── 02
│ ├── aaa.csv
│ ├── bbb.csv
│ └── ccc.csv
└── 03
└── bbb.csv
Dataprepとは
まずはDataprepについて簡単に解説しておきます。
Dataprepはノンプログラミングでデータの変換、加工処理をブラウザ上で確認しながら設定でき、
例えばGCSのデータを変換、加工してBigQueryにロードするといったデータパイプラインも簡単に作成できるサービスです。
Dataprepは内部的にDataflowを使用してJobが実行されます。
Dataprepでデータパイプラインを作成
今回スケジュール実行に関する解説を目的としている為、変換、加工処理はスキップしてます。
GCSからBigQueryにロードするデータパイプラインのみとなります。
1. 利用するGCSのデータについて
今回サンプルとして利用するデータは下記のようなフォルダ構成でGCSに保存され
CSVファイルは下記のような内容となります。
user_id,item_name,item_category,price,action_category,created_at
UID20,マグカップ,zakka,1500,purchase,2020-04-02 18:08:36
UID68,マグカップ,zakka,600,purchase,2020-04-02 04:44:35
UID7,シナモン,food,600,purchase,2020-04-02 15:08:45
UID90,クッキー,food,500,favorite,2020-04-02 14:27:19
UID87,シナモン,food,500,review,2020-04-02 00:46:50
2. データセットの作成
GCSバケットのデータをデータセットとして登録します。
[Library]より[Import Data]を選択します。
[GCS]の対象バケットのフォルダより[Parameterized]を選択します。
[Add Datetime Parameter]より[Datetime Parameter]に[YYYY/MM/DD/]を設定します。
[Date range]に[Date is last]と[1 days]を設定し[Save]を選択します。
上記設定により前日のフォルダ名が実行対象となります。
[Add Pattern Parameter]より[Parameter]は[Wildcard.*]のままにして[Save]を選択します。
パターンにマッチすると対象のファイルが下記のように表示されます。
問題なければ[Create]を選択し、[Import]します。
3. フローを作成する
[Flows]より[Create Flow]を選択し[Flow Name]を入力します。
[Add Datasets]より作成したDatasetsを選択し[Add]を選択します。
[Add new Recipe]を選択しRecipeを追加します。
4. スケジュール設定する
次に[Schedule Flow]より毎日指定した時間に実行されるようスケジュール設定します。
5. ロード先のBigQueryを設定する
作成したRecipeの[Create Output to Run]より[Scheduled Destinations]にて
[Add]を選択します。
[Add Publishing Action]より[BigQuery]のデータセットを選択し[Create a new table]より[Add]を選択後、[Save settings]を選択します。
6. Jobのスケジュール実行の確認
スケジュールした時間になると該当のJobが実行されます。
[Jobs]の[Running]より確認できます。
Jobの[Status]が[Completed]になっていると成功です。
下記のようにBigQueryにデータがロードされていることが確認できます。
さいごに
Dataprepを利用してスケジュール実行方法を簡単に紹介してきましたが如何でしたでしょうか。
GCSのデータセットに対して設定可能なParameter機能ですが、日付形式でフォルダに保存するのはよくあるパターンなので、かゆいとこに手が届く便利な機能だなと思います。
Dataprepはブラウザ上でインタラクティブにデータを検出、クレンジング、変換する機能が充実しているので、データ準備作業でも便利なサービスです。
Job実行しない限り料金も発生しないので是非触ってみてください!