ノンコーディングでデータを抽出・整形して BigQuery に格納できるデータプレパレーションツール Dataprep を使ってみた

2020.11.09

こんにちは、みかみです。

GCP のマネージドサービス Cloud Dataprep by Trifacta を使うと、データの抽出、加工、ロードの一連の処理が画面操作だけで簡単に実現できるようなので、実際のところどうなのかさわってみました。

Dataprep とは

Cloud Dataprep は、GCP 管理コンソールから、GUI 操作でデータの抽出、加工、ロードが簡単に行える、データプレパレーションツールです。

Cloud Dataprep by Trifacta の名前の通り、分析用途のデータ加工ツールを開発している米 Trifacta 社が運営する統合パートナーサービスとのことで、システム設定やプログラミングなどのスキルがなくても直感的操作で必要なデータを準備することが可能です。

Dataprep では、画面からインポートデータの指定、フローの作成、レシピの作成を行い、Dataflow のジョブを実行して加工済みのデータを指定したアウトプット先に出力します。

Dataflow 単体でもテンプレートを利用すればコーディング無しでデータパイプラインを構築することができますが、Dataprep ではさらに複雑なデータ整形処理なども、画面の GUI 操作で簡単に実現することができます。

Dataprep の料金

GCP 管理コンソールからの Dataprep のフローやレシピの作成は無料で利用できますが、フローを実行する際には Dataflow ジョブを使ってデータ処理を行うため、Dataflow の利用料金がかかります。

また、Dataflow を単体で利用する場合同様、GCS や BigQuery など関連リソースの利用費もかかります。

とはいえ、Dataflow などの GCS リソースの利用費だけで済むので、サードパーティー製ツールのライセンス購入や導入コストと比較すると、はるかに安価で利用できるのではないでしょうか。

やりたいこと

Dataprep を使って、GCS に格納済みの 2 種類のファイルデータを結合し、日時データフォーマットの変更、カラムの移動や結合、分割、特定のカラム値のマスク処理を行った後、BigQuery にロードしてみます。

Dataprep を使いはじめる

課金が有効になった GCP プロジェクトは作成済みであるものとします。

GCP 管理コンソールから初めて Dataprep を利用する際には、Trafica 社が GCP アカウントやデータにアクセスすることに同意する必要があります。

アクセスの同意等のダイアログ操作完了後、ワーク用の GCS バケットを指定します。 デフォルトで新規のワーク用バケットが入力されていますが、「Change」ボタンから別バケットに変更することも可能です。

バケット指定後、Dataprep のダッシュボードにはチュートリアル実行ボタンが表示されます。

チュートリアルではソースデータなどもあらかじめ準備されており、各操作ごとにポップアップで詳細な説明が表示されるので、Dataprep の操作方法を確認するのに役に立ちます。

インポートデータを指定

以下 2 つの CSV ファイルを、それぞれ別の GCS バケットに配置しました。

member_id,last_name,first_name,last_name_kana,first_name_kana,birthday,gender,age,email,postal_code,pref,password,updated
1,川原,鈴音,カワハラ,スズネ,1963/3/1,女,57,fk09OGZ@sample.org,055-7326,高知県,xZ_B_0we,1980/5/15 3:43:09
2,岩沢,正義,イワサワ,マサヨシ,1974/9/14,男,46,fqGBB15@sample.org,604-1271,青森県,FrwhYvmQ,1977/6/10 17:04:03
3,成田,義孝,ナリタ,ヨシタカ,1987/1/10,男,33,AgHye1VtG@example.org,852-3574,群馬県,MzcYh40p,1997/9/7 16:12:40
4,春日,真結,カスガ,マユ,1959/1/24,女,61,dr27Wvo0Ky@example.com,329-4716,栃木県,kf_26jV1,1983/4/5 17:34:37
5,上地,琴乃,カミチ,コトノ,1967/2/25,女,53,iumZ74sTIW@sample.jp,999-8116,京都府,afWEDc9p,2000/8/10 10:57:49
6,砂田,晴菜,スナダ,ハルナ,1976/2/16,女,44,NPDkf@example.net,539-4056,沖縄県,YzoyksVj,1982/6/13 20:16:57
7,高坂,哲郎,タカサカ,テツロウ,1969/6/8,男,51,n2LOciN0@example.co.jp,692-5187,福島県,EkyQiSsd,1999/8/18 9:24:05
8,安原,奈緒,ヤスハラ,ナオ,1985/1/21,女,35,uwbcsm@sample.net,063-9650,群馬県,OQyzzurY,1970/9/28 10:11:30
9,吉村,公彦,ヨシムラ,キミヒコ,1967/9/14,男,53,T2gr_@example.net,563-7442,高知県,fO71Iu22,1974/11/20 14:21:25
10,柳,完治,リュウ,カンジ,2007/3/18,男,13,FQpOJ32a5@example.jp,767-2474,佐賀県,ulm7PxLo,1982/2/19 22:43:50
code,name
01,北海道
02,青森県
03,岩手県
(省略)
45,宮崎県
46,鹿児島県
47,沖縄県

1 ファイル目は下記テストデータ作成サイトで作成した架空の会員情報データです。

2 ファイル目の都道府県コードデータと都道府県名で結合し、都道府県コードを追加しようと思います。

Dataprep ダッシュボードの「Import Data」ボタンをクリックし、GCS のパスを入力して対象のデータファイルを選択します。

画面右枠に選択したファイル内のデータのプレビューが表示されるので、間違いないことを確認して「Import」ボタンをクリック。

同様に別バケットに配置した 2 つ目のデータファイルを指定しました。 無事インポートが完了すると、対象データは「Library」画面に追加されます。

フローを作成

