Unload into Amazon S3¶
If you already have an Amazon Web Services (AWS) account and use S3 buckets for storing and managing your data files, you can make use of your existing buckets and folder paths when unloading data from Snowflake tables. This topic describes how to use the COPY command to unload data from a table into an Amazon S3 bucket. You can then download the unloaded data files to your local file system.
次の図に示すように、S3バケットへのデータのアンロードは2つのステップで実行されます。
- ステップ1:
COPY INTO <場所> コマンドを使用して、SnowflakeデータベーステーブルからS3バケット内の1つ以上のファイルにデータをコピーします。コマンドでは、S3バケットを参照する名前付き外部ステージオブジェクトを指定するか(推奨)、バケットの URI およびストレージ統合またはセキュリティ認証情報(必要な場合)の いずれか を指定して、バケットに直接アンロードすることを選択できます。
コマンドを手動またはスクリプト内で実行する場合は、使用する方法に関係なく、このステップでは、稼働中の現行の仮想ウェアハウスがセッションのために必要です。ウェアハウスは、テーブルから行を書き込むためのコンピューティングリソースを提供します。
- ステップ2:
Amazonが提供するインターフェイス/ツールを使用して、S3バケットからファイルをダウンロードします。
Tip
この一連のトピックの手順では、 File formats to unload data を読み終えて、必要がある場合は、名前付きファイル形式が作成済みであることを前提としています。
始める前に、ベストプラクティス、ヒント、およびその他のガイダンスについて データのアンロードに関する考慮事項 を読むこともできます。
Allow the Amazon Virtual Private Cloud IDs¶
組織内の AWS 管理者が、Snowflakeに AWS S3ストレージアカウントへのアクセスを明示的に許可していない場合は、ここで許可できます。データのロードの設定手順にある Virtual Private Cloud IDs の許可 のステップに従います。
Configure an S3 bucket for unloading data¶
Snowflakeには、フォルダー(およびすべてのサブフォルダー)に新しいファイルを作成するため、S3バケットおよびフォルダーに対する次の権限が必要です。
s3:DeleteObjects3:PutObject
ベストプラクティスとして、Snowflakeは、外部クラウドストレージの認証責任をSnowflake IDおよびアクセス管理(IAM)エンティティに委任するように、ストレージ統合オブジェクトを構成することをお勧めします。
構成手順については、 Amazon S3へのセキュアアクセスの構成 をご参照ください。
(Optional) Configure support for Amazon S3 access control lists¶
Snowflakeストレージ統合は、バケット所有者に包括的な制御を付与するために AWS アクセス制御リスト(ACLs)をサポートします。アンロードされたテーブルデータからAmazonS3バケットに作成されたファイルは、 AWS Identity and Access Management(IAM)ロールによって所有されます。ACLs は、1つの AWS アカウントの IAM ロールが、1つ以上の他の AWS アカウントにある、Amazon S3バケットにアクセスするように設定されているユースケースをサポートします。ACL のサポートがないと、バケット所有者アカウントのユーザーは、ストレージ統合を使用して、外部(S3)ステージにアンロードされたデータファイルにアクセスすることはできませんでした。ユーザーが COPY INTO <場所> を使用して外部(S3)ステージのデータファイルにSnowflakeテーブルデータをアンロードすると、アンロード操作はアンロードされたデータファイルに ACL を適用します。データファイルは、ファイルに "s3:x-amz-acl":"bucket-owner-full-control" 権限を適用し、S3バケットの所有者にファイルの完全な制御を付与します。
オプションの STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control' パラメーターを使用して、S3ステージのストレージ統合で ACL サポートを有効にします。ストレージ統合は、S3クラウドストレージ用に生成されたIDおよびアクセス管理(IAM)ユーザーと、許可またはブロックされたストレージロケーション(つまり、S3バケット)のオプションセットを保存するSnowflakeオブジェクトです。組織の AWS 管理者は、生成された IAM ユーザーをロールに追加して、指定されたS3バケットにアクセスするためのSnowflakeアクセス許可を付与します。この機能により、ユーザーはステージの作成時またはデータのロード時に、認証情報の提供を回避できます。管理者は、ストレージ統合を作成するとき(CREATE STORAGE INTEGRATION を使用)またはそれ以降(ALTER STORAGE INTEGRATION を使用)に STORAGE_AWS_OBJECT_ACL パラメーターを設定できます。
Unload data into an external stage¶
外部ステージは、データのアンロードに最大限の柔軟性を提供する名前付きデータベースオブジェクトです。データベースオブジェクトであるため、名前付きステージの権限は任意のロールに付与できます。
Snowsight またはSQLのいずれかを使用して、外部の名前付きステージを作成できます。
- Snowsight:
ナビゲーションメニューで Catalog » Database Explorer » <db_name> » Stages » Create を選択します
- SQL:
Create a named stage¶
Snowflakeは、Amazon S3およびGoogle Cloud Storageへのアップロード時にマルチパートアップロードを使用します。このプロセスは、外部ステージのストレージの場所に不完全なアップロードが残る可能性があります。
不完全なアップロードが蓄積されないようにするには、ライフサイクルルールを設定することを推奨します。手順については、Amazon S3 または Google Cloud Storage ドキュメントをご参照ください。
次の例では、 files という名前のフォルダーパスを持つ unload という名前のS3バケットを使用して、 my_ext_unload_stage という名前の外部ステージを作成します。ステージは、 s3_int という名前の既存のストレージ統合を使用してS3バケットにアクセスします。
ステージは my_csv_unload_format という名前のファイル形式オブジェクトを参照します。手順については、File formats to unload data をご参照ください。
Unload data to the named stage¶
COPY INTO <場所> コマンドを使用して、テーブルからS3バケットに外部ステージを使用してデータをアンロードします。
次の例では、
my_ext_unload_stageステージを使用して、mytableテーブル内のすべての行を1つ以上のファイルからS3バケットにアンロードします。ファイルにはd1ファイル名のプレフィックスが適用されます。S3コンソール(または同等のクライアントアプリケーション)を使用して、バケットからオブジェクト(つまり、コマンドによって生成されたファイル)を取得します。
Unload data directly into an S3 bucket¶
COPY INTO <場所> コマンドを使用して、テーブルから指定されたS3バケットにデータを直接アンロードします。このオプションは、同じテーブルとバケットのパラメーターによる定期的なデータのアンロードを計画していない場合の、アドホックアンロードに適しています。
S3バケットの URI と、バケットにアクセスするためのストレージ統合または認証情報を COPY コマンドで指定する必要があります。
次の例では、
mytableテーブルのすべての行を、mybucketS3バケットのフォルダーパスのプレフィックスunload/を持つ1つ以上のファイルにアンロードします。注釈
この例では、参照されたS3バケットは、
s3_intという名前の参照されたストレージ統合を使用してアクセスされます。S3コンソール(または同等のクライアントアプリケーション)を使用して、バケットからオブジェクト(つまり、コマンドによって生成されたファイル)を取得します。