PUT

ローカルファイルシステムから以下のSnowflakeステージのいずれかにデータファイルをアップロードします。

  • 名前付き内部ステージ。

  • 指定されたテーブルの内部ステージ。

  • 現在のユーザーの内部ステージ。

COPY INTO <テーブル> コマンドを使用すると、ステージングされたファイルをテーブルにロードできます。

注釈

  • PUT は、外部ステージへのファイルのアップロードをサポートして いません。ファイルを外部ステージにアップロードするには、クラウドサービスが提供するユーティリティを使用します。

  • ODBC ドライバー は、次のプラットフォームでホストされているSnowflakeアカウントで PUT をサポートします。

    • Amazon Web Services

    • Google Cloud Platform

    • Microsoft Azure

こちらもご参照ください。

GET , LIST , REMOVE , COPY FILES

構文

PUT file://<path_to_file>/<filename> internalStage
    [ PARALLEL = <integer> ]
    [ AUTO_COMPRESS = TRUE | FALSE ]
    [ SOURCE_COMPRESSION = AUTO_DETECT | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE ]
    [ OVERWRITE = TRUE | FALSE ]
Copy

条件:

internalStage ::=
    @[<namespace>.]<int_stage_name>[/<path>]
  | @[<namespace>.]%<table_name>[/<path>]
  | @~[/<path>]
Copy

必須パラメーター

file://path_to_file/filename

クライアントマシン上のデータファイルの URI を指定します。ここで、

  • path_to_file は、アップロードするファイルへのローカルディレクトリパスです。

  • filename は、アップロードするファイルの名前です。ワイルドカード文字(*?)を使用して、複数のファイルをアップロードできます。ディレクトリパスやファイル名に特殊文字やスペースが含まれている場合は、ファイル URI 全体を一重引用符で囲みます。

URI のフォーマットは、クライアントのオペレーティングシステムによって異なります。

Linux/macOS:

パスに最初のスラッシュを含める必要があります。たとえば、 load という名前のファイルには file:///tmp/load を使用します。

Windows:

パスにドライブとバックスラッシュを含め、バックスラッシュ文字をスラッシュに置き換える必要があります。たとえば、 load data という名前のファイルには file://C:/temp/load data を使用します。

internalStage

ファイルをアップロードするSnowflakeの場所を指定します。

@[namespace.]int_stage_name[/path]

指定された名前の内部ステージにファイルがアップロードされます。

@[namespace.]%table_name[/path]

指定したテーブルのステージにファイルがアップロードされます。

@~[/path]

ファイルは現在のユーザーのステージにアップロードされます。

条件:

  • namespace は、名前付き内部ステージまたはテーブルを含むデータベースまたはスキーマです。セッション内でデータベースとスキーマが現在使用されている場合は、 オプション です。

  • path は、一連のファイルへのアクセスを制限するクラウドストレージの場所にある、ファイルの大文字と小文字を区別するオプションのパスです。パスは、別のクラウドストレージサービスによって プレフィックス または フォルダー と呼ばれることもあります。

注釈

ステージ名またはパスにスペースまたは特殊文字が含まれている場合は、一重引用符で囲む必要があります。たとえば、 '@"my stage"'"my stage" という名前のステージに使用します。

オプションのパラメーター

PARALLEL = integer

ファイルのアップロードに使用するスレッドの数を指定します。アップロードプロセスでは、サイズごとにデータファイルのバッチを分割します。

  • 小さなファイル(圧縮または非圧縮で64 MB 未満)は、個別のファイルとして並列にステージングされます

  • 大きなファイルは自動的にチャンクに分割され、同時にステージングされ、ターゲットステージで再アセンブルされます。1つのスレッドで複数のチャンクをアップロードできます。

スレッドの数を増やすと、大きなファイルをアップロードするときのパフォーマンスが向上します。

サポートされる値: 1 (並列処理なし)から 99 (ファイルのアップロードには99スレッドを使用)の整数値。

デフォルト: 4

注釈