続いてダッシュボードの「Create Flow」ボタンから、データの整形と BigQuery へのロードを実行するワークフローを作成します。 フローの名前と説明を入力し、「Create」ボタンをクリック。

まっさらなフロー画面が表示されたら、「Add Datasets」ボタンから先ほどインポートした 2 つのソースデータを追加します。

フロー画面に追加された Daraset を右クリックして、JOIN 対象の Dataset と結合条件を指定し、出力対象のカラムを選択すれば、結合処理の作成完了です。

レシピを作成

フロー画面に追加された「Recipe」アイコンを選択した状態で、右パネルの「Edit Recipe」ボタンをクリックします。

レシピ編集画面では、項目の移動や結合、フォーマット変換の他、グルーピングやピボットなど、様々なデータ変換処理が可能です。 変換処理は画面上部のツールバーや、データ項目名右端の下向き矢印アイコンをクリックすると表示されるカラムメニューから追加することができます。

カラム順とカラム名を変更

ソースデータ結合時に先頭に移動されていた都道府県名項目を、元の位置に戻します。 列名右端のアイコンから「Move」>「after/before」を選択し、右パネルで移動する場所を指定します。

変更後のデータがどうなるか画面にプレビュー表示されるので、追加する処理の内容を視覚的に確認することができます。

データ結合時に最後に追加された都道府県コードの項目も、カラム名を変更して都道府県名の前に移動しました。

日時データのフォーマットを変更

日時データ項目のフォーマットを変更します。

項目名右端のアイコンから、「Format」>「Change Datetime Format」の「Custom datetime format」を選択します。

右枠のフォーマット編集パネルで、変更後のフォーマットを Java の日時フォーマット書式で入力します。

変換後のプレビューで意図通りに変換されることが確認できたら「Add」ボタンで決定します。

同様に、日付項目のフォーマットも、スラッシュ区切りの yyyy/MM/dd からハイフンつなぎの yyyy-MM-dd に変更しました。

カラムを結合、分割

続いて、カラムを結合します。

対象のカラムを選択した後、画面上部のツールバーの中から「Merge Columns」のアイコンをクリックします。

結合対象のカラムを指定し、セパレーターに全角スペースを入力しました。 結合後のカラム名を入力して「Add」ボタンで決定します。

結合前のカラムはカラムメニューから「Delete」で削除しました。

逆にカラムを分割することも可能です。 郵便番号の項目を、ハイフンを境に 2 項目に分割してみます。

画面上で郵便番号項目の中のハイフン部分だけをドラッグすると、右パネルに「Suggestions」として変換の候補が表示されます。

各書式でどんな処理をしているか分からなくとも、候補を選択するとメイン画面に変換後データのプレビューが表示されるので、マウス操作だけで直感的に処理を追加することが可能です。

値の一部をマスキング

最後に、パスワード項目値の下 4 桁を固定文字でマスキングします。

画面上部ツールバーの「Replace」アイコンから「Text or pattern」を選択し、右パネルで置換対象文字列のパターンと置換文字列を入力します。

検索パターンには、正規表現や Dataprep 用の文字列パターンを入力可能です。

メイン画面に表示される変換後のプレビューを確認して、問題なければ変換処理の追加完了です。

出力先を設定してジョブを実行

レシピの作成が完了したので、ジョブを実行する準備ができました。

変換後データの出力先は、デフォルトでは GCS バケットに設定されていますが、「Edit」リンクから BigQuery に変更することが可能です。

出力先の BigQuery のデータセットを指定し、ロード種別に追記モードを指定しました。

ロード種別は以下の 4 パターンから選択可能です。

  • テーブル新規作成モード:タイムスタンプ付きのテーブルを毎回新規作成してデータをロード
  • データ追記モード:テーブルが存在しない場合は新規作成してデータを追記
  • データ洗い替えモード:既存テーブルデータをロードデータで洗い替え
  • テーブル置き換えモード:既存テーブルを削除し、同名のテーブルを作成してデータをロード

ロードと同時にテーブルを作成してくれるモードを選択すれば、Dataprep の管理画面操作だけでデータの取得からロードまでが完了するので、Dataprep のジョブ完了後すぐに BigQuery で SQL を実行することが可能です。

出力先が設定できたらいよいよジョブの実行です。 Output コンポーネントの Details パネルに表示される「Run Job」ボタンをクリックし、次の画面で実行内容を確認して「Run Job」ボタンで Dataprep ジョブを実行します。

ジョブの実行ステータスは、Dataprep ダッシュボートに一覧表示されます。

対象ジョブのリンクをクリックして、ジョブの詳細やプロファイルを確認することも可能です。

Dataprep では Dataflow のジョブを実行するので、ジョブの実行内容やステータスは Dataflow 管理画面からも確認可能です。

ジョブ実行が正常終了したので、BigQuery 管理コンソールからデータを確認してみます。

期待通り、テーブルが新規作成され、変換後のデータがロードされていることが確認できました。

まとめ(所感)

Dataprep を利用すると、本当にコーディング無しでデータの抽出から整形、BigQuery へのロードまで、画面の GUI 操作だけで簡単に実行できることが確認できました。

データ整形を行うレシピの作成では、選択項目に従って候補が表示されますし、変換後データのプレビュー表示もあるので本当に直感的に利用することができます。

サードパーティー製のツールを使えば実現可能な処理だと思いますが、Dataprep は GCP の管理コンソールにアクセスするだけで、GCP リソースの利用費のみですぐに利用開始することができます。

GCP のサービスなのでインプット/アウトプットには一部の GCP リソースしか選択できませんが、データアナリストやデータサイエンティストなどのロールの方が、データの前処理をご自身で簡単に実行でき、本来の分析業務に専念するために非常に便利なサービスだと思いました。

参考