【翻訳】「増分同期」による CRMA 外部コネクタの最適化

0
(0)

原文

私たちは 皆、 データ が超高速で 更新されることを望んでいます。 更新が 遅いということは、 データ が古くなり、 エンドユーザー から 「一体何が起こっているのか」 という メッセージが届く可能性さえあります。 そのため、 外部データ ソースへの接続を高速化する方法があれば、 是非とも知りたいですよね。

外部 データ ストア 接続 ( Snowflake や S3 など) を構成することで、 データ マネージャ でこれらの接続との 「増分同期」 を実現できます。この記事では例として Snowflake 接続に焦点を当てていますが、表示される機能は S3 などの他の外部データ ストアにも適用されます。 

増分同期とは何でしょうか?

増分同期では、最新の正常な同期を基準にして、新規、更新、および削除されたレコードのみが取得されます。このデータ更新方法では、データストアから取得されるレコードが少なくなり、更新が速くなります。以下の例を検討してください。CRMA には、最初に 3 行のデータ セットがあります。ただし、外部データベースには、緑色の新しい行「Taylor」があります。増分同期では、完全同期のように 4 行すべてをコピーするのではなく、新しい 1 行「Taylor」のみを CRMA データセットに追加します。

現実世界では、1 桁の行数のデータを扱うことはありません。おそらく、数千行、場合によっては数百万行のデータを扱うことになります。したがって、更新ジョブの処理を、たとえば 1,000 万行から 80,000 行に減らすことができれば、データ更新がより高速になり、リソース効率も向上します。

CRM Analytics で外部データを使用してこれを実現するには、CRM Analytics のデータ同期フィルター アプローチ、外部接続カスタム ビュー (Snowflake) アプローチ、そして最後にベータ版 (GA Summer ’25) の既存データセット追加アプローチという 3 つのアプローチを検討します。まず、外部接続を確立しましょう。

外部データ接続の設定

CRM Analytics の外部コネクタに精通している場合は、データ マネージャー でオブジェクトに接続するときにオプションとして「完全同期」しか選択できないことをご存知でしょう。心配はいりません。外部接続を最適化して増分同期を実現できます。例を使って始めましょう。まず、Snowflake から CRM Analytics にデータを複製する必要があります。これを行うには、組織で データ マネージャー に入り、Snowflake 入力コネクタを構成します。

コネクタ ウィンドウの各引数の詳細については、こちらのヘルプ ドキュメントを参照してください。設定が完了すると、Snowflake 組織からビューとテーブルの選択が表示されます。この例では、すべての注文が格納されているデータ テーブル GLOBALORDERS に接続します。

これで、接続されたオブジェクトを保存できます。Snowflake 上の「GLOBALORDERS」テーブルに接続すると、テーブルを CRM Analytics のデータセットとして登録するための初期レシピを実行できます。ここで、データセットを Analytics Studio のアプリ (My Private App ではありません) に登録するようにしてください(訳者注:Snowflake接続オブジェクトをレシピを使ってデータセットとして出力すること??)。これは、Snowflake から CRMA のデータ ストアへの最初の完全なデータ コピーであるため、非常に重要です。ここから、更新ごとにデータを完全にコピーするのではなく、新しい行を段階的に追加できます。

素晴らしい! これで、Snowflake 接続が設定され、Snowflake のテーブルが Analytics Studio のアプリでデータ セットとして複製されました。ここで定義したとおりに同期とレシピを実行すると、毎回完全同期になります。フィルタリングによって、各同期を増分同期として設定できます。

考慮すべき主なアプローチ タイプは 2 つあります。データ同期フィルター アプローチと、外部データベース アプローチのカスタム ビューです。これは、更新ロジックをすべて CRM 分析アーキテクチャで定義するか、外部データストアのアーキテクチャで定義するかという問題です。学習のために、両方について説明します。

まず、Snowflake のデータ セットを確認します。2024 年の新しい注文が届き、GLOBALORDERS テーブルに表示されているようです。このデータを CRM Analytics に同期する必要があります。

