BigQuery Data Transfer Service(DTS)の限界

BigQuery Data Transfer Service(DTS)の限界

・誰でも簡単にノーコードでBigQueryにデータ連携できることが魅力的
・例えば、Google Cloud Storageと連携すれば、CSVをアップロードする度にBigQueryも自動更新
・ただし、CSVのカラムを増やしたりするとエラーになる Excelも未対応
・工数はかかるが安定運用や長期的な工数を考慮すると、Cloud Runでフルスクラッチ開発がベター
・Cloud Runなら、カラムが変動しても、動的にBigQueryのテーブルを更新できる

BigQueryのようなDWHに社内外データを集約したい時に役立つのがBigQuery Data Transfer Service(DTS)です。

馴染みのない名前かもしれませんが、Google広告のデータをBigQueryに連携する時など、知らないうちに利用していたという方も多いと思います。

DTSは、たびたびアップデートされており、連携できるサービスも多数あります。

Google広告やYoutube、Google Cloud Storage(GCS)等のGoogle系サービスをはじめ、AWS(S3・Redshift等)やTeradata、最近ではSalesforceやMeta広告のプレビュー版が提供されています。

Salesforceのプレビュー版についてはこちらの記事もお勧めです。

AWS(Redshift)とBigQueryの連携についてはこちらの記事もお勧めです。

DTSのユースケース Google Cloud Storage(GCS)とBigQueryを連携

DTSで、よく使われているケースとして、GCSとBigQueryの連携があります。

特に、KPIをトラッキングする企業様において、目標値や実績等をCSVで管理されており、それらをBigQueryに連携して、他データと統合分析する場合に役立ちます。

実装もとても簡単です。

任意のCSVを用意します。1行目に変数名、2行目以降にデータを入力します。

GCSの任意のバケットにアップロードします。

アップロードしたCSVをクリックします。

このマークをクリックし、パスをコピーします。

BigQueryをひらきます。データセット横のマークをクリックし、テーブルを作成します。

テーブルの作成元「Google Cloud Storage」を選択し、GCSバケットの欄に、コピーしたGCSのパスをペーストします。

テーブルに任意の名前を入力します。画像加工によりプロジェクトがブランクになっていますが、プロジェクトはご自身のプロジェクト名が入ります。

スキーマをお好みで設定します。複雑なデータでなければ自動検出で可能です。

1行目をスキップし、変数名がデータとして取り込まれないようにします。

作成ボタンをクリックし、テーブルを確認します。成功すれば、このようにCSVが取り込まれます。

BigQueryの画面左「データ転送」→「転送を作成」をクリックします。

ソース「Google Cloud Storage」を選択し、任意の転送構成名を入力します。

データセットやGCSのCSV等を同じ要領で設定し、保存をクリックします。

設定が完了すると、画面が切り替わり、転送を開始します。

成功すると、緑色のチェックマークが点灯します。

DTSには限界もある

このように設定すると、CSVのレコードが増えても、GCSにCSVをアップロードしておけば、設定したタイミングでBigQueryに自動で反映します。

KPIをHourlyや日次で管理している企業様の場合、ノーコードで簡単な操作だけで、このようなデータ連携を構築できます。

しかし、DTSには限界もあります。

例えば、先ほどのCSVのD列にVar4を追加します。

GCSにアップロードし、上書きします。

DTSの画面で、今すぐ転送を実行します。これによりGCSのデータがBigQueryに手動で反映できます。

しばらくすると、処理がエラーになります。

エラーの内容です

Error while reading data, error message: CSV processing encountered too many errors, giving up. Rows: 0; errors: 3; max bad: 0; error percent: 0; JobID:...省略

many erros たくさんのエラーが発生し、正常に読み込まれたRowsレコードは0行です。

これは、CSVのカラムを増やしたことが原因です。

DTSは、CSVの仕様が変わると、このようなとエラーになります。