16 MB の制限は、以下を含むSnowflakeドライバーの古いバージョンに適用されます。

  • JDBC ドライバー3.12.1より前のバージョン。

  • ODBC ドライバー2.20.5より前のバージョン。

  • Pythonコネクタ2.2.0より前のバージョン。

AUTO_COMPRESS = TRUE | FALSE

Snowflakeがgzipを使用してアップロード中にファイルを圧縮するかどうかを指定します。

  • TRUE: Snowflakeはファイルを圧縮します(まだ圧縮されていない場合)。

  • FALSE: Snowflakeはファイルを圧縮しません。

このオプションは、他の圧縮タイプをサポートしていません。別の圧縮タイプを使用するには、 PUT コマンドを実行する前にファイルを個別に圧縮します。次に、 SOURCE_COMPRESSION オプションを使用して圧縮タイプを識別します。

ローカルフォルダーに、Snowflakeがデータファイルをステージングする前に、圧縮するための十分なスペースがあることを確認します。必要に応じて、オペレーティングシステムで TEMPTMPDIR または TMP 環境変数を設定して、追加の空きスペースを含むローカルフォルダーを指すようにします。

デフォルト: TRUE

SOURCE_COMPRESSION = AUTO_DETECT | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE

ステージングされる圧縮済みファイルで使用する圧縮の方法を指定します。

サポートされる値

メモ

AUTO_DETECT

現在は自動検出できない、Brotliで圧縮されたファイルを除き、圧縮アルゴリズムは自動的に検出されます。Brotliで圧縮されたファイルをロードする場合は、 AUTO_DETECT ではなく BROTLI を明示的に使用してください。

GZIP

BZ2

BROTLI

Brotli圧縮ファイルをロードする場合に使用する必要があります。

ZSTD

Zstandard v0.8(およびそれ以上)がサポートされています。

DEFLATE

Deflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。

RAW_DEFLATE

生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。

NONE

ロードするデータファイルは圧縮されていません。

デフォルト: AUTO_DETECT

注釈

Snowflakeはこのオプションを使用して、データファイルの圧縮方法を検出します。これにより、データファイルを圧縮解除し、ロード用にデータを抽出できます。ファイルの圧縮には、このオプションを使用 しません

他のユーティリティで圧縮されたファイルのアップロードは現在サポートされていません。

OVERWRITE = TRUE | FALSE

アップロード時にSnowflakeが同じ名前の既存ファイルを上書きするかどうかを指定します。

  • TRUE :同じ名前の既存のファイルは上書きされます。

  • FALSE: 同じ名前の既存のファイルは上書きされません。

    ステージでの LIST 操作はバックグラウンドで実行されるため、PUT 操作のパフォーマンスに影響を与える可能性があることに注意してください。

    同じ名前のファイルがターゲットステージに存在するために、ファイルを PUT しようとして失敗した場合は、次のオプションを使用できます。

    • 既存のファイルから1つ以上のテーブルにデータをロードし、ステージからファイルを削除します。次に、新しいデータまたは更新されたデータを含むファイルをステージに PUT します。

    • ローカルファイルの名前を変更してから、 PUT 操作を再試行します。

    • PUT ステートメントで OVERWRITE = TRUE に設定します。これは、Snowflakeにまだロードされていない可能性のあるデータでファイルを上書きしても安全である場合にのみ行ってください。

SnowflakeアカウントがGoogle Cloud Platformでホストされている場合、 OVERWRITE パラメーターが TRUE に設定されていると、 PUT ステートメントが認識されないことに注意してください。PUT 操作は 常に、アップロードするローカルファイルでターゲットステージの既存のファイルを上書きします。

次のクライアントは、Amazon Web ServicesまたはMicrosoft AzureでホストされているSnowflakeアカウントの OVERWRITE オプションをサポートしています。

  • SnowSQL

  • Snowflake ODBC ドライバー

  • Snowflake JDBC ドライバー

  • Python用Snowflakeコネクタ

サポートされている値: TRUE、 FALSE

デフォルト: FALSE