データ同期フィルターアプローチ

大まかに言うと、日付フィールドのデータ同期フィルターを使用して、今年のデータセットのみを取得できます。次に、今年の行を CRMA の既存のメイン データ セットに追加します。重複行を処理するには、フィルター ノードを使用して、現在の年の初期データセットからデータを削除します。

まず、Snowflake 入力接続に進みます。そこから、GLOBALORDERS テーブルを選択し、[データ同期検索条件 (Data Sync Filter)] タブに移動します。これにより、このテーブルの同期の実行時にデータ ストアに渡され、データ テーブルをクエリする際の WHERE 引数の一部として実行されるフィルターを定義できます。

同期を定義して、Order_Date が 2024 以降の行のみをテーブルから取得するようにしました。フィルターを Snowflake インスタンスのコンテキストとロジックで定義していることがわかります。これは、フィルターが Snowflake で計算されるためです。そのため、Snowflake テーブル内のフィールドの API 名を使用し、Snowflake の日付ロジックに従う必要があります。同期を実行して、データ同期フィルターをテストできます。

同期は正常に実行され、3 行のみが取得されたことがわかります。これらは、Snowflake テーブルからの 2024 件の注文の 3 行です。すばらしい! これで、レシピを使用して、これらのデータ行をデータセットに自動的に追加できるようになりました。

このレシピは、まず CRMA からデータセットを読み取り、Append ノードを介してデータ同期フィルターを定義した GLOBALORDERS テーブルから新しい行を追加し、新しいデータセットを出力して最初のデータセットを上書きすることで、既存のデータセットを上書きします。重要な点は、追加する前に 2024 のデータを除外することです。これは、データセット内の重複を避けるためです。このレシピを保存して実行すると、Analytics Studio のデータセットに戻って、Snowflake テーブルと 1 対 1 で一致していることを確認できます。レシピの実行をスケジュールして、よりパフォーマンスの高い同期が実現したことを安心して知ることができます。

スノーフレークアプローチのカスタムビュー

あるいは、ビューを使用して Snowflake にロジックを適用することもできます。ここでは、新しいビューを作成し、最も関連性の高いデータのみを表示するロジックを適用して、CRMA のデータ マネージャーでそのビューに接続できます。

まず、Snowflake でカスタム ビューを作成します。ビューの SQL ステートメントの WHERE 句で、フィルター ロジックを適用して Snowflake のデータをサブセット化します。このビューでは、ORDERDATA テーブルから過去 6 か月の注文データのローリング ウィンドウを取得しています。

データ プレビュー ペインで WHERE 句を確認できます。元のデータセットを見ると、この注文 167533 のみが過去 6 か月間に発行されたことがわかります。

ビューの見栄えが良くなったので、CRMA のデータ マネージャーに移動して、Snowflake 接続に新しいオブジェクトとして追加できます。

新しいオブジェクトを保存したら、ビューから CRMA データセットに新しい行を段階的に追加するレシピを作成できます。

このレシピのロジックは、上で説明した最初のデータ同期フィルター アプローチのロジックに従います。ただし、2 つの重要な違いがあります。1 つ目は、CRMA データセットに追加するための入力ノードとして Snowflake のカスタム ビューを使用することです。2 つ目は、フィルター ノードがビューで定義した WHERE 句ロジックと一致していることです。これは、CRMA の行が重複しないようにするためです。ビューはデータをフィルターして過去 6 か月の行のみを取得するため、CRMA の過去 6 か月のデータは削除して、最新の情報で更新できるようにします。相対日付を使用しているため、ここでは Snowflake 組織のタイム ゾーンが Salesforce 組織のタイム ゾーンと一致していることを確認する必要があります。一致しない場合は、Snowflake の WHERE 句とレシピのフィルター ノードを調整して一致させます。

新しい最適化された追加機能を使用したスノーフレークアプローチ