弊社のお客様には、社内データをCSVで管理されており、CSVのカラムを定期的に増やす企業様もおられます。

また、Excelで管理されている企業様もおられます。

そのようなケースの場合、DTSでは対応できません。

Cloud Runのフルスクラッチでカスタマイズ対応


このようなケースの場合、初期工数はかかりますが、Cloud Runのフルスクラッチ開発がベターになります。

Cloud Runなら、カラムが増えてもエラーにならず、動的にBigQueryのテーブルを更新できます。

特定セルの値だけBigQueryに取り込むことも可能で、Excelも取り込めます。

安定運用や長期的な工数軽減、柔軟に対応したい場合等を考慮すると、DTSより優れている場合が多いと思います。

Cloud RunはPythonに対応。様々なケースに応じた処理ができる。

Google Cloud開発お承ります

datacompanyでは、お客様のご予算・環境に応じたクラウド開発を承ります。

お困りごとがございましたら是非ご相談ください。

お問い合わせフォーム

Googleのチュートリアル通りに進めるとエラーになるときの対処法

Googleのチュートリアル通りに進めるとエラーになるときの対処法

・エラーメッセージから仮説を立て試す
・チュートリアルに記載のないことも試す
・特に、プレビュー環境の場合、チュートリアルが実態にそっていない傾向があることを知っておく
※執筆当時の情報です

前回は、Cloud Data Fusionを停止して年間200万円コスト削減したことをご紹介いたしました。

今回は、Amazon RedshiftからGoogle BigQueryへデータ連携を事例に、Google Cloudのチュートリアル通りに進めてもエラーになる場合の対処方法をご紹介いたします。

前回のお話は以下よりご覧いただけます。

Googleの公式サポートを使わずに解決できればベター

Google Cloudのチュートリアルは、ほぼ完全に整備されており、チュートリアルを進めることで大抵のことは解決します。

あまり経験していませんが、チュートリアル通りに進めてもエラーになる場合があります。

そのような場合、Google Cloudの公式サポート(有償)を頼ることになりますが、この事例で取り上げるCloud Data Fusionの日本サポートチームはインドのバンガロールにあります。

時差や英語でのコミュニケーションに加え、オンライン会議で画面操作を試す→エラー→再操作→再エラー・・・を繰り返すなど、効率が良いとは言えず、とても多くの工数を消費してしまいます。

また、事前にチケットで、プログラムや出力結果を送っているものの、担当チームやメンバーによっては、会議で初めて内容を確認されたり、仮説を持ち寄らず、場当たり的に複数人から操作を求められる・・・といったこともありました。

なるべく公式サポートを使わずにエラーを解決できるのがベターですので、今回のお話が皆様にもご参考になれば幸いです。

Amazon RedshiftとGoogle Cloudの連携

クライアント様がAWSからGoogle cloudにクラウド移管をご検討中で、AmazonのDWHであるRedshiftから、Google CloudのDWHであるBigQueryにデータ移管を準備していました。

RedshiftからBigQueryに連携する方法はいくつかありますが、今回のご要望の場合、BigQueryのデータ転送APIであるBigQuery Data Transfer Service(DTS)を使うことが最も簡単です。

DTSによるデータ連携は、Redshiftへの直接連携ではなく、下図のようにAWSのクラウドストレージS3を介して連携されます。

DTSでRedshiftに連携すると、S3を介して連携。S3はステージング領域として使用。

Amazon Redshift からスキーマとデータを移行する

この設定には、AWS側の情報やアクセス権限等が必要です。

クライアント様は代理店様を通じてAWSをご契約されており、AWSの管理も代理店に任せておられました。

クライアント様にお願いし、代理店様から情報一式をいただきましたが、Amazon IAM ユーザーの情報が見当たりませんでした。

クライアント様に確認したところ、IAMユーザについてはクライアント様もお持ちでなく、わからないとのことでした。

そこで、代理店様に確認したところ、代理店様の社内規定により、クライアント様や弊社にはIAMユーザーを引き渡せないとの回答でした。

