Snowflake
Snowflakeは、クラウド向けに構築されたリレーショナルANSI SQLデータウェアハウスです。 その独自のアーキテクチャにより、従来のデータウェアハウスよりも高速なパフォーマンス、使いやすさ、優れた柔軟性を実現します。
概要
- WorkatoでSnowflakeに接続するには、OAuth 2.0またはキーペア認証を使用できます。
- SnowflakeインスタンスにIPアドレスに基づいてアクセスを制限するネットワークポリシーがある場合は、Workato IPアドレスを許可リストに登録する必要があります。
- Snowflakeコネクターは、SELECT、INSERT、UPDATE、DELETEなどの操作をサポートしています。
- カスタムロールを作成して、Workatoのアクセスを、レシピの構築に使用するSnowflakeオブジェクトのみに制限します。
- SQLインジェクションに対するセキュリティを確保するために、パラメーターを
WHERE条件と組み合わせて使用できます。
ユーザー名/パスワード認証の廃止
Snowflakeは、ユーザーの単一要素パスワード認証を2026年10月までに廃止する予定です。 詳細については、Snowflakeの公式廃止告知を参照してください。
この日付より前に、既存のすべてのユーザー名/パスワードコネクションをOAuth 2.0またはキーペア認証に移行することを強く推奨します。 既存のユーザー名/パスワードコネクションは、廃止日まで引き続き動作します。
ユースケース
Snowflakeを既存のアプリと統合して、強力なデータワークフローを構築します。 Snowflakeコネクターを使用すると、データ検証の自動化、リード追跡の改善、意思決定の強化を行うことができます。 Snowflakeプロセスを効率化する方法については、ユースケースをご覧ください。
- JavaScriptを使用してSalesforceの連絡先情報を検証し、データをSnowflakeにアップサートします。
- MarketoリードアクティビティからSalesforceタスクとSnowflake行を作成します。
コネクション設定
Snowflakeコネクターは、次の認証タイプをサポートしています:
OAuth 2.0認証
OAuth 2.0認証を使用するには、Snowflakeでカスタム統合を作成し、クライアントIDとシークレットを生成する必要があります。
OAuth 2.0認証のSnowflake設定
Snowflakeでカスタムインテグレーションを作成し、クライアント認証情報を取得するには、次の手順を実行します:
Snowflakeで次のSQLコマンドを実行して、カスタムOAuthインテグレーションを登録します:
CREATE SECURITY INTEGRATION WORKATO_OAUTH
TYPE = OAUTH
ENABLED = TRUE
OAUTH_CLIENT = CUSTOM
OAUTH_CLIENT_TYPE = CONFIDENTIAL
OAUTH_REDIRECT_URI = 'https://www.workato.com/oauth/callback'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE;必要な権限
このコマンドを実行するには、ACCOUNTADMINロール、またはグローバルCREATE INTEGRATION権限を持つロールを使用します。
クライアント認証情報を取得するには、次のコマンドを実行します:
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('WORKATO_OAUTH');詳細については、Snowflakeのカスタムクライアント向けSnowflake OAuthの設定ガイドを参照してください。
Workatoで使用するために、クライアントIDおよびクライアントシークレットをコピーして保存します。
OAuth 2.0認証でSnowflakeに接続
WorkatoでSnowflakeへのOAuth 2.0認証コネクションを設定するには、次の手順を実行します:
作成 > コネクションをクリックするか、Cを2回押します。
Snowflakeを検索し、アプリとして選択します。
コネクション名フィールドにコネクションの名前を入力します。
Snowflake OAuth 2.0コネクション
ロケーションドロップダウンメニューを使用して、コネクションを保存するプロジェクトを選択します。
SnowflakeインスタンスのAccount identifierを、サポートされている次のいずれかの形式で入力します:
- Account name:
https://{org_name}-{account_name} - Connection name:
https://{org_name}-{connection_name} - Account locator:
https://{account_locator}.{region}.{cloud}
詳細については、SnowflakeのConnecting to your accountsガイドを参照してください。
アカウントロケーター形式
特定のロケーションでは、アカウントロケーターURLに{region}および{cloud}を含める必要があります。 例:
- AWS米国西部(オレゴン):
your-account-locator - AWS米国東部(オハイオ):
your-account-locator.us-east-2 - Azure West Europe:
your-account-locator.west-europe.azure
詳細については、SnowflakeのUsing an account locator as an identifierガイドを参照してください。
このコネクションのコンピューティングリソースを定義するために、Warehouse名を入力します。 詳細については、Warehouseに関する考慮事項を参照してください。
ターゲットのSnowflakeデータベースのデータベース名を入力します。
認証タイプドロップダウンメニューを使用して、OAuth 2.0を選択します。
クライアントIDとクライアントシークレットを入力します。 これらの認証情報を取得する方法については、OAuth 2.0認証用のSnowflake設定を参照してください。
任意です。 認証に使用するロールを指定します。 このロールは、ユーザーに割り当てられた既存のロールである必要があります。 空白のままにすると、Snowflakeはユーザーに割り当てられたデフォルトロールを使用します。
任意です。 スキーマを入力します。 空白のままにすると、デフォルトのスキーマはpublicになります。
任意です。 タイムスタンプのタイムゾーンが正しく処理されるように、改善された日時処理を使用(推奨)をはいに設定します。
任意です。 割り当てられたタイムゾーンがないタイムスタンプに適用するデータベースタイムゾーンを定義します。 空白のままにすると、デフォルトでワークスペースのtimezoneが使用されます。
接続をクリックします。
Workatoへのアクセスをプロビジョニングするには、Allowをクリックします。
キーペア認証
キーペア認証を使用して、パスワードなしでSnowflakeに接続します。 この方法では、クライアントが生成したRSAキーペアを使用し、強力なセキュリティを提供します。 キーペアを生成するには、コマンドラインツールを使用する必要があります。
キーペア認証のSnowflake設定
Snowflakeでキーペアを作成するには、次の手順を実行します:
ターミナルで次のコマンドを実行して秘密鍵を生成します:
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocryptWorkatoで使用するためにPRIVATE KEYをコピーして保存します。 -----BEGIN PRIVATE KEY-----から-----END PRIVATE KEY-----まですべてをコピーします。
次のコマンドを実行して、秘密鍵から公開鍵を作成します:
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub次のステップで使用するためにPUBLIC KEYをコピーして保存します。
詳細については、Snowflakeのキーペア認証とキーペアローテーションガイドを参照してください。
Snowflakeワークシートで次のSQLコマンドを実行して、公開鍵をSnowflakeユーザーに割り当てます:
ALTER USER <USERNAME> SET RSA_PUBLIC_KEY='<PUBLIC_KEY>';<USERNAME>をSnowflakeユーザーに、<PUBLIC_KEY>を鍵の内容に置き換えます。 -----BEGIN PUBLIC KEY-----行と-----END PUBLIC KEY-----行を除外します。
ロール要件
このコマンドを実行するには、SYSADMINまたはSECURITYADMINロールが必要です。
キーペア認証でSnowflakeに接続
WorkatoでSnowflakeへのキーペア認証コネクションを設定するには、次の手順を実行します:
作成 > コネクションをクリックするか、Cを2回押します。
Snowflakeを検索し、アプリとして選択します。
コネクション名フィールドにコネクションの名前を入力します。
Snowflakeキーペアコネクション
ロケーションドロップダウンメニューを使用して、コネクションを保存するプロジェクトを選択します。
SnowflakeインスタンスのAccount identifierを、サポートされている次のいずれかの形式で入力します:
- Account name:
https://{org_name}-{account_name} - Connection name:
https://{org_name}-{connection_name} - Account locator:
https://{account_locator}.{region}.{cloud}
詳細については、SnowflakeのConnecting to your accountsガイドを参照してください。
アカウントロケーター形式
特定のロケーションでは、アカウントロケーターURLに{region}および{cloud}を含める必要があります。 例:
- AWS米国西部(オレゴン):
your-account-locator - AWS米国東部(オハイオ):
your-account-locator.us-east-2 - Azure West Europe:
your-account-locator.west-europe.azure
詳細については、SnowflakeのUsing an account locator as an identifierガイドを参照してください。
このコネクションのコンピューティングリソースを定義するために、Warehouse名を入力します。 詳細については、Warehouseに関する考慮事項を参照してください。
ターゲットのSnowflakeデータベースのデータベース名を入力します。
Authentication typeドロップダウンメニューでKey-pair authenticationを選択します。
User nameとPrivate keyを入力します。 これらの認証情報を取得する方法については、キーペア認証のためのSnowflake設定を参照してください。
任意です。 Private key passphraseを入力します。
任意です。 認証に使用するロールを指定します。 このロールは、ユーザーに割り当てられた既存のロールである必要があります。 空白のままにすると、Snowflakeはユーザーに割り当てられたデフォルトロールを使用します。
任意です。 スキーマを入力します。 空白のままにすると、デフォルトのスキーマはpublicになります。
任意です。 タイムスタンプのタイムゾーンが正しく処理されるように、改善された日時処理を使用(推奨)をはいに設定します。
任意です。 割り当てられたタイムゾーンがないタイムスタンプに適用するデータベースタイムゾーンを定義します。 空白のままにすると、デフォルトでワークスペースのtimezoneが使用されます。
接続をクリックします。
ウェアハウスに関する考慮事項
Snowflakeでは、すべてのコンピューティング(読み込み、変換、クエリ)に対して秒単位の課金が適用され、ウェアハウスが起動するたびに最低60秒が課金されます。 クエリ頻度、クエリ間の時間、同時にアクティブなレシピの数、クエリの複雑さに基づいて、ウェアハウスのプロパティを選択します。
ウェアハウスサイズ
ほとんどのユースケースでは、X-Smallウェアハウスで十分です。 より大きなウェアハウスは、同じクレジットコストでクエリをより速く完了できるため、タイムアウトが懸念される長時間または複雑なクエリに適しています。
マルチクラスターウェアハウス
自動スケールが有効なマルチクラスターウェアハウスは、必要に応じて同じサイズの追加ウェアハウスを作成することで、一時的な負荷変動に対応します。 同時実行ジョブまたは大規模なクエリを含むジョブが想定される場合は、マルチクラスターウェアハウスを使用します。 詳細については、Snowflakeのマルチクラスターウェアハウスガイドを参照してください。
自動サスペンドと自動再開
コネクションで使用されるウェアハウスでは自動再開を有効にする必要があります。サスペンド中のウェアハウスで実行しようとすると、レシピジョブは失敗します。
ビジネスニーズに基づき、一定期間非アクティブな状態が続いた後に自動サスペンドするようにウェアハウスを設定できます。 ウェアハウスはクエリのパフォーマンスを向上させるテーブルデータのキャッシュを保持しますが、このキャッシュはサスペンド時にクリアされる点に注意してください。 その結果、自動再開後の最初のクエリは遅くなります。 クエリが頻繁で、クエリ間のダウンタイムが最小限のユースケースでは、自動サスペンド期間を長くすると効果的です。
データベースタイムゾーン
SnowflakeのTIMESTAMP_NTZデータ型は、タイムゾーン情報を含まない"wallclock"時刻を格納するため、外部システムとの統合時に問題が発生する可能性があります。 これらの列からデータを送信または読み取る場合、他のアプリケーションが正確に処理できるように、値をデフォルトのタイムゾーンに変換する必要があります。 これに対処するには、データベースが運用されているタイムゾーンを選択します。これはTIMESTAMP_NTZ列にのみ適用されます。 明示的なタイムゾーン値を持つ列は影響を受けません。
デフォルトタイムゾーン
データベースのタイムゾーンが指定されていない場合、デフォルトではワークスペースのタイムゾーンが使用されます。
- TIMESTAMP_NTZへのタイムスタンプ値の_書き込み_: タイムスタンプ値は、壁時計の値のみを格納する前に、指定されたタイムゾーン(該当する場合はDSTオフセットを含む)に変換されます。
- TIMESTAMP_NTZからのタイムスタンプの_読み取り_: タイムスタンプ値には選択したタイムゾーンが割り当てられ、該当する場合はDSTオフセットが適用されたタイムゾーン対応のタイムスタンプとして処理されます。
テーブルとビュー
Snowflakeコネクターは、コネクションの確立に使用したユーザー名で利用可能なすべてのテーブルおよびビューで動作します。 これらは各トリガー/アクションのドロップダウンメニューで利用できます。または、正確な名前を指定することもできます。
ドロップダウンメニューからテーブル/ビューを選択
テキストフィールドに正確なテーブル/ビュー名を指定
単一行と行のバッチ
Snowflakeコネクターは、単一行またはバッチでのデータの読み取りと書き込みをサポートしています。 バッチトリガーとアクションでは、バッチサイズを1~100にする必要があり、単一行の出力ではなくリストデータピル(行の配列)を返します。
バッチトリガー出力
リストデータピル
行データピルは、出力がそのバッチ内の各行のデータを含むリストであることを示します。単一行トリガーは個々の行データをマッピングするための出力データツリーを返しますが、バッチトリガーは別の方法で処理する必要があるリストデータピルを返します。
単一行出力
Salesforceの一括でオブジェクトを作成アクションなど、バッチ互換の操作で行データピルをソースリストにマッピングします。 詳細については、Workatoでのリストの操作を参照してください。
バッチトリガー出力の使用
WHERE条件
この入力フィールドを使用して、アクションを実行する行をフィルタリングして識別します。 これは、複数のトリガーとアクションで次のように使用されます。
- トリガーで取得する行をフィルタリング
- Select rowsアクションで行をフィルタリング
- Delete rowsアクションで削除する行をフィルタリング
TIP
次の例では、ユーザー入力でWHERE条件を直接使用する方法を示します。 セキュリティを強化するには、SQLインジェクションを防ぐためにパラメーター付きのWHERE条件を使用します。 詳細については、パラメーターの使用を参照してください。
各リクエストでこの句をWHEREステートメントとして使用します。 これは基本的なSQL構文に従う必要があります。
単純なステートメント
文字列値は単一引用符('')で囲む必要があり、使用する列はテーブル/ビューに存在している必要があります。
単一列の値に基づいて行をフィルタリングする単純なWHERE条件は次のようになります。
email = '[email protected]'行を選択アクションで使用すると、このWHERE条件はemail列に値'[email protected]'を持つすべての行を返します。 入力ではデータピルを一重引用符で囲みます。

