CData Syncのカラムマッピングを使ってSnowflakeの既存テーブルに複数データソースからの書き込みを試す

2020.03.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。
データインテグレーション事業本部プロダクト営業部プリセールススペシャリストの兼本です。

2020年3月10日にCData Syncの新しいバージョンが発表されました。このバージョンでは同期レコードの突合機能、カラムマッピング機能、ジョブ実行前のプレビュー機能、およびデータ同期先の追加などの機能拡張が行われています。

このエントリでは、CData Syncを使用してSalesforceとZendeskという2つのサービスに格納されているデータを抽出し、Snowflakeの既存テーブルにインサートする方法をご紹介します。

CData Sync

CData Syncは、CData Software社のクラウドデータパイプライン製品です。
基本的な利用方法や製品の入手方法、インストール方法については、以下のエントリでも触れていますので、合わせてご参照ください。

Snowflake

Snowflakeはクラウドベースのデータウェアハウスです。Snowflakeに関しては以下のシリーズをご参照ください。

今回は事前にSnowflake側に「SYNC_USER」という名称のテーブルを作成しておき、このテーブルに対してSalesforceとZendeskから抽出したデータをインサートします。

カラム名 説明
UNAME ユーザ名
EMAIL ユーザのメールアドレス
SOURCE データソース名

CData Syncの設定

設定の詳細に関しては、上述の過去エントリにお任せするとして、今回は以下3つの接続を事前に作成しました。

SalesforceとZendeskに関しては特に問題ありませんでしたが、Snowflakeに関して1点だけ注意点を記載しておきます。
今回の検証では、Snowflake側でCData Sync用に「CDATA_SYNC」というロールを用意しました。このロールは私のアカウントのデフォルトロールではないため、CData側でSnowflakeの接続設定を作成する際にロールを明示的に指定する必要があります。
ロールはSnowflake接続の基本設定ページではなく、Advancedページの「Other>Role Name」という設定に指定する必要がありますので、ご注意ください。

新機能1:データプレビュー

まずはZendeskに接続するジョブを作成します。
ジョブ定義のページで新しいジョブを作成し、ソースにZendesk、同期先にSnowflakeの接続を指定します。

ジョブ設定の「テーブルの追加」ボタンを押下することで、連携するテーブルを指定するダイアログが表示されます。

テーブルを追加ダイアログで同期したいテーブルを選択し、選択したテーブルを追加ボタンを押下します。 UsersテーブルにはZendeskに登録されているユーザの情報が保存されています。

Snowflakeにデータを同期する際、新規にCData用のテーブルを作成する場合は何もする必要はありませんが、すでに作成済みのテーブル(今回の場合はSYNC_USERテーブル)にデータを同期したい場合は、テーブルレプリケーション設定の一般タブを開き、テーブル名の指定で「既存のテーブルにマップ」を選択して、テーブルを指定します。

テーブルレプリケーション設定のプレビュータブを使うと、データを確認することができます。

全データを取得することなく、プレビューを確認できるのはうれしい機能です。さて、今回の場合はすべてのカラムのデータは必要ありませんね。
このような場合は、もう一つの新機能であるカラムマッピングを使用します。

新機能2:カラムマッピング

レプリケーション設定のカラムマッピングタブでは、不要なカラムを除外したり、カラムのマッピングを指定できます。
下図のフィールドをつなぐ矢印がカラムのマッピングを意味しており、矢印をクリックすることでマッピングを解除することができます。

ソースに存在しないカラムを追加して、以下のように固定の文字列を指定することも可能です。

今回は使用していませんが、Advancedタブではソースに対してフィルタリング条件を指定することもできます。

ここまでの操作によって、ソースの不要なカラムを削除し、足りないデータを補うことができました。

同様にSalesforceからSnowflakeへのデータ連携ジョブを作成します。Salesforce側ではContactテーブルに必要な情報が含まれていたため、Contactテーブルを同期します。

弊社の環境では顧客名のカラムが姓と名で分かれていたため、CONCAT関数を使用して文字列の連結をしています。

なお、Snowflakeでは、テーブル名やカラム名はCase Sensitiveで大文字小文字を区別するため、CData Syncでこれらの指定をする際には注意する必要があります。(最初、大文字小文字の違いを意識しておらず、何度かエラーになりました。)

ジョブを保存して実行します。ジョブが正常に完了すると、同期したデータ件数が出力されます。

Snowflake側で同期結果を確認し、レプリケーションが正しく行われたことが確認できました。

まとめ

いかがでしたでしょうか。
CData SyncはノーコーディングでSalesforceやZendeskなどの様々なウェブサービス、SnowflakeやAWS Redshift、Google BigQueryなどのデータベースとの連携を実現でき、さらに新機能のデータマッピングに機能によって、より柔軟なデータ連携も可能となりました。
このようなデータパイプライン製品は、複数のサービスを組み合わせて利用されている企業にとっての救世主になるかもしれないですね。

最後まで読んでいただきありがとうございました。