一般的には、委託元もIAMユーザを使えるのですが、クライアント様と代理店様の契約上の理由とのことで、予定していたDTSによるデータ連携を断念しました。

DTS以外でRedshiftとBigQueryを連携

DTS以外でもRedshiftとBigQueryを連携できます。

網羅できておりませんが、例えば、以下の方法があります。

一番上のDTSは、AWSのIAMユーザーが必要なため、断念した方法です。

方法AWS IAMユーザー
BigQuery Data Transfer Service(DTS)必要
BigQuery Omni必要
Cloud Data Fusion不要

2つ目のBigQuery Omniは、AWSのS3を外部データソースとしてBigQueryから参照し、SQLを実行できるものです。

RedshiftからS3へのデータコピーは必要ですが、BigQueryへのデータコピーは不要です。

しかし、この方法もAWS IAMユーザーが必要で、今回の要件を満たしません。

また、現在、東京リージョンに非対応です。

クライアント様にご相談したところ、納期が最速で、安定稼働できることをお求めでしたので、Cloud Data Fusionで進めることになりました。

Cloud Data Fusionは、バックエンドでクライアント様専用の仮想サーバを立ててパイプラインを構築するようなもので、時間課金のETLツールです。

1年間利用すると、現在の為替レートで約200万円課金されますが、今回のご要望のように、クラウド移管に際して一時利用であれば、デフォルトで用意されているGoogle Cloud の月間無償枠で利用できます。

チュートリアル通りに進るとエラーになる

チュートリアルを見ると、あらかじめ、AWSのJDBCドライバーをCloud Data Fusionにアップロードしておく必要があります。

HostやPortなど、その他の必要な情報をクライアント様・代理店様から入手し、設定しました。

Cloud Data Fusionでは、設定が正しいか、デプロイ前にVaridateボタンを押下すると検証できます。

ところが、ボタンを押下したところ、Read timed out という見慣れないエラーが出ました。

一時的なものかと思い、何回か試しますが、結果は変わりません。

AWS側のマニュアルを見ると、JDBCドライバーのオプションとして、timeoutに関する設定を変更できるようです。

そこで、Cloud Data Fusionでこれらの変数を設定して、timeoutを無効にしました。

0(無効)、7200秒(2時間)でtimeoutパラメータを設定

しかし、結果は変わりません。

Read timed outでタイムアウトエラーになります。

チュートリアルどおりに進めているのにデプロイできずエラーになります。

ここで、解決策が尽きてしまいました。

エラーメッセージから仮説をたて試す

Read timed outというエラーメッセージからすると、Redshiftにデータを参照している際に発生するエラーのようです。

一般的には、データ容量が大きくなるほど、連携に必要な時間も長くなります。

カラム(列)が増えると、データ量も急激に増え、時間も長くなります。

そこで、1カラムだけ連携したところ、Varidateが成功し、デプロイできました。

次に、カラムを2カラムで試すと、Read timed outのエラーになりました。

どうやら2カラム以上だとTimeoutするようです。

そこで、レコード数がどの程度までなら、2カラムでもデプロイできるか確認することにしました。

10レコード程度で2カラムのサンプルデータをRedshiftに用意し、Varidateしたところ、Timeoutしました。

デプロイに成功した1カラムのデータは、1000レコード以上あります。

Timeoutした2カラムのサンプルデータは10レコードです。

このTimeoutエラーは、データ量ではなく、設定など別の理由が原因と仮説を立てました。

どの設定が原因か特定するため、1つずつ設定内容を変えてみることにしました。

例えば、JDBC接続に必要なAWS側のパスワードを、故意に1文字減らしました。

そうすると、エラーメッセージが変わり、Timeoutは表示されません。

これにより、パスワードは正しく、パスワード以外の方法が原因であるこことがわかります。

このような地味なチェックを進めたところ、Output Schemaを自動判定させず、手動入力してからVaridateすると、デプロイできました。