WHERE条件で一重引用符で囲んだデータピルの使用
列にスペースが含まれている場合は、列識別子である二重引用符("")を使用します。 たとえば、識別子として使用するには、currency codeを二重引用符で囲む必要があります。
"email address" = '[email protected]'
二重引用符で囲まれた列識別子を含むWHERE条件
複雑なステートメント
WHERE条件にはサブクエリを含めることもできます。 次の例では、USERSテーブルからアクティブなユーザーを選択します。
ID IN(SELECT USER_ID FROM USERS WHERE ACTIVE = TRUE)行を選択アクションで使用すると、メインクエリからUSERSテーブル内の行に関連し、アクティブ(ACTIVE = TRUE)なすべての行が選択されます。
WHERE条件でのサブクエリの使用
パラメーターの使用
SQLインジェクションに対するセキュリティレイヤーを追加するために、パラメーターをWHERE条件と組み合わせて使用します。 WHERE条件でパラメーターを使用するには、まず入力でバインド変数を宣言する必要があります。 バインドパラメーターは、変数名の前に:を付けた:bind_variable形式で宣言する必要があります。 これが完了したら、指定した正確な名前を使用して、次のセクションでパラメーターを宣言します。
TIP
バインド変数は列名ではなく、列値の代わりとしてのみ使用してください。
バインド変数を含むWHERE条件
任意の数のバインド変数を指定でき、それぞれに一意の名前を付ける必要があります。 Workatoは、一重引用符(')、二重引用符(")、角括弧([])内の:を無視することで、バインド変数を列名や静的値と区別します。
特殊文字
列名に特殊文字が定義されている場合、そのような列のデータピルは元の列に正しくマッピングされず、nullを返します。 最も一般的に使用される特殊文字は、whitespaceと-です。 これらの定義の例として、"column name"と"column-name"があります。
このような状況では、次の回避策を使用できます。
回避策1
SQLステートメントで適切なエイリアスを使用します。 データピルはエイリアスに正しくマッピングされます。
SELECT ID, NAME
"whitespace column" as whitespace_column,
"dashed-column" as dashed_column
FROM CUSTOMERS回避策2
行インデックスと列名を使用して値に直接アクセスします。
行インデックスと列名によるデータへのアクセス
Last updated: