Amazon S3へのアンロード

既にAmazon Web Services(AWS)アカウントをお持ちで、データファイルの保存と管理にS3バケットを使用している場合、Snowflakeテーブルからデータをアンロードするときに既存のバケットとフォルダーパスを使用できます。このトピックでは、 COPY コマンドを使用して、テーブルからAmazon S3バケットにデータをアンロードする方法について説明します。その後、アンロードされたデータファイルをローカルファイルシステムにダウンロードできます。

次の図に示すように、S3バケットへのデータのアンロードは2つのステップで実行されます。

ステップ1

COPY INTO <場所> コマンドを使用して、SnowflakeデータベーステーブルからS3バケット内の1つ以上のファイルにデータをコピーします。コマンドでは、S3バケットを参照する名前付き外部ステージオブジェクトを指定するか(推奨)、バケットの URI およびストレージ統合またはセキュリティ認証情報(必要な場合)の いずれか を指定して、バケットに直接アンロードすることを選択できます。

コマンドを手動またはスクリプト内で実行する場合は、使用する方法に関係なく、このステップでは、稼働中の現行の仮想ウェアハウスがセッションのために必要です。ウェアハウスは、テーブルから行を書き込むためのコンピューティングリソースを提供します。

ステップ2

Amazonが提供するインターフェイス/ツールを使用して、S3バケットからファイルをダウンロードします。

Unloading data to S3

ちなみに

この一連のトピックの手順では、 データのアンロードの準備 を読み終えて、必要がある場合は、名前付きファイル形式が作成済みであることを前提としています。

始める前に、ベストプラクティス、ヒント、およびその他のガイダンスについて データのアンロードに関する考慮事項 を読むこともできます。

このトピックの内容:

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

Databases Databases tab » <データベース名> » Stages をクリックします

SQL

CREATE STAGE

名前付きステージの作成

次の例では、 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

名前付きステージへのデータのアンロード

  1. COPY INTO <場所> コマンドを使用して、テーブルからS3バケットに外部ステージを使用してデータをアンロードします。

    次の例では、 my_ext_unload_stage ステージを使用して、 mytable テーブル内のすべての行を1つ以上のファイルからS3バケットにアンロードします。ファイルには d1 ファイル名のプレフィックスが適用されます。

    COPY INTO @my_ext_unload_stage/d1 from mytable;
    
    Copy
  2. S3コンソール(または同等のクライアントアプリケーション)を使用して、バケットからオブジェクト(つまり、コマンドによって生成されたファイル)を取得します。

S3バケットへのデータの直接アンロード

  1. COPY INTO <場所> コマンドを使用して、テーブルから指定されたS3バケットにデータを直接アンロードします。このオプションは、同じテーブルとバケットのパラメーターによる定期的なデータのアンロードを計画していない場合の、アドホックアンロードに適しています。

    S3バケットの URI と、バケットにアクセスするためのストレージ統合または認証情報を COPY コマンドで指定する必要があります。

    次の例では、 mytable テーブルのすべての行を、 mybucket S3バケットのフォルダーパスのプレフィックス unload/ を持つ1つ以上のファイルにアンロードします。

    COPY INTO s3://mybucket/unload/ from mytable storage_integration = s3_int;
    
    Copy

    注釈

    この例では、参照されたS3バケットは、 s3_int という名前の参照されたストレージ統合を使用してアクセスされます。

  2. S3コンソール(または同等のクライアントアプリケーション)を使用して、バケットからオブジェクト(つまり、コマンドによって生成されたファイル)を取得します。