PUT¶
内部ステージ に、ローカルファイルシステムから1つ以上のデータファイルをアップロードします。
内部ステージにファイルをアップロードした後、 COPY INTO <テーブル> コマンドを使用して、ファイルのデータをテーブルに読み込みます。
注釈
PUT は外部ステージへのファイルアップロードをサポート していません。外部ステージにファイルをアップロードするには、クラウドサービスが提供するユーティリティを使用します。
ODBC ドライバー は、次のプラットフォームでホストされているSnowflakeアカウントで PUT をサポートします。
Amazon Web Services
Google Cloud
Microsoft Azure
- こちらもご参照ください。
GET , LIST , REMOVE , COPY FILES , CREATE STAGE , データのロードの概要
構文¶
PUT file://<absolute_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 ]
条件:
internalStage ::= @[<namespace>.]<int_stage_name>[/<path>] | @[<namespace>.]%<table_name>[/<path>] | @~[/<path>]
必須パラメーター¶
file://absolute_path_to_file/filename
クライアントマシン上のデータファイルの URI を指定します。ここで、
absolute_path_to_file
は、アップロードするファイルへのローカルディレクトリパスです。filename
は、アップロードするファイルの名前です。ワイルドカード文字(*
、?
)を使用して、複数のファイルをアップロードできます。ディレクトリパスやファイル名に特殊文字やスペースが含まれている場合は、ファイル URI 全体を一重引用符で囲みます。注意
PUT クエリを使用して複数のファイルを選択する場合は注意してください。大容量のファイルに一致する PUT クエリは、コストとパフォーマンスに大きな影響を与える可能性があります。
URI のフォーマットは、クライアントのオペレーティングシステムによって異なります。
- Linux/macOS:
ルートディレクトリ(
/
)からファイルに絶対パスを指定します。たとえば、my-data.csv
という名前のファイルにはfile:///my/file/path/my-data.csv
を使用します。- Windows:
ファイルがあるドライブのルートからの絶対パスを指定します。たとえば、
my-data.csv
という名前のファイルにはfile://C:temp\my-data.csv
を使用します。ファイルパスに特殊文字が含まれている場合は、パス全体をシングルクォートで囲み、ドライブとパスの区切り文字をバックスラッシュからフォワードスラッシュ(
/
)に変更する必要があります。例えば、my$data.csv
という名前のファイルには'file://C:/temp/my$data.csv'
を使用します。
注釈
Snowflakeはtar(テープアーカイブ)ファイルをサポートしていません。
internalStage
ファイルをアップロードする内部ステージの場所を指定します。
@[namespace.]int_stage_name[/path]
ファイルは指定された内部ステージにアップロードされます。
@[namespace.]%table_name[/path]
指定されたテーブルのステージにファイルがアップロードされます。
@~[/path]
ステージングされたファイルは、現在のユーザーのステージにアップロードされます。
条件:
namespace
は、名前付き内部ステージまたはテーブルを含むデータベースまたはスキーマです。セッション内でデータベースとスキーマが現在使用されている場合は、 オプション です。path
は、一連のファイルへのアクセスを制限するクラウドストレージの場所にある、ファイルの大文字と小文字を区別するオプションのパスです。パスは、別のクラウドストレージサービスによって プレフィックス または フォルダー と呼ばれることもあります。
注釈
ステージ名またはパスにスペースまたは特殊文字が含まれている場合は、一重引用符で囲む必要があります。たとえば、
'@"my stage"'
は"my stage"
という名前のステージに使用します。
オプションのパラメーター¶
PARALLEL = integer
ファイルのアップロードに使用するスレッドの数を指定します。Snowflakeはデータファイルのサイズごとにバッチを分けてアップロードします。
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がデータファイルをステージングする前に、圧縮するための十分なスペースがあることを確認します。必要に応じて、オペレーティングシステムで
TEMP
、TMPDIR
またはTMP
環境変数を設定して、追加の空きスペースを含むローカルフォルダーを指すようにします。デフォルト:
TRUE
SOURCE_COMPRESSION = AUTO_DETECT | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
ステージングされる圧縮済みファイルで使用する圧縮の方法を指定します。
サポートされる値
注意
AUTO_DETECT
現在は自動検出できないBrotliで圧縮されたファイルを除き、圧縮アルゴリズムは自動的に検出されます。Brotli圧縮ファイルをアップロードする場合は、
AUTO_DETECT
の代わりにBROTLI
を明示的に使用してください。GZIP
*.tar.gz
ファイル形式をサポートしていません。BZ2
*.tar.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
: 同じ名前の既存のファイルは上書きされません。Snowflakeはバックグラウンドでステージ上で LIST 操作を実行します。これは、 PUT 操作のパフォーマンスに影響を与える可能性があります。
ターゲットステージに同じ名前のファイルが存在するため、ファイルの PUT を試みて失敗した場合、次のアクションを実行できます。
既存のファイルから1つ以上のテーブルにデータをロードし、ステージからファイルを削除します。その後、新しいデータや更新されたデータを含むファイルをステージに PUT します。
ローカルファイルの名前を変更してから、 PUT 操作を再試行します。
PUT ステートメントで
OVERWRITE = TRUE
に設定します。同じ名前の既存の(ステージングされた)ファイルを上書きしても安全な場合のみ、この作業を行ってください。
Snowflakeアカウントが Google Cloud でホストされている場合、 OVERWRITE パラメーターが TRUE に設定されていると、 PUT ステートメントは認識されません。PUT 操作は、 常に ターゲットステージにある既存のファイルをアップロードしているローカルファイルで上書きします。
以下のクライアントは、 Amazon Web Services または Microsoft Azure でホストされているSnowflakeアカウントの OVERWRITE オプションをサポートしています。
SnowSQL
Snowflake ODBC ドライバー
Snowflake JDBC ドライバー
Snowflake Connector for Python
サポートされている値: TRUE、 FALSE
デフォルト:
FALSE
。
使用上の注意¶
コマンドは、いずれのSnowflakeウェブインターフェイスの Worksheets
ページからも実行できません。代わりに、 SnowSQL クライアント または ドライバー を使用してデータファイルをアップロードするか、特定のSnowflakeクライアントのドキュメントを確認して、このコマンドのサポートを検証します。
また、 Snowsight UI を使用して、ファイルを名前付き内部ステージにアップロードする こともできます。
ワイルドカードのようなファイルグロビングパターンは、そのパターンに一致するファイルのディレクトリパスが異なる場合を除きサポートされます。Snowflakeはステージにファイルをアップロードする際にファイルシステムのディレクトリ構造を保持しないため、コマンドはディレクトリパスが異なる複数のファイルのアップロードをサポート していません。
たとえば、次の PUT ステートメントは、ネストされたサブディレクトリに複数のファイルを指定できないため、エラーを返します。
PUT file:///tmp/data/** @my_int_stage AUTO_COMPRESS=FALSE;
このコマンドでは、ファイルが 作成されたり、名前が変更されたりしません 。
データのロードおよびアンロード操作のために内部ステージに格納されているすべてのファイルは、サーバー側で AES-256の強力な暗号化を使用して自動的に暗号化されます。デフォルトでは、Snowflakeは128ビットのキー(オプションで256ビットのキーを構成可能)による追加のクライアント側の暗号化を提供します。詳細については、 内部ステージの暗号化タイプ をご参照ください。
このコマンドは、同じステージにアップロードしようとする重複ファイルを無視します。重複ファイルは、既にステージングされたファイルと同じ名前の変更されていないファイルです。
既にステージングされたファイルを上書きするには、アップロードするファイルをステージング済みのファイルとはコンテンツが異なるように変更する必要があります。これにより、新しくステージングされたファイルの新しいチェックサムが生成されます。
PUT 、 GET コマンドの場合、 QUERY_HISTORY の
success
の EXECUTION_STATUS は、データファイルが正常にアップロードまたはダウンロードされたことを 意味 しません。代わりに、ステータスは、Snowflakeがファイル転送を続行するための承認を受けたことを示します。
Tip
セキュリティ上の理由から、コマンドは設定された時間が経過するとタイムアウトします。これは、圧縮されていない大容量のデータファイルをアップロードした場合に発生する可能性があります。タイムアウトの問題を回避するには、ファイルをアップロードする前に、サポートされている圧縮タイプのいずれかを使用して大きなデータファイルを圧縮することをお勧めします。次に、 SOURCE_COMPRESSION
オプションを使用してファイルの圧縮タイプを指定します。
PARALLEL
オプションの値を増やすことも検討できます。これは、大きなデータファイルをアップロードするときのパフォーマンスに役立ちます。
さらに、データをテーブルにロードするときに(COPY INTO <テーブル> コマンドを使用して)並列操作を利用するには、サイズがおよそ100から250 MB に 圧縮 されたデータファイルを使用することをお勧めします。データファイルが大きい場合は、圧縮してアップロードする前に、サードパーティツールを使用してそれらを小さなファイルに分割することを検討してください。
例¶
Linuxと macOS¶
内部ステージへのファイルのロード
/tmp/data
ディレクトリの mydata.csv
というファイルを my_int_stage
という内部ステージにロードします。
PUT file:///tmp/data/mydata.csv @my_int_stage;
テーブルステージへのファイルのロード
自動データ圧縮を無効にして、 orderstiny_ext
テーブルのステージに、 /tmp/data
ディレクトリにある orders_001.csv
という名前のファイルを読み込みます。
PUT file:///tmp/data/orders_001.csv @%orderstiny_ext
AUTO_COMPRESS = FALSE;
内部ステージへの複数ファイルのロード
ファイル名にワイルドカード文字を使用すると、複数のファイルをアップロードできます。
PUT file:///tmp/data/orders_*01.csv @my_int_stage
AUTO_COMPRESS = FALSE;
特殊文字を含むファイルパスの指定
特殊文字やスペースを含むファイルパスは、一重引用符で囲みます。
PUT 'file:///tmp/data/orders 001.csv' @my_int_stage
AUTO_COMPRESS = FALSE;
Windows¶
現在のユーザーのステージへのファイルのロード
自動データ圧縮を有効にして、現在のユーザーのステージに、 C:\temp\data
ディレクトリにある mydata.csv
という名前のファイルを読み込みます。
PUT file://C:\temp\data\mydata.csv @~
AUTO_COMPRESS = TRUE;
特殊文字を含むファイルパスの指定
特殊文字を含むWindowsのファイルパスを指定するには、パスを一重引用符で囲み、バックスラッシュをフォワードスラッシュに変更する必要があります。
この例では、ファイル名にスペース(my data.csv
)が含まれています。
PUT 'file://C:/temp/data/my data.csv' @my_int_stage
AUTO_COMPRESS = TRUE;