概要
Pendoデータ同期を使用すると、開発者のリソースを必要とせずに、PendoサブスクリプションからSnowflakeアカウントにデータテーブルを直接コピーできます。
PendoデータはSnowflake環境に保存され、そこで管理されます。データ同期に関連するすべてのストレージおよびコンピューティングコストはお客様の負担となります。
前提条件
Snowflakeにデータを同期する前に、以下の要件を満たしていることを確認してください。
- Pendoの管理者権限を持っており、宛先を設定できること。
- Snowflakeで
SECURITYADMIN、SYSADMIN、ACCOUNTADMINの役割を持っていること。 - Snowflakeのネットワークポリシーを使用してIPアドレスを制限する場合は、PendoのパブリックIPアドレスからのトラフィックを許可します。
ステップ1. パブリックキーにアクセスする
Snowflakeの宛先を設定する前に、Pendoで利用可能なパブリックキーを取得する必要があります。
- Pendoで、[設定(Settings)]>[データ同期(Data Sync)]の順に進みます。
- [宛先に接続]を選択します。
- 宛先の一覧からSnowflakeを選択し、次に[次へ:宛先を設定]を選択します。
- [パブリックキー]フィールドはデフォルトで入力されています。これをコピーして後で使用します。
- Snowflakeアカウントの設定を行うには、このページを離れてください。
ステップ2. Snowflakeでエンティティを作成する
PendoがデータをSnowflakeアカウントに同期する前に、環境にアクセスしてデータを書き込むための安全な方法が必要です。Snowflakeで以下を行います。
Pendoによって生成されたパブリックキーに関連付けられたユーザーを作成します。
Pendo専用のウェアハウスとデータベースを作成します。
Snowflakeで以下の権限が付与される役割を作成します。チームの要件に合った名前を選んでください。
スキーマが作成されると、転送役割にOWNERSHIP権限が付与されます。継続的な同期の場合、転送役割に必要なのはスキーマに対するUSAGE権限のみであるため、スキーマ作成後に役割からスキーマOWNERSHIP権限を取り消すことができます。
以下の表は、必要な権限をまとめたものです。
| オブジェクト | 必要な権限 | 備考 |
| アカウント権限 | CREATE INTEGRATION | ストレージインテグレーションを作成するために使用される権限。Snowflakeの宛先が作成された後に、この権限は取り消すことができます。 |
| データベース権限(Pendoデータ用に作成されたデータベース内) | 使用 | |
| MONITOR | ||
| CREATE SCHEMA |
Pendoには、Pendoが作成したスキーマと、作成したスキーマ内のオブジェクトに対するOWNERSHIP権限があります。詳細については、「Snowflakeアーキテクチャへのデータ同期」の記事の「Pendoによって作成されたSnowflakeオブジェクト」のセクションをご覧ください。 CREATE SCHEMA権限は、必要な同期がすべて作成された後に取り消すことができます。追加の同期を作成するにはCREATE SCHEMAが必要です。 |
|
| ウェアハウス権限(Pendoデータ用に作成されたデータウェアハウス内) | 使用 | |
| MONITOR | ||
| スキーマ権限(Pendoデータ用に作成されたスキーマ内) | 所有権 | Pendoによってスキーマが作成された場合に許可されます。スキーマ作成時のみ必要。 |
| 使用 | スキーマ作成後の継続的な同期に必要です。スキーマが存在する場合、OWNERSHIPは取り消され、USAGEに置き換えられます。 |
- Snowflakeで、SQLワークシートを作成します。例えば、
Pendo-Data-Syncのような説明的な名前を付けてください。Snowflakeでのワークシート管理方法については、ドキュメントをご覧ください。 - 次のSQLスクリプトをワークシートにコピーして、Pendo転送サービスの役割、ユーザー、ウェアハウス、およびデータベースを設定します。ワークシートは、データベースやスキーマを参照する必要はありません。必要に応じてSQLスクリプトを修正してください。
-
CUSTOM_USER_NAME、CUSTOM_ROLE_NAME、CUSTOM_DATABASE_NAME、およびCUSTOM_WAREHOUSE_NAMEを任意の値に置き換えてください。これらの名前は後で提供する必要があるので、覚えておいてください。 - これらは識別子であるため、文字(A-Z、a-z)またはアンダースコア(_)で始まり、文字、アンダースコア、10進数(0-9)、およびドル記号($)のみを含む必要があります。
- Snowflakeは、入力の大文字と小文字に関係なく、これらの識別子を大文字で自動的に保存し解決します。
- 指定された
CUTOM_USER_NAMEは、Snowflake アカウント内の既存のユーザー名と重複しないようにしてください。 -
<YOUR_PUBLIC_KEY>をステップ1でPendoからコピーしたパブリックキーに置き換えてください。
-
SET role_name = 'CUSTOM_ROLE_NAME'; -- replace CUSTOM_ROLE_NAMEを任意の値に置き換えてください。この値をPendoの役割フィールドにコピーします(ステップ3)。
SET user_name = 'CUSTOM_USER_NAME'; -- CUSTOM_USER_NAMEをお好みの値に置き換えてください-名前が既存のユーザーと重複しないようにしてください
SET database_name = 'CUSTOM_DATABASE_NAME'; -- CUSTOM_DATABASE_NAMEをお好みの値に置き換えてください
SET warehouse_name = 'CUSTOM_WAREHOUSE_NAME'; -- CUSTOM_WAREHOUSE_NAMEをお好みの値に置き換えてください
USE ROLE securityadmin;
--転送サービスの役割を作成します
CREATE ROLE IF NOT EXISTS IDENTIFIER($role_name);
GRANT ROLE IDENTIFIER($role_name) TO ROLE SYSADMIN;
-- 転送サービスのユーザーを作成します
CREATE USER IF NOT EXISTS IDENTIFIER($user_name)
RSA_PUBLIC_KEY='<YOUR_PUBLIC_KEY>'; -- データ同期宛先設定ページで提供されている公開鍵で'<YOUR_PUBLIC_KEY>'を置き換えます
--新しいユーザーにデフォルト役割とウェアハウスを設定します
ALTER USER IDENTIFIER($user_name) SET DEFAULT_ROLE = $role_name;
ALTER USER IDENTIFIER($user_name) SET DEFAULT_WAREHOUSE = $warehouse_name;
ALTER USER IDENTIFIER($user_name) SET TYPE = service;
GRANT ROLE IDENTIFIER($role_name) TO USER IDENTIFIER($user_name);
USE ROLE sysadmin;
--Pendo転送サービスのウェアハウスを作成します
CREATE WAREHOUSE IF NOT EXISTS IDENTIFIER($warehouse_name)
warehouse_size = xsmall
warehouse_type = standard
auto_suspend = 60
auto_resume = true
initially_suspended = true;
--Pendoデータが転送されるデータベースを作成します
CREATE DATABASE IF NOT EXISTS IDENTIFIER($database_name);
--サービス役割にウェアハウスへのアクセスを付与します
GRANT USAGE, MONITOR ON WAREHOUSE IDENTIFIER($warehouse_name) TO ROLE IDENTIFIER($role_name);
--データベースにサービスアクセスを付与します
GRANT CREATE SCHEMA, MONITOR, USAGE ON DATABASE IDENTIFIER($database_name) TO ROLE IDENTIFIER($role_name);
USE ROLE accountadmin;
--インテグレーションを作成するサービス能力を付与します
GRANT CREATE INTEGRATION ON ACCOUNT TO ROLE IDENTIFIER($role_name);- スクリプトを実行してください。
Snowflakeウェアハウスのサイズ
データ同期に使用するSnowflakeウェアハウスのサイズは転送パフォーマンスに影響します。ほとんどの単一サブスクリプションの設定や初期テストでは、XSウェアハウスから始めることをお勧めします。大量のデータ、複数のアプリケーション、または複数のPendoサブスクリプションを同期する場合は、より大きなデータウェアハウスを使用するか、サブスクリプションごとに個別のデータウェアハウスを使用することを検討してください。
Snowflakeのウェアハウスのサイズや行動に関する詳細は、Snowflakeのドキュメントをご覧ください。
ステップ3. Pendoで宛先設定を完了する
ステップ 2 で作成したユーザー名、役割名、ウェアハウス名、データベース名、SnowflakeアカウントIDと組織IDをPendoに提供してください。
- Pendoで、[設定(Settings)]>[データ同期(Data Sync)]の順に進みます。
- [宛先に接続]を選択します。
- Snowflakeを選択し、次に[次へ:宛先を設定]を選択します。これにより、ステップ1でパブリックキーをコピーしたページが開きます。
- 該当するフィールドに以下を入力します。
-
USER_NAME。セットアップスクリプトの作成者であるUSER_NAME。これは、ステップ2の変数名
CUSTOM_USER_NAMEと一致する必要があります。 -
役割。セットアップスクリプトによって作成された役割。これは、ステップ2の変数名
CUSTOM_ROLE_NAMEと一致する必要があります。これはオプションであり、デフォルト値はPENDO_TRANSFER_ROLEです。役割は宛先が作成された時点で設定され、その後は変更できません。 - 組織名。これはSnowflakeのアカウント情報画面で確認できます。
- アカウント名。これはSnowflakeのアカウント情報画面で確認できます。
-
データベース。セットアップスクリプトによって作成されたデータベースの名前。これは、ステップ2の変数名
CUSTOM_DATABASE_NAMEと一致する必要があります。 -
コンピュートウェアハウス。セットアップスクリプトによって作成されたウェアハウスの名前。これは、ステップ2の変数名
CUSTOM_WAREHOUSE_NAMEと一致する必要があります。
-
USER_NAME。セットアップスクリプトの作成者であるUSER_NAME。これは、ステップ2の変数名
- [次へ:宛先を検証]を選択してください。これには数分かかる場合があります。
- 検証が完了したら、[次へ:データを選択]を選択してください。
- 有効化したいデータ転送を選択してください。アカウントのメタデータ、訪問者のメタデータ、そしてアプリケーション内のイベントデータから選択できます。
- PendoでSnowflake宛先を作成するには、[宛先を接続]を選択します。このステップには数分かかる場合があります。
-
データがSnowflakeに正常に転送されていることを確認するには、
METADATA$START_SCAN_TIMEを使用して、最後の転送がいつ実行されたかを確認します。例えば、以下のSnowflakeクエリを使用します。
SELECT METADATA$FILENAME, METADATA$FILE_LAST_MODIFIED, METADATA$START_SCAN_TIME FROM @PENDO_STAGE (file_format => PENDO_AVRO_FORMAT, pattern=>'.*[.]avro') LIMIT 100;これは、Snowflake環境にロードされた最新のファイルに関する詳細を返します。
データ転送
転送が有効になると、PendoはSnowflake環境の準備と定期的なデータロードのスケジュールを開始します。データ転送プロセスは以下のとおりです。
PendoはSnowflakeストレージインテグレーションを作成し、それを使用して有効化された各転送に対して外部ステージを作成します。
Pendoは、指定したデータベースに、アクティブ化された転送ごとにスキーマ、テーブル、およびプロシージャを作成します。
Pendoが夜間のデータ転送を有効化します。毎晩定期的な更新が行われ、前日のデータ、8日前の最終データ、および遡及的な更新が組み込まれます。
アカウントと訪問者を同期することを選択した場合、アカウント、訪問者、および関連するメタデータの完全同期がSnowflakeに同期されます。毎晩、新しいアカウントや訪問者、または既存のメタデータの更新が同期されます。
転送が有効化された後、提供したユーザーからCREATE INTEGRATIONおよびCREATE SCHEMA の権限が取り消されることがあります。今後、新たなデータ転送を有効にする場合は、ユーザーに再度CREATE SCHEMA権限を付与する必要があります。
データ転送は一度に1つのアプリごとに実行されます。多くのアプリでデータ同期を有効にしている場合、順次処理されるため転送に時間がかかることがあります。
注:アプリケーションごとに最大12か月分の履歴データを同期できます。この範囲内で開始日を設定するには、[設定]>[データ同期]>[同期の管理]に移動し、[利用可能開始日]列を使用します。さらに過去データが必要な場合は、Pendoサポートにお問い合わせください。
Snowflakeの宛先を更新する
既存のSnowflake宛先のユーザー、データベース、またはウェアハウスを更新するには:
- ステップ2で説明した手順に従って、更新したユーザー名、データベース名、またはウェアハウス名を使用してセットアップスクリプトを編集し、実行してください。
- Pendoで、[設定(Settings)]>[データ同期(Data Sync)]の順に進みます。
- [宛先を管理]を選択します。
- 宛先の関連フィールドを更新してください。
- [宛先を検証して更新]を選択してください。
注:宛先が作成された後は、Snowflakeオブジェクトが作成したロールに所有されているため、役割は変更できません。別の役割を使用するには、宛先を削除して新しい宛先を作成してください。
Snowflakeの組織またはアカウント名を更新するには、PendoでSnowflakeの宛先を削除し、新しい宛先を作成する必要があります。
- Pendoで、[設定(Settings)]>[データ同期(Data Sync)]の順に進みます。
- [宛先を管理]を選択します。
- [宛先を削除]を選択します。
- 宛先の削除を確認するために[削除]を選択してください。
削除後は、データ転送が自動的に無効になります。
新しいSnowflakeの宛先を設定するには、ステップ1〜3を繰り返します。
複数のPendoサブスクリプションを使用してSnowflakeへのデータ同期を設定する
複数のPendoサブスクリプションがあり、各サブスクリプションごとにSnowflakeへのデータ同期を設定したい場合、PendoサブスクリプションごとにSnowflakeで固有のユーザーを作成する必要があります。これは、Pendoの各サブスクリプションが独自のパブリックキーを生成し、Snowflakeユーザーは一度に1つのパブリックキーのみに関連付けられるべきであるためです(キーのローテーション中は一時的に2つのキーに関連付けられる場合もあります)。
ただし、他のSnowflakeリソース(役割、データベース、ウェアハウス)をサブスクリプション間で共有することで、管理を簡素化し、コストを削減できます。
各Pendoサブスクリプションのデータは、PendoがSUB_{SUBID}_APP_{APPID}として自動的に作成する個別のスキーマに分離されます。