Snowflake 接続
AWS Glue for Spark を使用して、AWS Glue 4.0 以降のバージョンの Snowflake のテーブルからの読み込みとテーブルへの書き込みを行うことができます。Snowflake からの読み込みは SQL クエリで行うことができます。ユーザーとパスワードを使用して Snowflake に接続できます。AWS Glue データカタログを使用して AWS Secrets Manager に保存されている Snowflake 認証情報を参照できます。AWS Glue for Spark のデータカタログ Snowflake 認証情報は、クローラー用のデータカタログ Snowflake 認証情報とは別に保存されます。Snowflake に接続するように設定された JDBC
タイプの接続ではなく、SNOWFLAKE
タイプの接続を選択する必要があります。
Snowflake の詳細については、「Snowflake ウェブサイト
Snowflake 接続の設定
インターネット経由で利用できる Snowflake データベースに接続するための AWS の前提条件はありません。
オプションで、次の設定を実行して AWS Glue で接続認証情報を管理できます。
AWS Glue で接続認証情報を管理するには
Snowflake でユーザー
snowflakeUser
とパスワードsnowflakePassword
を作成します。AWS Secrets Manager で、Snowflake の認証情報を使用してシークレットを作成します。Secrets Manager でシークレットを作成するには、AWS Secrets Manager ドキュメントの「AWS Secrets Manager シークレットを作成する」にあるチュートリアルに従ってください。シークレットを作成したら、次のステップのためにシークレット名
secretName
を保存しておきます。-
[キー/値のペア] をクリックして、
sfUser
キーを使用してsnowflakeUser
のペアを作成します。 -
[キー/値のペア] をクリックして、
sfPassword
キーを使用してsnowflakePassword
のペアを作成します。 -
キーと値のペアを選択するときに、Snowflake ウェアハウスにキー
sfWarehouse
を提供できます。
-
AWS Glue データカタログで、「AWS Glue 接続の追加」にある手順に従って接続を作成します。接続を作成したら、次のステップのために接続名
connectionName
を保存しておきます。[接続タイプ] をクリックして、[Snowflake] を選択します。
[Snowflake URL] をクリックして、Snowflake インスタンスの URL を指定します。URL では、
という形式のホスト名を使用します。account_identifier
.snowflakecomputing.com[AWS Secret] をクリックして、
secretName
を入力します。
AWS Glue ジョブ設定で、追加のネットワーク接続として
connectionName
を指定します。
次のような状況では、以下が必要になることがあります。
-
Amazon VPC の AWS でホストされている Snowflake の場合
-
Snowflake には適切な Amazon VPC 設定が必要です。Amazon VPC の設定方法の詳細については、Snowflake ドキュメントの「AWS PrivateLink & Snowflake
」を参照してください。 -
AWS Glue には適切な Amazon VPC 設定が必要です。AWS Glue (AWS PrivateLink) のインターフェイス VPC エンドポイントの設定 (AWS PrivateLink)。
-
(Snowflake のセキュリティ認証情報を定義する AWS Secrets Manager シークレットの ID に加えて) Amazon VPC 接続情報を提供する AWS Glue データカタログ接続を作成する必要があります。前の項目でリンクされている Snowflake ドキュメントで説明されているように、AWS PrivateLink の使用時に URL が変更されます。
-
ジョブ設定には、データカタログ接続を追加ネットワーク接続として含める必要があります。
-
Snowflake テーブルからの読み込み
前提条件: 読み込む目的の Snowflake テーブルがあること。Snowflake のテーブル名 tableName
が必要になります。Snowflake の URL snowflakeUrl
、ユーザー名 snowflakeUser
、パスワード snowflakePassword
が必要です。Snowflake ユーザーにデフォルトの名前空間が設定されていない場合は、Snowflake データベース名 databaseName
、スキーマ名 schemaName
が必要になります。さらに、Snowflake ユーザーにデフォルトのウェアハウスセットがない場合は、ウェアハウス名 warehouseName
が必要になります。
例:
その他の前提条件: 「AWS Glue で接続認証情報を管理するには」の手順を実行して、snowflakeUrl
、snowflakeUsername
、および snowflakePassword
を設定します。これらのステップを確認するには、前のセクション「Snowflake 接続の設定」を参照してください。接続するその他のネットワーク接続を選択するには、connectionName
パラメータを使用します。
snowflake_read = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "
connectionName
", "dbtable": "tableName
", "sfDatabase": "databaseName
", "sfSchema": "schemaName
", "sfWarehouse": "warehouseName
", } )
さらに、autopushdown
および query
パラメータを使用して Snowflake テーブルの一部を読み込むことができます。これは、Spark に読み込まれた後に結果をフィルタリングするよりもはるかに効率的です。すべての売上が同じテーブルに格納されているが、分析する必要があるのは休日の特定の店舗の売上だけだという例を考えてみましょう。その情報がテーブルに格納されている場合は、述語プッシュダウンを使用して次のように結果を取得できます。
snowflake_node = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "autopushdown": "on", "query": "select * from sales where store='1' and IsHoliday='TRUE'", "connectionName": "snowflake-glue-conn", "sfDatabase": "
databaseName
", "sfSchema": "schemaName
", "sfWarehouse": "warehouseName
", } )
Snowflake テーブルへの書き込み
前提条件: 書き込み先の Snowflake データベース。現在の、または希望するテーブル名 tableName
が必要です。Snowflake の URL snowflakeUrl
、ユーザー名 snowflakeUser
、パスワード snowflakePassword
が必要です。Snowflake ユーザーにデフォルトの名前空間が設定されていない場合は、Snowflake データベース名 databaseName
、スキーマ名 schemaName
が必要になります。さらに、Snowflake ユーザーにデフォルトのウェアハウスセットがない場合は、ウェアハウス名 warehouseName
が必要になります。
例:
その他の前提条件: 「AWS Glue で接続認証情報を管理するには」の手順を実行して、snowflakeUrl
、snowflakeUsername
、および snowflakePassword
を設定します。これらのステップを確認するには、前のセクション「Snowflake 接続の設定」を参照してください。接続するその他のネットワーク接続を選択するには、connectionName
パラメータを使用します。
glueContext.write_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "
connectionName
", "dbtable": "tableName
", "sfDatabase": "databaseName
", "sfSchema": "schemaName
", "sfWarehouse": "warehouseName
", }, )
Snowflake 接続オプションのリファレンス
Snowflake 接続タイプには次の接続オプションがあります。
このセクションのパラメータの一部はデータカタログ接続 (sfUrl
、sfUser
、sfPassword
) から取得できます。その場合は指定する必要はありません。これを行うには、connectionName
パラメータを含めます。
このセクションのパラメータの一部は、AWS Secrets Manager シークレット (sfUser
、sfPassword
) から取得できます。その場合は指定する必要はありません。シークレットは、sfUser
および sfPassword
キーの下にコンテンツを提供する必要があります。これを行うには、secretId
パラメータを含めます。
以下のパラメータは、Snowflake に接続する際に一般的に使用されます。
sfDatabase
— Snowflake でユーザーデフォルトが設定されていない場合は必須です。読み込み/書き込みに使用されます。接続後にセッションに使用するデータベース。sfSchema
— Snowflake でユーザーデフォルトが設定されていない場合は必須です。読み込み/書き込みに使用されます。接続後にセッションに使用するスキーマ。sfWarehouse
— Snowflake でユーザーデフォルトが設定されていない場合は必須です。読み込み/書き込みに使用されます。接続後にセッションに使用するデフォルトの仮想ウェアハウス。sfRole
— Snowflake でユーザーデフォルトが設定されていない場合は必須です。読み込み/書き込みに使用されます。接続後にセッションに使用するデフォルトのセキュリティロール。-
sfUrl
— (必須) 読み込み/書き込みに使用されます。アカウントのホスト名を
の形式で指定します。アカウント識別子の詳細については、Snowflake ドキュメントの「アカウント識別子account_identifier
.snowflakecomputing.com」を参照してください。 sfUser
— (必須) 読み込み/書き込みに使用されます。Snowflake ユーザーのログイン名。sfPassword
- (pem_private_key
指定がない場合は必須) 読み取り/書き込みに使用します。 Snowflake ユーザーのパスワード。dbtable
— フルテーブルで作業する場合は必須です。読み込み/書き込みに使用されます。読み込まれるテーブルまたはデータが書き込まれるテーブルの名前。読み込み時には、すべての列とレコードが取得されます。-
pem_private_key
— 読み込み/書き込みに使用されます。暗号化されていない b64 でエンコードされたプライベートキーの文字列。Snowflake ユーザーのプライベートキー。 これを PEM ファイルからコピーするのが一般的です。詳細については、Snowflake ドキュメントの「キーペア認証とキーペアローテーション」を参照してください。 query
— クエリで読み込みを行う場合は必須です。読み込みに使用されます。実行する正確なクエリ (SELECT
ステートメント)
以下のオプションを使用して、Snowflake への接続プロセス中の特定の動作を設定します。
-
preactions
— 読み込み/書き込みに使用されます。有効値: セミコロンで区切られた文字列形式の SQL ステートメントのリスト。SQL ステートメントは、AWS Glue と Snowflake の間でデータが転送される前に実行されます。ステートメントに%s
が含まれる場合、%s
は操作で参照されるテーブル名に置き換えられます。 -
postactions
— 読み込み/書き込みに使用されます。SQL ステートメントは、AWS Glue と Snowflake 間でデータが転送された後に実行されます。ステートメントに%s
が含まれる場合、%s
は操作で参照されるテーブル名に置き換えられます。 -
autopushdown
- デフォルト:"on"
。有効な値:"on"
、"off"
。このパラメータは、自動クエリプッシュダウンを有効にするかどうかを制御します。プッシュダウンが有効になっている場合、Spark でクエリを実行すると、クエリの一部が Snowflake サーバーに「プッシュダウン」できる場合にクエリがプッシュダウンされます。これにより、一部のクエリのパフォーマンスが向上します。クエリをプッシュダウンできるかどうかについては、Snowflake ドキュメントの「プッシュダウン」を参照してください。
さらに、Snowflake Spark コネクタで使用できるオプションの一部が AWS Glue でサポートされている場合があります。Snowflake Spark コネクタで使用できるオプションの詳細については、Snowflake ドキュメントの「コネクタの構成オプションの設定
Snowflake コネクタの制限事項
AWS Glue for Spark を使用してスノーフレークに接続することには、以下の制限があります。
-
このコネクタはジョブブックマークをサポートしていません。ブックマークの詳細については、「ジョブのブックマークを使用した処理済みデータの追跡」を参照してください。
-
このコネクタは、
create_dynamic_frame.from_catalog
およびwrite_dynamic_frame.from_catalog
メソッドを使用した AWS Glue データカタログのテーブルを介した Snowflake の読み込みと書き込みをサポートしていません。 -
このコネクタは、ユーザーとパスワード以外の認証情報による Snowflake への接続をサポートしていません。
-
このコネクタはストリーミングジョブではサポートされていません。
-
このコネクタは、情報を取得する (
query
パラメータを使用してなど) 際のSELECT
ステートメントベースのクエリをサポートします。他の種類のクエリ (SHOW
、DESC
、DML ステートメントなど) はサポートされていません。 -
Snowflake は、Snowflake クライアントを介して送信されるクエリテキスト (つまり、SQL ステートメント) のサイズをステートメントあたり 1 MB に制限しています。詳細については、「クエリテキストサイズの制限
」を参照してください。