チュートリアルではVaridateで自動判定するOutput Schema。今回の事例では、この機能が原因でエラーに。

チュートリアルでは、手動入力ではなく、Varidateで自動判定させますので、思いもよりませんでした。

Google Cloudのチュートリアル通りに進めてもエラーになる場合、このように進めると突破できる可能性があります。

プレビュー環境の場合、チュートリアルが実態にそっていない傾向がありますので、より一層ご留意ください。

・エラーメッセージから仮説を立て試す
・チュートリアルに記載のないことも試す
・特に、プレビュー環境の場合、チュートリアルが実態にそっていない傾向があることを知っておく

Google Cloud開発お承ります

datacompanyでは、お客様のご予算・環境に応じたクラウド開発を承ります。

お困りごとがございましたら是非ご相談ください。

お問い合わせフォーム

SalesforceとBigQueryを連携 プレビュー環境で年間200万円削減

SalesforceとBigQuery連携
プレビュー環境で年間200万円削減

・Cloud Data FusionからBigQuery Data Transfer Serviceに切り替え
・Cloud Data Fusionの年間コスト200万円を削減
※執筆当時の情報です。Basic月間利用費$1,100、為替レート150円で計算したものです

「SalesforceとBigQueryを連携したい」というご要望が多いことから、このページをご覧の皆様も、「あること」にお困りではないかと思います。

それは「連携コストが高すぎる」ことです。

Cloud Data Fusionは利用費が高い

SalesforceとBigQueryを連携する方法はいくつかありますが、最も簡単でメジャーな方法はCloud Data Fusionです。

Cloud Data Fusionは、外部ソースとGoogle Cloudを連携できるノーコードツールで、ETL / ELT パイプラインを簡単に構築できます。

Cloud Data Fusion公式

しかし、ノーコードで簡単にできるものの、本番運用に適したBasic以上の利用料は月間約$1,100~と高額で、$1=150円として月16.5万円、年約200万円もかかります。

しかもこの料金、連携するデータ量が0ゼロであっても発生します。それは、Cloud Data Fusionの仕組みに理由があります。

Cloud Data Fusionでパイプラインを構築するためには、最初にインスタンスを立てなければなりません。

皆様専用の仮想サーバをGoogle Cloud に1つ立てるようなものとイメージいただければと思います。

このインスタンスが時間課金となっており、連携するデータ量が0ゼロであっても料金が発生するというわけです。

Cloud Data Fusion料金公式

連携を開始してから、しばらくの間、たいていのお客様はデータ連携を自動化できたことで喜ばれます。

しかし、事前に料金のことをわかっていたとしても、Googleからの高額請求が続きますと、「コストカットできないものか・・・」とご相談をいただくケースが多いです。

過去には「毎月1日だけインスタンスを作り、データ連携後にインスタンスを削除できないでしょうか」といったご相談をいただいたこともありました。

しかし、その方法では、Salesforceのデータ鮮度が落ちてしまい、本業への影響が大きく、断念されておられました。

SalesforceとBigQueryを直連携!

2024年3月Googleは「BigQuery と Salesforce Data Cloud 間の双方向データ共有が一般提供開始」とリリースしました。

これにより、Cloud Data Fusionなしで、SalesforceとBigQueryを連携できるようになりました。

現在、この機能はプレビュー版として提供されており、料金も無料です。

パイプラインを切り替えるだけで、年間200万円のコストが削減できます。

プレビュー版とは、本番リリース前のテスト環境のようなものです。

プレビュー版にはGoogleのSLAもございませんが、現時点で問題なく稼働しており、Cloud Data Fusionに戻されたお客様は一社様もございません。

Googleプロダクトステージ公式

Google Cloud開発お承ります

datacompanyでは、お客様のご予算・環境に応じたクラウド開発を承ります。

お困りごとがございましたら是非ご相談ください。

お問い合わせフォーム