Amazon S3へのアンロード¶
既にAmazon Web Services(AWS)アカウントをお持ちで、データファイルの保存と管理にS3バケットを使用している場合、Snowflakeテーブルからデータをアンロードするときに既存のバケットとフォルダーパスを使用できます。このトピックでは、 COPY コマンドを使用して、テーブルからAmazon S3バケットにデータをアンロードする方法について説明します。その後、アンロードされたデータファイルをローカルファイルシステムにダウンロードできます。
次の図に示すように、S3バケットへのデータのアンロードは2つのステップで実行されます。
- ステップ1:
COPY INTO <場所> コマンドを使用して、SnowflakeデータベーステーブルからS3バケット内の1つ以上のファイルにデータをコピーします。コマンドでは、S3バケットを参照する名前付き外部ステージオブジェクトを指定するか(推奨)、バケットの URI およびストレージ統合またはセキュリティ認証情報(必要な場合)の いずれか を指定して、バケットに直接アンロードすることを選択できます。
コマンドを手動またはスクリプト内で実行する場合は、使用する方法に関係なく、このステップでは、稼働中の現行の仮想ウェアハウスがセッションのために必要です。ウェアハウスは、テーブルから行を書き込むためのコンピューティングリソースを提供します。
- ステップ2:
Amazonが提供するインターフェイス/ツールを使用して、S3バケットからファイルをダウンロードします。
Tip
この一連のトピックの手順では、 データのアンロードの準備 を読み終えて、必要がある場合は、名前付きファイル形式が作成済みであることを前提としています。
始める前に、ベストプラクティス、ヒント、およびその他のガイダンスについて データのアンロードに関する考慮事項 を読むこともできます。
このトピックの内容:
Amazon Virtual Private Cloud IDs の許可¶
組織内の AWS 管理者が、Snowflakeに AWS S3ストレージアカウントへのアクセスを明示的に許可していない場合は、ここで許可できます。データのロードの設定手順にある Virtual Private Cloud IDs の許可 のステップに従います。
データをアンロードするためのS3バケットの構成¶
Snowflakeには、フォルダー(およびすべてのサブフォルダー)に新しいファイルを作成するため、S3バケットおよびフォルダーに対する次の権限が必要です。
s3:DeleteObject
s3:PutObject
ベストプラクティスとして、Snowflakeは、外部クラウドストレージの認証責任をSnowflake IDおよびアクセス管理(IAM)エンティティに委任するように、ストレージ統合オブジェクトを構成することをお勧めします。
構成手順については、 Amazon S3へのセキュアアクセスの構成 をご参照ください。
Amazon S3アクセス制御リストのサポートの設定 --- オプション¶
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
パラメーターを設定できます。
外部ステージへのデータのアンロード¶
外部ステージは、データのアンロードに最大限の柔軟性を提供する名前付きデータベースオブジェクトです。データベースオブジェクトであるため、名前付きステージの権限は任意のロールに付与できます。
ウェブインターフェイスまたは SQLを使用して、外部の名前付きステージを作成できます。
- Classic Console:
- SQL:
名前付きステージの作成¶
次の例では、 files
という名前のフォルダーパスを持つ unload
という名前のS3バケットを使用して、 my_ext_unload_stage
という名前の外部ステージを作成します。ステージは、 s3_int
という名前の既存のストレージ統合を使用してS3バケットにアクセスします。
ステージは、 データのアンロードの準備 で作成された my_csv_unload_format
という名前のファイル形式オブジェクトを参照します。
CREATE OR REPLACE STAGE my_ext_unload_stage URL='s3://unload/files/'
STORAGE_INTEGRATION = s3_int
FILE_FORMAT = my_csv_unload_format;
名前付きステージへのデータのアンロード¶
COPY INTO <場所> コマンドを使用して、テーブルからS3バケットに外部ステージを使用してデータをアンロードします。
次の例では、
my_ext_unload_stage
ステージを使用して、mytable
テーブル内のすべての行を1つ以上のファイルからS3バケットにアンロードします。ファイルにはd1
ファイル名のプレフィックスが適用されます。COPY INTO @my_ext_unload_stage/d1 from mytable;
S3コンソール(または同等のクライアントアプリケーション)を使用して、バケットからオブジェクト(つまり、コマンドによって生成されたファイル)を取得します。
S3バケットへのデータの直接アンロード¶
COPY INTO <場所> コマンドを使用して、テーブルから指定されたS3バケットにデータを直接アンロードします。このオプションは、同じテーブルとバケットのパラメーターによる定期的なデータのアンロードを計画していない場合の、アドホックアンロードに適しています。
S3バケットの URI と、バケットにアクセスするためのストレージ統合または認証情報を COPY コマンドで指定する必要があります。
次の例では、
mytable
テーブルのすべての行を、mybucket
S3バケットのフォルダーパスのプレフィックスunload/
を持つ1つ以上のファイルにアンロードします。COPY INTO s3://mybucket/unload/ from mytable storage_integration = s3_int;
注釈
この例では、参照されたS3バケットは、
s3_int
という名前の参照されたストレージ統合を使用してアクセスされます。S3コンソール(または同等のクライアントアプリケーション)を使用して、バケットからオブジェクト(つまり、コマンドによって生成されたファイル)を取得します。