Snowflakeイベントテーブルの最適化ガイド
このページで学べること
このガイドでは、Klaviyoのeventsテーブルに対して推奨されるSnowflakeの最適化を2つご紹介します。これらの変更は、広範なテーブルスキャンを削減し、同期時にSnowflakeが関連するイベントレコードと時間範囲に焦点を当てられるようにすることを目的としています。
- idでの等価検索に対して検索最適化を有効にします。これには、Snowflake Enterprise Edition以降が必要です。
- イベント日付でイベントテーブルをクラスタリングしてください。これはすべての Snowflake エディションで機能し、さらに検索の最適化ステップも完了できるかどうかにかかわらず、実施してください。
始める前に
次の内容をデータプラットフォームチームに確認してください:
- SnowflakeアカウントがEnterprise Edition以上かどうかにかかわらず、手順3(検索最適化)を完了する予定がある場合は該当します。手順4のクラスタリングはSnowflakeのすべてのエディションで機能し、必ず実施してください。
- イベントテーブルを変更し、テーブルレベルの最適化機能を有効にする権限があります。
- ご利用の環境におけるKlaviyoイベントテーブルの完全修飾名を把握しています。
- イベントテーブルにはid列が含まれており、イベントのタイムスタンプ列はDATETIMEという名前であるか、同等の名前になっています。
- 特に現在履歴同期が実行中の場合、計画されたテスト期間があります。
このガイドに記載されているテーブル名は例です。<EVENTS_TABLE>を、アカウント内の正確なデータベース名、スキーマ名、テーブル名に置き換えてください。
手順1:イベントテーブルを特定して検証します。
- 必要な権限を持つロールを使用して、Snowflakeワークシートを開きます。
- Klaviyo外部連携で使用されている正確なテーブル識別子を確認してください。
- テーブルに、想定どおりのルックアップ列とタイムスタンプ列が含まれていることを確認してください。
例:
DESCRIBE TABLE <EVENTS_TABLE>;次を確認してください:
- id は、等価検索に使用されるイベント識別子です。
- DATETIME はイベントのタイムスタンプです。もしくは、クラスタリング式で使用する同等のタイムスタンプ列を特定してください。
手順2:ベースラインを取得する(任意)
変更を適用する前に、後で結果を比較できるだけの情報を記録してください:
- 現在の同期ステータスと所要時間。
- 同期が履歴同期か増分同期かどうか。
- 外部連携で使用されるSnowflakeウェアハウス。
- 最近の同期アクティビティで使用された概算クレジットまたは計算量。
- Snowflake Query Historyにある、関連するクエリID、エラーメッセージ、またはタイムスタンプ。
履歴同期の実行に通常よりも大幅に時間がかかっている場合は、一時停止または再開する前にKlaviyoと連携してください。
ステップ3:イベントIDで検索最適化を有効にする(任意)
検索最適化を使用するには、Snowflake Enterprise Edition 以上が必要です。アカウントが Standard Edition の場合は、この手順をスキップしてステップ 4 に進んでください。クラスタリングにはエディション要件がなく、必ず実施してください。
プレースホルダーを実際のテーブル名に置き換えたうえで、次のステートメントを実行してください:
ALTER TABLE <EVENTS_TABLE>
ADD SEARCH OPTIMIZATION ON EQUALITY(id);たとえば、テーブル名がklaviyo_eventsの場合:
ALTER TABLE klaviyo_events
ADD SEARCH OPTIMIZATION ON EQUALITY(id);これにより、idの等価述語に対して最適化されたアクセスパスが作成され、ターゲット検索のためにSnowflakeがスキャンする必要があるeventsテーブルの量を減らすことを目的としています。
Search Optimizationがidに対してすでに有効になっている場合、重複する設定を作成しないでください。代わりに、Snowflake管理者に既存の設定を確認していただいてください。
手順4:eventsテーブルに日付ベースのクラスタリングを追加する
イベントタイムスタンプの日付部分に基づいてクラスタリングキーを適用します:
ALTER TABLE <EVENTS_TABLE>
CLUSTER BY (TO_DATE(DATETIME));例:
ALTER TABLE KLAVIYO_EVENT
CLUSTER BY (TO_DATE(DATETIME));手順1で確認したタイムスタンプ列を使用してください。列の名前が異なる場合は、その列を式内で置き換えてください。
日付ベースのクラスタリングは、Snowflakeが関連しない時間範囲をプルーニングして、イベントテーブル全体をスキャンしないようにすることを目的としています。
ステップ 5:Snowflake のメンテナンスが完了するのを待機する
両方のステートメントが成功した後:
- Snowflakeが検索およびクラスタリング構造を構築または維持できるよう、時間を確保してください。
- DDLステートメントの直後に、最初のクエリの結果をすぐに判断しないでください。
- テーブルのメンテナンスが行われている間も、ウェアハウスの使用状況とクエリパフォーマンスの監視を継続してください。
必要な時間は、テーブルのサイズ、既存のデータレイアウト、Snowflakeのワークロードによって異なります。
ステップ 6:Klaviyo に通知する
次の詳細をKlaviyoに送信してください:
- 完全修飾されたイベントテーブル名。
- 各ステートメントが適用されたタイムスタンプ。
- idで検索最適化が有効になっていることの確認。
- 日付ベースのクラスタリングが適用されたことの確認。
- 同期に使用される Snowflake のアカウント/リージョンとウェアハウス。
- 関連する同期ID、クエリID、またはエラーの詳細。
Klaviyoは、イベントテーブルの最適化を最大限に活用するために、エクスポート側の設定が必要かどうかを確認します。
ステップ 7:制御された検証同期を実行する(任意)
可能であれば、大規模な履歴バックフィルを再開する前に、増分同期またはそれ以外の限定的な同期で検証してください。
新しい実行結果をステップ2のベースラインと比較してください:
- 処理を開始するまでの時間。
- 同期の合計所要時間。
- Klaviyo UIでの進捗の動作。
- Snowflakeでスキャンされたバイト数。
- 消費されたウェアハウスクレジット。
- 同期が再試行や作業の繰り返しなしで完了するかどうか。
最も強いシグナルは、単一のメトリックだけを個別に見るのではなく、同期時間とSnowflakeのコンピューティングの両方で改善が見られることです。
ステップ8:次回の同期を監視する
単一の実行に依存するのではなく、その後の複数回の同期を追跡してください。次を確認してください:
- イベントテーブルが拡大しても、コンピューティングが安定しているか、または低下していること。
- 履歴データに対する広範なスキャンが減少します。
- より予測可能な同期の所要時間。
- 失敗したクエリや繰り返しクエリの増加はありません。
可能であれば変更前後のクエリIDを含め、結果をKlaviyoと共有してください。
トラブルシューティング
検索の最適化ステートメントが失敗しました
次を確認してください:
- Snowflakeアカウントがその機能をサポートしています。
- 実行ロールには、テーブルを変更する権限があります。
- テーブル名とid列が正しい。
- リクエストされた列に対して検索最適化はまだ構成されていません。
クラスタリングのステートメントが失敗する
次を確認してください:
- テーブル名が正しいこと。
- タイムスタンプ列が存在し、互換性のあるタイムスタンプまたは日付の値になっていること。
- 実行ロールはテーブルを変更できます。
- クラスタリング式が実際のイベントタイムスタンプフィールドと一致しています。
同期が依然として遅い、または停止しているように見える
Klaviyoに送信:
- 使用された正確なテーブル定義とステートメント。
- 各変更が適用された時刻。
- 同期の開始時刻と現在のステータス。
- SnowflakeのクエリIDとウェアハウス使用量。
- UIのステータスが進行していないことを示す証拠がある。
最初の同期で改善しないという理由だけで最適化を削除しないでください。まず、Snowflake が該当するメンテナンスを完了していること、そして Klaviyo がエクスポート側の設定を検証済みであることを確認してください。
完了チェックリスト
- 正しいイベントテーブルが特定されました。
- id列とイベントタイムスタンプ列を確認しました。
- ベースラインの同期メトリックとコンピューティングメトリックが記録されました(任意)。
- id の等価検索で検索最適化を有効にします(任意)。
- イベント日付でクラスタリングされたイベントテーブル。
- Klaviyoに変更が通知されました。
- 制御された検証同期が完了しました。
- フォローアップ同期のパフォーマンスと、レビューしたコンピューティング(任意)。