Snowflakeステージへのアンロード

この一連のトピックでは、 COPY コマンドを使用して、テーブルから内部(つまり、Snowflake)ステージにデータをアンロードする方法を説明します。その後、アンロードされたデータファイルをローカルファイルシステムにダウンロードできます。

次の図に示すように、ローカルファイルシステムへのデータのアンロードは、2つの別個のステップで実行されます。

ステップ1

COPY INTO <場所> コマンドを使用して、SnowflakeデータベーステーブルからSnowflakeステージの1つ以上のファイルにデータをコピーします。 SQL ステートメントでは、ファイルが書き込まれるステージ(名前付きステージまたはテーブル/ユーザーステージ)を指定します。

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

ステップ2

GET コマンドを使用して、データファイルをローカルファイルシステムにダウンロードします。

Unloading data to a Snowflake stage

ちなみに

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

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

このトピックの内容:

データのアンロード

このセクションでは、テーブルデータを名前付き内部ステージ、テーブルステージ、またはユーザーステージにアンロードする手順について説明します。

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

内部ステージは、データのアンロードに最大限の柔軟性を提供する名前付きデータベースオブジェクトです。データベースオブジェクトであるため、名前付きステージの権限は任意のロールに付与できます。

ウェブインターフェイスまたは SQLを使用して内部ステージを作成できます。

Classic Console

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

SQL

CREATE STAGE

名前付きステージの作成

次の例では、 データのアンロードの準備 で作成された my_csv_unload_format という名前のファイル形式オブジェクトを参照する内部ステージを作成します。

CREATE OR REPLACE STAGE my_unload_stage
  FILE_FORMAT = my_csv_unload_format;
Copy

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

  1. COPY INTO <場所> コマンドを使用して、テーブルのすべての行を1つ以上のファイルに my_csv_unload_format ステージにアンロードします。このステートメントは、アンロードされたファイルの前に unload/ を付けて、ステージ内のファイルを整理します。

    例:

    COPY INTO @mystage/unload/ from mytable;
    
    Copy

    @ 文字自体が、名前付きステージを識別します。

    注釈

    ファイル形式オプションはステージに対して定義されているため、 COPY コマンドで同じファイル形式オプションを指定する必要はありません。

  2. LIST コマンドを使用して、ステージにアンロードされたファイルのリストを表示します。

    LIST @mystage;
    
    +----------------------------------+------+----------------------------------+-------------------------------+
    | name                             | size | md5                              | last_modified                 |
    |----------------------------------+------+----------------------------------+-------------------------------|
    | mystage/unload/data_0_0_0.csv.gz |  112 | 6f77daba007a643bdff4eae10de5bed3 | Mon, 11 Sep 2017 18:13:07 GMT |
    +----------------------------------+------+----------------------------------+-------------------------------+
    
    Copy
  3. GET コマンドを使用して、生成されたファイルをテーブルステージからローカルマシンにダウンロードします。次の例では、ファイルを data/unload ディレクトリにダウンロードします。

    例:

    Linuxまたは macOS:

    GET @mystage/unload/data_0_0_0.csv.gz file:///data/unload;
    
    Copy

    Windows:

    GET @mystage/unload/data_0_0_0.csv.gz file://C:\data\unload;
    
    Copy

テーブルステージへのデータのアンロード

  1. COPY INTO <場所> コマンドを使用して、テーブルのすべての行をテーブルのステージにある1つ以上のファイルにアンロードします。次の例では、 データのアンロードの準備 で作成された名前付きの my_csv_unload_format ファイル形式を使用して、データファイルをステージにアンロードします。このステートメントは、アンロードされたファイルの前に unload/ を付けて、ステージ内のファイルを整理します。

    例:

    COPY INTO @%mytable/unload/ from mytable FILE_FORMAT = (FORMAT_NAME = 'my_csv_unload_format' COMPRESSION = NONE);
    
    Copy

    @% 文字の組み合わせが、テーブルステージを識別します。

  2. LIST コマンドを使用して、ステージにアンロードされたファイルのリストを表示します。

    LIST @%mytable;
    
    +-----------------------+------+----------------------------------+-------------------------------+
    | name                  | size | md5                              | last_modified                 |
    |-----------------------+------+----------------------------------+-------------------------------|
    | unload/data_0_0_0.csv |   96 | 29918f18bcb35e7b6b628ca41024236c | Mon, 11 Sep 2017 17:45:20 GMT |
    +-----------------------+------+----------------------------------+-------------------------------+
    
    Copy
  3. GET コマンドを使用して、生成されたファイルをテーブルステージからローカルマシンにダウンロードします。次の例では、ファイルを data/unload ディレクトリにダウンロードします。

    例:

    Linuxまたは macOS:

    GET @%mytable/unload/data_0_0_0.csv file:///data/unload;
    
    Copy

    Windows:

    GET @%mytable/unload/data_0_0_0.csv file://C:\data\unload;
    
    Copy

ユーザーステージへのデータのアンロード

  1. COPY INTO <場所> コマンドを使用して、テーブルのすべての行をステージ内の1つ以上のファイルにアンロードします。次の例では、 データのアンロードの準備 で作成された名前付きの my_csv_unload_format ファイル形式を使用して、ユーザーステージにデータファイルをアンロードします。このステートメントは、アンロードされたファイルの前に unload/ を付けて、ステージ内のファイルを整理します。

    例:

    COPY INTO @~/unload/ from mytable FILE_FORMAT = (FORMAT_NAME = 'my_csv_unload_format' COMPRESSION = NONE);
    
    Copy

    @~ 文字の組み合わせが、ユーザーステージを識別します。

  2. LIST コマンドを使用して、ステージにアンロードされたファイルのリストを表示します。

    LIST @~;
    
    +-----------------------+------+----------------------------------+-------------------------------+
    | name                  | size | md5                              | last_modified                 |
    |-----------------------+------+----------------------------------+-------------------------------|
    | unload/data_0_0_0.csv |   96 | 94a306c55733b95a0887511ff355936b | Mon, 11 Sep 2017 17:25:07 GMT |
    +-----------------------+------+----------------------------------+-------------------------------+
    
    Copy
  3. GET コマンドを使用して、生成されたファイルをステージからローカルマシンにダウンロードします。次の例では、ファイルを data/unload ディレクトリにダウンロードします。

    例:

    Linuxまたは macOS:

    GET @~/unload/data_0_0_0.csv file:///data/unload;
    
    Copy

    Windows:

    GET @~/unload/data_0_0_0.csv file://C:\data\unload;
    
    Copy

アンロードされたデータファイルの管理

ステージングされたファイルは、 REMOVE コマンドを使用してSnowflakeステージから削除できます。これらのファイルは、処理が完了したらステージ内のファイルを削除します。

ファイルを削除すると、データをロードする際のパフォーマンスが向上します。これは、ステージ内の既存のファイルが既にロードされているかどうかを確認するために COPY INTO <テーブル> コマンドがスキャンするファイルの数を減らすためです。