使用上の注意

  • コマンドは、いずれのSnowflakeウェブインターフェイスの Worksheets ワークシートタブ ページからも実行できません。代わりに、 SnowSQL クライアント または ドライバー を使用してデータファイルをアップロードするか、特定のSnowflakeクライアントのドキュメントを確認して、このコマンドのサポートを検証します。

  • コマンドはディレクトリパスが異なる複数のファイルのアップロードをサポートして いません。これは、ステージにファイルがアップロードされるときに、ファイルシステムのディレクトリ構造が保持されないためです。

    たとえば、次の PUT ステートメントは、ネストされたサブディレクトリに複数のファイルを指定できないため、エラーを返します。

    PUT file:///tmp/data/** @my_int_stage AUTO_COMPRESS=FALSE;
    
    Copy
  • ワイルドカードのようなファイルグロビングパターンは、そのパターンに一致するファイルのディレクトリパスが異なる場合を除きサポートされます。

  • このコマンドでは、ファイルが 作成されたり、名前が変更されたりしません

  • データのロードおよびアンロード操作のために内部ステージに格納されているすべてのファイルは、サーバー側で AES-256の強力な暗号化を使用して自動的に暗号化されます。デフォルトでは、Snowflakeは128ビットのキー(オプションで256ビットのキーを構成可能)による追加のクライアント側の暗号化を提供します。詳細については、 内部ステージの暗号化タイプ をご参照ください。

  • このコマンドは、同じステージにアップロードしようとする重複ファイルを無視します。重複ファイルは、既にステージングされたファイルと同じ名前の変更されていないファイルです。

    既にステージングされたファイルを上書きするには、アップロードするファイルをステージング済みのファイルとはコンテンツが異なるように変更する必要があります。これにより、新しくステージングされたファイルの新しいチェックサムが生成されます。

Tip

セキュリティ上の理由から、コマンドは設定された時間が経過するとタイムアウトします。これは、大きな非圧縮データファイルを読み込むときに発生する可能性があります。タイムアウトの問題を回避するには、ファイルをアップロードする前に、サポートされている圧縮タイプのいずれかを使用して大きなデータファイルを圧縮することをお勧めします。次に、 SOURCE_COMPRESSION オプションを使用してファイルの圧縮タイプを指定します。

PARALLEL オプションの値を増やすことも検討できます。これは、大きなデータファイルをアップロードするときのパフォーマンスに役立ちます。

さらに、データをテーブルにロードするときに(COPY INTO <テーブル> コマンドを使用して)並列操作を利用するには、サイズがおよそ100から250 MB に 圧縮 されたデータファイルを使用することをお勧めします。データファイルが大きい場合は、圧縮してアップロードする前に、サードパーティツールを使用してそれらを小さなファイルに分割することを検討してください。

/tmp/data ディレクトリ(Linuxまたは macOS 環境)の mydata.csv という名前のファイルを my_int_stage という名前の内部ステージにアップロードします。

PUT file:///tmp/data/mydata.csv @my_int_stage;
Copy

/tmp/data ディレクトリ(Linuxまたは macOS 環境)の orders_001.csv という名前のファイルを、自動データ圧縮を無効にして orderstiny_ext テーブルのステージにアップロードします。

PUT file:///tmp/data/orders_001.csv @%orderstiny_ext AUTO_COMPRESS=FALSE;
Copy

上記と同じ例ですが、ファイル名にワイルドカード文字を使用して複数のファイルをアップロードします。

PUT file:///tmp/data/orders_*01.csv @%orderstiny_ext AUTO_COMPRESS=FALSE;
Copy

自動データ圧縮を有効にして、現在のユーザーのために、 C:\temp\data ディレクトリ(Windows環境下)の mydata.csv という名前のファイルをステージにアップロードします。

PUT file://C:/temp/data/mydata.csv @~ AUTO_COMPRESS=TRUE;
Copy

前の例と同様ですが、ファイルを C:\temp\load data ディレクトリからアップロードします(Windows環境内)。

PUT 'file://C:/temp/load data/mydata.csv' @~ AUTO_COMPRESS=TRUE;
Copy