最もパフォーマンスの高いアプローチは、レシピで新しい既存データセット (追加) 出力ノードを使用することです (執筆時点ではベータ版、2025 年夏に GA を予定)。この新機能により、レシピ実行ごとにデータの行数を最小限に抑えることができます。たとえば、CRMA のグローバル注文データセットが 10,000,000 行で、Snowflake ビューの最新の注文データが 50,000 行だった場合、このアプローチではレシピ実行ごとに 50,000 行のみが読み込まれ、処理されます。以前のアプローチでは、レシピ実行ごとに新しい 50,000 行のデータセットと 10,000,000 行のデータセットが読み込まれ、10,050,000 行のデータを処理する必要がありました。これにより、レシピ実行時間が長くなります。そのため、この新しい追加アプローチははるかに高速で、テストではレシピ実行時間が 60% 短縮されました。

では、始めましょう。例として、Snowflake から過去 7 日間の注文データを取得する新しいスノーフレーク ビューを作成しました。次に、データ マネージャーの Snowflake 入力接続でこの新しいビューに接続しました。

入力ノードをスノーフレーク ビュー、出力ノードを新しい出力ノードにして、新しいレシピを作成します。このサンプル レシピには変換、結合、その他の操作は含まれていませんが、実際の使用ケースではこれらを含めることができます。

非常に洗練されたレシピを定義しました。入力ノードは Snowflake から 7 日分のデータを取り込み、新しい出力ノード タイプはそれらの新しいデータ行を CRMA のメインの Global Orders データセットに追加します。そのノードをクリックして、何が起きているか確認してみましょう。

ここでは、新しい「既存のデータセット (追加)」出力タイプを選択していることがわかります。また、出力ノードで「データセットに追加」も定義しました。これは、上記の「Snowflake アプローチのカスタム ビュー」の以前の方法のレシピのロジックに実質的に従っていますが、重要な利点があります。この新しいレシピが実行されるたびに、レシピ エンジンによって Snowflake カスタム ビューのみが読み込まれるため、ここでは CRMA からメインの Global Orders データセットは読み込まれません。行が少ないほど、レシピは高速になります。しかし、これまでのレシピで行ったように、重複行を削除するフィルターを含めないのはなぜでしょうか。巧妙な更新スケジュールのおかげで、そのフィルター ノードは必要ありません。

ここで、Data Manager で Snowflake 接続データの同期を 7 日ごとに同期するようにスケジュールします。例として 7 日間の期間を使用していますが、これはユースケースに応じて拡大または縮小できます (Snowflake のビューで 1 日フィルター、Data Manager で毎日データ同期を更新)。

Snowflake データの同期をスケジュールしたので、外部接続の同期後にレシピを実行するようにスケジュールできるようになりました。

これは、すべての外部接続が同期された後に実行されますか? いいえ。レシピで使用する外部接続のみです。Snowflake_Input 接続のみを使用したため、このレシピはその接続が同期されたときにのみ実行されます。ズームアウトしてみましょう。これで、Snowflake ビューが過去 1 週間 (7 日間) のデータをクエリし、データ マネージャー接続が毎週同期し、レシピがメインの Global Orders データセットに毎週行を追加するようになりました。これで、自動化が機能し、データセットが現在のデータで自動的に更新されるのを確認できます。

考慮事項

外部データ接続を最適化するには、ロジックを使用してデータをサブセット化する必要があります。この場合、このロジックを CRMA 側で完全に処理する方法、または外部データ ストア (Snowflake) で大部分を処理する方法を検討しました。また、新しい出力ノード タイプを使用して最もパフォーマンスの高いアプローチを実現する方法についても検討しました。

どのアプローチが最も理にかなっているかは、あなたとあなたの組織次第です。フィルターの複雑さ、メンテナンスとガバナンス、計算時間、コストなど、いくつかの要素について検討する必要があります。とはいえ、分析に必要なデータだけを取り込むように常に注意してください。クエリのコストと複雑さを軽減する最も確実な方法は、無関係なデータを除外することです。

CRM Analytics の外部データ接続の詳細については、こちらの記事をご覧ください

How useful was this post?

Click on a star to rate useful the post is!

Written by

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top