COPY INTO <場所>¶
テーブル(またはクエリ)から次のいずれかの場所にある1つ以上のファイルにデータをアンロードします。
- 内部ステージ(またはテーブル/ユーザーステージ)という名前。その後、ファイルは GET コマンドを使用してステージ/場所からダウンロードできます。 
- 外部の場所を参照する名前付きの外部ステージ(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)。 
- 外部の場所(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)。 
- こちらもご参照ください。
構文¶
COPY INTO { internalStage | externalStage | externalLocation }
     FROM { [<namespace>.]<table_name> | ( <query> ) }
[ PARTITION BY <expr> ]
[ FILE_FORMAT = ( { FORMAT_NAME = '[<namespace>.]<file_format_name>' |
                    TYPE = { CSV | JSON | PARQUET } [ formatTypeOptions ] } ) ]
[ copyOptions ]
[ VALIDATION_MODE = RETURN_ROWS ]
[ HEADER ]
条件:
internalStage ::= @[<namespace>.]<int_stage_name>[/<path>] | @[<namespace>.]%<table_name>[/<path>] | @~[/<path>]externalStage ::= @[<namespace>.]<ext_stage_name>[/<path>]externalLocation (for Amazon S3) ::= '<protocol>://<bucket>[/<path>]' [ { STORAGE_INTEGRATION = <integration_name> } | { CREDENTIALS = ( { { AWS_KEY_ID = '<string>' AWS_SECRET_KEY = '<string>' [ AWS_TOKEN = '<string>' ] } } ) } ] [ ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] [ MASTER_KEY = '<string>' ] | [ TYPE = 'AWS_SSE_S3' ] | [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ] ] | [ TYPE = 'NONE' ] ) ]externalLocation (for Google Cloud Storage) ::= 'gcs://<bucket>[/<path>]' [ STORAGE_INTEGRATION = <integration_name> ] [ ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = '<string>' ] | [ TYPE = 'NONE' ] ) ]externalLocation (for Microsoft Azure) ::= 'azure://<account>.blob.core.windows.net/<container>[/<path>]' [ { STORAGE_INTEGRATION = <integration_name> } | { CREDENTIALS = ( [ AZURE_SAS_TOKEN = '<string>' ] ) } ] [ ENCRYPTION = ( [ TYPE = { 'AZURE_CSE' | 'NONE' } ] [ MASTER_KEY = '<string>' ] ) ]formatTypeOptions ::= -- If FILE_FORMAT = ( TYPE = CSV ... ) COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE RECORD_DELIMITER = '<string>' | NONE FIELD_DELIMITER = '<string>' | NONE FILE_EXTENSION = '<string>' ESCAPE = '<character>' | NONE ESCAPE_UNENCLOSED_FIELD = '<character>' | NONE DATE_FORMAT = '<string>' | AUTO TIME_FORMAT = '<string>' | AUTO TIMESTAMP_FORMAT = '<string>' | AUTO BINARY_FORMAT = HEX | BASE64 | UTF8 FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | NONE NULL_IF = ( '<string1>' [ , '<string2>' , ... ] ) EMPTY_FIELD_AS_NULL = TRUE | FALSE -- If FILE_FORMAT = ( TYPE = JSON ... ) COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE FILE_EXTENSION = '<string>' -- If FILE_FORMAT = ( TYPE = PARQUET ... ) COMPRESSION = AUTO | LZO | SNAPPY | NONE SNAPPY_COMPRESSION = TRUE | FALSEcopyOptions ::= OVERWRITE = TRUE | FALSE SINGLE = TRUE | FALSE MAX_FILE_SIZE = <num> INCLUDE_QUERY_ID = TRUE | FALSE DETAILED_OUTPUT = TRUE | FALSE
必須パラメーター¶
- INTO ...
- データファイルがアンロードされる内部または外部の場所を指定します。 - @[namespace.]int_stage_name[/path]- 指定された名前の内部ステージにファイルがアンロードされます。 - @[namespace.]ext_stage_name[/path]- 指定された名前の外部ステージにファイルがアンロードされます。 - @[namespace.]%table_name[/path]- ファイルは、指定されたテーブルのステージにアンロードされます。 - @~[/path]- ファイルは、現在のユーザーのステージにアンロードされます。 - 'protocol://bucket[/path]'- ファイルは、指定された外部の場所(S3バケット)にアンロードされます。追加のパラメーターが必要になる場合があります。詳細については、 追加のクラウドプロバイダーパラメーター (このトピック内)をご参照ください。 - 'gcs://bucket[/path]'- ファイルは、指定された外部の場所(Google Cloud Storageバケット)にアンロードされます。追加のパラメーターが必要になる場合があります。詳細については、 追加のクラウドプロバイダーパラメーター (このトピック内)をご参照ください。 - 'azure://account.blob.core.windows.net/container[/path]'- ファイルは、指定された外部の場所(Azureコンテナー)にアンロードされます。追加のパラメーターが必要になる場合があります。詳細については、このトピックの 追加のクラウドプロバイダーパラメーター をご参照ください。 - 条件: - namespaceは、内部ステージまたは外部ステージが存在するデータベースまたはスキーマ、あるいはその両方で、- database_name.schema_nameまたは- schema_nameの形式です。ユーザーセッション内でデータベースとスキーマが現在使用されている場合は オプション です。それ以外の場合は必須です。
- protocolは以下のいずれかです。- s3プレフィックスは、中国以外のパブリック AWS リージョンのS3ストレージを参照します。
- s3chinaプレフィックスは、中国のパブリック AWS リージョンのS3ストレージを参照します。
- s3govプレフィックスは、 政府リージョン のS3ストレージを参照します。
 - ストレージ統合を使用した 政府リージョン のクラウドストレージへのアクセスは、同じ政府リージョンでホストされているSnowflakeアカウントに限定されています。 - 同様に、中国の地域のクラウドストレージにアクセスする必要がある場合は、中国の同じ地域でホストされているSnowflakeアカウントからのみストレージ統合を使用できます。 - このような場合、 CREDENTIALS パラメーター( CREATE STAGE コマンド内の)を使用して(ストレージ統合を使用するのではなく)、認証用の認証情報を提供します。 
- bucketはバケットの名前です。
 - accountは、Azureアカウントの名前です(例:- myaccount)。Data Lake Storage Gen2を含む、サポートされているすべてのタイプのAzure BLOBストレージアカウントに、- blob.core.windows.netエンドポイントを使用します。- 現在、ストレージ統合を使用した 政府リージョン のAzure BLOBストレージへのアクセスは、同じ政府リージョンのAzureでホストされているSnowflakeアカウントに限定されていることに注意してください。直接認証情報を使用した、政府リージョン外でホストされているアカウントからBLOBストレージへのアクセスがサポートされています。 
- containerは、Azureコンテナーの名前です(例:- mycontainer)。
 - オプションの - pathパラメーターは、アンロードされたデータを含むファイルのフォルダーとファイル名のプレフィックスを指定します。ファイル名のプレフィックスが- pathに含まれていない場合、 または、- PARTITION BYパラメーターが指定されている場合は、生成されたデータファイルのファイル名には- data_のプレフィックスが付きます。- 「パス」は名前のリテラルプレフィックスであるため、 - /./や- /../などの相対パス修飾子は文字どおりに解釈されます。例:- -- S3 bucket COPY INTO 's3://mybucket/./../a.csv' FROM mytable; -- Google Cloud Storage bucket COPY INTO 'gcs://mybucket/./../a.csv' FROM mytable; -- Azure container COPY INTO 'azure://myaccount.blob.core.windows.net/mycontainer/./../a.csv' FROM mytable; - これらのCOPYステートメントで、Snowflakeは、保管場所に文字通り - ./../a.csvという名前のファイルを作成します。
 - 注釈 - 内部または外部のステージ、またはパス名にスペースなどの特殊文字が含まれている場合は、 - INTO ...文字列を一重引用符で囲みます。
- INTO ...値は、リテラル定数にする必要があります。値を SQL 変数 にすることはできません。
- Snowflake Native App Framework 内の外部ステージに書き込む場合、外部ステージ名とパスの代わりに - STAGE_URLを使って URL を指定する必要があります。
 
- FROM ...
- アンロードするデータのソースを指定します。これは、テーブルまたはクエリのいずれかです。 - [namespace.]table_name
- データのアンロード元のテーブルの名前を指定します。 - 名前空間は、オプションで、テーブルが存在するデータベースまたはスキーマ、あるいはその両方を - database_name.schema_nameまたは- schema_nameの形式で指定します。ユーザーセッション内でデータベースとスキーマが現在使用されている場合は オプション です。それ以外の場合は必須です。
- ( query )
- SELECT ファイルにアンロードするデータを返すステートメント。クエリで LIMIT / FETCH 句を指定することにより、返される行の数を制限できます。 - 注釈 - CAST、 :: 関数を使用して列値をデータ型にキャストする場合は、データ型がすべての列値をサポートしていることを確認してください。指定されたデータ型に対して長すぎる値は切り捨てられる可能性があります。 
 
追加のクラウドプロバイダーパラメーター¶
- STORAGE_INTEGRATION = integration_nameまたは .- CREDENTIALS = ( cloud_specific_credentials )
- COPY ステートメントが、ターゲットクラウドストレージの場所の外部ステージ名ではなく、外部ストレージ URI を指定する場合にサポートされます。 クラウドプロバイダーに接続し、アンロードされたファイルがステージングされるプライベートストレージコンテナーにアクセスするための、セキュリティ認証情報を指定します。 - 外部のプライベートクラウドストレージの場所にアンロードする場合にのみ必要です。パブリックバケット/コンテナーには必要ありません - Amazon S3 - STORAGE_INTEGRATION = integration_name
- 外部クラウドストレージの認証責任をSnowflake IDおよびアクセス管理(IAM)エンティティに委任するために使用されるストレージ統合の名前を指定します。詳細については、 CREATE STORAGE INTEGRATION をご参照ください。 - 注釈 - Snowflakeはストレージ統合の使用を強くお勧めします。このオプションにより、ステージの作成時またはデータのロード時に CREDENTIALS パラメーターを使用してクラウドストレージの認証情報を提供する必要がなくなります。 
- CREDENTIALS = ( AWS_KEY_ID = 'string' AWS_SECRET_KEY = 'string' [ AWS_TOKEN = 'string' ] )または .- CREDENTIALS = ( AWS_ROLE = 'string' )
- AWS に接続し、アンロードされたファイルがステージングされるプライベートS3バケットにアクセスするためのセキュリティ認証情報を指定します。詳細については、 Amazon S3へのセキュアアクセスの構成 をご参照ください。 - 指定する認証情報は、バケットのSnowflakeアクセス許可を AWS IAM (識別およびアクセス管理)ユーザーまたはロールに関連付けたかどうかによって異なります。 - IAM ユーザー: 一時的な IAM 認証情報が必要です。一時的な(別名「スコープ」)認証情報は AWS セキュリティトークンサービス(STS)によって生成され、3つのコンポーネントで構成されます。 - AWS_KEY_ID
- AWS_SECRET_KEY
- AWS_TOKEN
 - プライベートバケットにアクセスするには、3つすべてが 必要 です。指定された期間が経過すると、仮認証情報は期限切れになり、使用できなくなります。そうすると、有効な一時的な認証情報の新しいセットを生成する必要があります。 - 重要 - COPY コマンドには、複雑な構文と認証情報などの機密情報が含まれます。さらに、これらは頻繁に実行され、スクリプトまたはワークシートに保存されることが多いため、機密情報が誤って公開される可能性があります。COPY コマンドを使用すると、永続的な(別名「長期」)認証情報を使用できます。ただし、セキュリティ上の理由から、 永久 認証情報を COPY コマンドで使用しないでください。代わりに、一時的な認証情報を使用します。 - 永続的な認証情報を使用する必要がある場合は、 外部ステージ を使用します。認証情報が1回入力され、安全に保存されるため、暴露の可能性が最小限に抑えられます。 
- IAM ロール: セキュリティ認証情報とアクセスキーを省略し、代わりに - AWS_ROLEを使用してロールを識別し、 AWS ロール ARN (Amazonリソース名)を指定します。- 重要 - AWS IAM ロールを使用してプライベートS3バケットにアクセスし、データをロードまたはアンロードする機能は廃止されました(つまり、サポートは将来のリリースで削除される予定)。Snowflakeは、この機能を使用する既存のS3ステージを変更して、代わりにストレージ統合オブジェクトを参照することを強くお勧めします。手順については、 オプション1: Amazon S3にアクセスするためのSnowflakeストレージ統合の構成 をご参照ください。 
 
 - Google Cloud Storage - STORAGE_INTEGRATION = integration_name
- 外部クラウドストレージの認証責任をSnowflake IDおよびアクセス管理(IAM)エンティティに委任するために使用されるストレージ統合の名前を指定します。詳細については、 CREATE STORAGE INTEGRATION をご参照ください。 
 - Microsoft Azure - STORAGE_INTEGRATION = integration_name
- 外部クラウドストレージの認証責任をSnowflake IDおよびアクセス管理(IAM)エンティティに委任するために使用されるストレージ統合の名前を指定します。詳細については、 CREATE STORAGE INTEGRATION をご参照ください。 - 注釈 - Snowflakeはストレージ統合の使用を強くお勧めします。このオプションにより、ステージの作成時またはデータのロード時に CREDENTIALS パラメーターを使用してクラウドストレージの認証情報を提供する必要がなくなります。 
- CREDENTIALS = ( AZURE_SAS_TOKEN = 'string' )
- Azureに接続し、データを含むファイルがステージングされるプライベートコンテナーにアクセスするための SAS (共有アクセス署名)トークンを指定します。認証情報はAzureによって生成されます。 
 
- ENCRYPTION = ( cloud_specific_encryption )
- アドホック COPY ステートメント(名前付き外部ステージを参照しないステートメント)で使用します。暗号化されたストレージの場所のファイルにデータをアンロードする場合にのみ必要 - Amazon S3 - ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] [ MASTER_KEY = '<string>' ] | [ TYPE = 'AWS_SSE_S3' ] | [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ] ] | [ TYPE = 'NONE' ] )- TYPE = ...
- 使用される暗号化タイプを指定します。可能な値は次のとおりです。 - AWS_CSE: クライアント側の暗号化(- MASTER_KEY値が必要)。現在、提供できるクライアント側の マスターキー は対称キーのみです。- MASTER_KEY値が指定されている場合、Snowflakeは- TYPE = AWS_CSEと見なします(つまり、- MASTER_KEY値が指定されている場合、- TYPEは不要です)。
- AWS_SSE_S3:追加の暗号化設定を必要としないサーバー側の暗号化。
- AWS_SSE_KMS:オプションの- KMS_KEY_ID値を受け入れるサーバー側の暗号化。
 - 暗号化タイプの詳細については、 クライアント側の暗号化 または サーバー側の暗号化 の AWS ドキュメントをご参照ください。 - NONE:暗号化なし。
 
- MASTER_KEY = 'string'(- AWS_CSE暗号化のみに適用)
- バケット内のファイルの暗号化に使用されたクライアント側マスターキーを指定します。マスターキーは、Base64エンコード形式の128ビットまたは256ビットキーである必要があります。 
- KMS_KEY_ID = 'string'(- AWS_SSE_KMS暗号化のみに適用)
- オプションで、バケットに アンロードされた ファイルの暗号化に使用する AWS KMS 管理キーの ID を指定します。値が指定されていない場合、デフォルトの KMS キー ID を使用して、アンロード時にファイルが暗号化されます。 - この値はデータのロードでは無視されることに注意してください。 
 - Google Cloud Storage - ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' | 'NONE' ] [ KMS_KEY_ID = 'string' ] )- TYPE = ...
- 使用される暗号化タイプを指定します。可能な値は次のとおりです。 - GCS_SSE_KMS:オプションの- KMS_KEY_ID値を受け入れるサーバー側の暗号化。- 詳細については、 Google Cloud のドキュメントをご参照ください。 
- NONE:暗号化なし。
 
- KMS_KEY_ID = 'string'(- GCS_SSE_KMS暗号化のみに適用)
- オプションで、バケットに アンロード されるファイルの暗号化に使用する KMS 管理キーの ID を指定します。値が指定されていない場合、バケットに対して設定されているデフォルトの KMS キー ID を使用して、アンロード時にファイルが暗号化されます。 - この値はデータのロードでは無視されることにご注意ください。サービスアカウントにバケット内のデータを復号化するための十分な権限がある場合、ロード操作は成功するはずです。 
 - Microsoft Azure - ENCRYPTION = ( [ TYPE = 'AZURE_CSE' | 'NONE' ] [ MASTER_KEY = 'string' ] )- TYPE = ...
- 使用される暗号化タイプを指定します。可能な値は次のとおりです。 - AZURE_CSE: クライアント側の暗号化(MASTER_KEY 値が必要)。詳細については、Microsoft Azureのドキュメントの クライアント側の暗号化情報 をご参照ください。
- NONE:暗号化なし。
 
- MASTER_KEY = 'string'(AZURE_CSE 暗号化のみに適用)
- ファイルの暗号化に使用されるクライアント側マスターキーを指定します。マスターキーは、Base64エンコード形式の128ビットまたは256ビットキーである必要があります。 
 
オプションのパラメーター¶
- PARTITION BY expr
- アンロードされたテーブルの行を個別のファイルに分割するために使用される式を指定します。文字列に評価されるすべての SQL 式をサポートします。 - アンロード操作は、パーティション式に基づいてテーブルの行を分割し、データ量とウェアハウス内のコンピューティングリソースに分散された並列操作の数に基づいて、作成するファイルの数を決定します。 - ファイル名にはプレフィックス - data_が付けられ、パーティション列の値が含まれます。各パーティションの個々のファイル名は、ユニバーサル一意識別子(UUID)で識別されます。UUID は、データファイルをアンロードするために使用される COPY ステートメントのクエリ ID です。- 注意 - COPY INTO <場所> ステートメントは、パーティション列の値をアンロードされたファイル名に書き込みます。Snowflakeは。機密性が高い可能性のある文字列値または整数値ではなく、日付やタイムスタンプなどの一般的なデータ型でデータをパーティション分割することをお勧めします。 - 顧客がサポートケースを作成する際に問題のデバッグを支援するため、Snowflakeが維持する内部ログにはファイル URLs が含まれていることに注意してください。その結果、 PARTITION BY 式で参照される列のデータも、間接的に内部ログに保存されます。これらのログは、展開リージョン外で処理される可能性があります。したがって、ベストプラクティスとして、 PARTITION BY 式には日付、タイムスタンプ、ブールデータ型のみを含めます。 - アカウントの COPY INTO <場所> ステートメントで PARTITION BY パラメーターを無効にする場合は、 Snowflakeサポート にお問い合わせください。 - Snowflakeは、データのアンロード操作をさらに制限するためにパラメーターのセットを提供します。 - PREVENT_UNLOAD_TO_INLINE_URL は、外部クラウドストレージの場所にアドホックデータをアンロードする操作を禁止します(つまり、クラウドストレージ COPY を指定し、ステートメント内の設定に直接アクセスする、INTO URL <場所> ステートメント)。 
- PREVENT_UNLOAD_TO_INTERNAL_STAGES は、ユーザーステージ、テーブルステージ、名前付き内部ステージなど、 任意の 内部ステージにデータをアンロードする操作を禁止します。 
 - 例については、 アンロードされた行のParquetファイルへのパーティション分割 (このトピック内)をご参照ください。 - 注釈 - 次のコピーオプション値は、 PARTITION BY との組み合わせではサポートされていません。 - OVERWRITE = TRUE
- SINGLE = TRUE
- INCLUDE_QUERY_ID = FALSE
 
- SQL ステートメントに ORDER BY 句を PARTITION BY と組み合わせて含めることは、指定された順序がアンロードされたファイルに保持されることを保証するものではありません。 
- PARTITION BY 式が NULL と評価された場合、出力ファイル名のパーティションパスは - _NULL_(例:- mystage/_NULL_/data_01234567-0123-1234-0000-000000001234_01_0_0.snappy.parquet)です。
- タイプ - PARQUETのファイルにアンロードする場合、- 並列実行スレッドによってアンロードされた小さなデータファイルは、 MAX_FILE_SIZE コピーオプションの値に可能な限り一致する単一のファイルに自動的にマージされます。 
- すべての行グループのサイズは128 MB です。行グループは、データを行に論理的に水平に分割したものです。行グループに対して保証されている物理構造はありません。行グループは、データセットの各列の列チャンクで構成されます。 
- アンロード操作は、 - MAX_FILE_SIZEコピーオプション設定にできるだけ近いサイズのファイルを生成しようとします。このコピーオプションのデフォルト値は16 MB です。この動作は、Parquetファイルにデータをアンロードする場合のみに適用されることに注意してください。
- VARIANT 列は、単純な JSON 文字列に変換されます。値を(TO_ARRAY 関数を使用して)配列にキャストすると、 JSON 文字列の配列になります。 
 
- アンロードされたデータファイルからパーティション式の列を省略するオプションはありません。 
 
- FILE_FORMAT = ( FORMAT_NAME = 'file_format_name' )または .- FILE_FORMAT = ( TYPE = CSV | JSON | PARQUET [ ... ] )
- アンロードされたデータを含むデータファイルの形式を指定します。 - FORMAT_NAME = 'file_format_name'
- テーブルからデータをアンロードするために使用する既存の名前付きファイル形式を指定します。名前付きファイル形式により、データファイルの形式タイプ(CSV、 JSON、 PARQUET)およびその他の形式オプションが決まります。詳細については、 CREATE FILE FORMAT をご参照ください。 
- TYPE = CSV | JSON | PARQUET
- テーブルからアンロードされるファイルのタイプを指定します。 - 形式タイプが指定されている場合、さらに形式固有のオプションを指定することができます。情報については、 形式タイプのオプション (このトピックの)をご参照ください。 
 - 注釈 - JSON タイプ VARIANT の列(つまり、 JSON データを含む列)からデータをアンロードするためにのみ使用できます。 
- 現在、 VARIANT 列のネストされたデータはParquet形式で正常にアンロードできません。 
 
- copyOptions
- アンロードされたデータの1つ以上のコピーオプションを指定します。詳細については、 コピーオプション (このトピック内)をご参照ください。 
- VALIDATION_MODE = RETURN_ROWS
- 指定されたクラウドストレージの場所に結果をアンロードする 代わりに、 SQL ステートメントでクエリの結果を返すように COPY コマンドに指示する文字列(定数)。サポートされている唯一の検証オプションは - RETURN_ROWSです。このオプションは、クエリによって生成されたすべての行を返します。- クエリを検証したら、 - VALIDATION_MODEを削除してアンロード操作を実行できます。
- HEADER = TRUE | FALSE
- 出力ファイルにテーブルの列見出しを含めるかどうかを指定します。 - 出力ファイルにテーブルの列見出しを含めるには、このオプションを - TRUEに設定します。- COPY 操作がデータを複数のファイルにアンロードする場合、列見出しは すべて ファイルに含まれることに注意してください。 - Parquet形式でデータをアンロードするとき、テーブルの列名は出力ファイルに保持されます。 
- このオプションを - FALSEに設定して、次の動作を指定します。- CSV:
- 出力ファイルにテーブルの列見出しを含めないでください。 
- Parquet:
- 出力ファイルに一般的な列見出し(例: - col1、- col2など)を含めます。
 
 - デフォルト: - FALSE
形式タイプオプション(formatTypeOptions)¶
指定したファイル形式タイプ(FILE_FORMAT = ( TYPE = ... ))に応じて、次の形式固有のオプションを1つ以上含めることができます(空白、コンマ、または改行で区切る)。
TYPE = CSV¶
- COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- 指定された圧縮アルゴリズムを使用して、アンロードされたデータファイルを圧縮することを指定する文字列(定数)。 - サポートされる値 - 注意 - AUTO- アンロードされたファイルは、デフォルトのgzipを使用して自動的に圧縮されます。 - GZIP- BZ2- BROTLI- Brotliで圧縮されたファイルをロードするときには、指定する必要があります。 - ZSTD- Zstandard v0.8(およびそれ以上)がサポートされています。 - DEFLATE- アンロードされたファイルは、Deflateを使用して圧縮されます(zlibヘッダー、 RFC1950 を使用)。 - RAW_DEFLATE- アンロードされたファイルは、生Deflateを使用して圧縮されます(ヘッダーなし、 RFC1951)。 - NONE- アンロードされたファイルは圧縮されません。 - デフォルト: - AUTO
- RECORD_DELIMITER = 'string' | NONE
- アンロードされたファイルの記録を区切る、1つ以上のシングルバイトまたはマルチバイト文字。一般的なエスケープシーケンス、または次のシングルバイトまたはマルチバイト文字を受け入れます。 - シングルバイト文字:
- 8進値( - \\でプレフィックス)、または16進値(- 0xまたは- \xでプレフィックス)を受け入れます。たとえば、アクサンシルコンフレックス(- ^)文字で区切られた記録の場合は、8進数(- \\136)または16進数(- 0x5e)の値を指定します。
- マルチバイト文字:
- 16進値( - \xでプレフィックス)。たとえば、セント(- ¢)文字で区切られた記録の場合は、16進数(- \xC2\xA2)の値を指定します。- RECORD_DELIMITER または FIELD_DELIMITER の区切り文字は、他のファイル形式オプション(例: - FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb')向けとして区切り文字の部分文字列にすることはできません。
 - 指定された区切り文字は、ランダムなバイトのシーケンスではなく、有効な UTF-8文字でなければなりません。区切り文字は最大20文字に制限されていることにも注意してください。 - NONEの値も受け入れます。- デフォルト: 改行文字。「改行」は論理的であるため、 - \r\nがWindowsプラットフォーム上のファイルの改行として理解されることに注意してください。
- FIELD_DELIMITER = 'string' | NONE
- アンロードされたファイルのフィールドを区切る、1つ以上のシングルバイトまたはマルチバイト文字。一般的なエスケープシーケンス、または次のシングルバイトまたはマルチバイト文字を受け入れます。 - シングルバイト文字:
- 8進値( - \\でプレフィックス)、または16進値(- 0xまたは- \xでプレフィックス)を受け入れます。たとえば、アクサンシルコンフレックス(- ^)文字で区切られた記録の場合は、8進数(- \\136)または16進数(- 0x5e)の値を指定します。
- マルチバイト文字:
- 16進値( - \xでプレフィックス)。たとえば、セント(- ¢)文字で区切られた記録の場合は、16進数(- \xC2\xA2)の値を指定します。- RECORD_DELIMITER または FIELD_DELIMITER の区切り文字は、他のファイル形式オプション(例: - FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb')向けとして区切り文字の部分文字列にすることはできません。- 注釈 - ASCII 以外の文字の場合は、16進数のバイトシーケンス値を使用して決定論的動作を得る必要があります。 
 
指定された区切り文字は、ランダムなバイトのシーケンスではなく、有効な UTF-8文字でなければなりません。区切り文字は最大20文字に制限されていることにも注意してください。
NONEの値も受け入れます。デフォルト: コンマ(
,)
- FILE_EXTENSION = 'string'
- ステージにアンロードされるファイルの拡張子を指定する文字列。拡張子を受け入れます。ユーザーは、目的のソフトウェアまたはサービスで読み取れる有効なファイル拡張子を指定する必要があります。 - 注釈 - SINGLEコピーオプションが- TRUEの場合、 COPY コマンドはデフォルトでファイル拡張子のないファイルをアンロードします。ファイル拡張子を指定するには、- internal_locationまたは- external_locationパスにファイル名と拡張子を指定します。例:- copy into @stage/data.csv ...- デフォルト: null、つまり、ファイル拡張子は、 - .csv[compression]などの形式タイプによって決定されます。ここで、- compressionは、- COMPRESSIONが設定されている場合、圧縮方法によって追加された拡張子です。
- DATE_FORMAT = 'string' | AUTO
- アンロードされたデータファイルの日付値の形式を定義する文字列。値が指定されていないか、 - AUTOに設定されている場合、 DATE_OUTPUT_FORMAT パラメーターの値が使用されます。- デフォルト: - AUTO
- TIME_FORMAT = 'string' | AUTO
- アンロードされたデータファイルの時間値の形式を定義する文字列。値が指定されていないか、 - AUTOに設定されている場合、 TIME_OUTPUT_FORMAT パラメーターの値が使用されます。- デフォルト: - AUTO
- TIMESTAMP_FORMAT = 'string' | AUTO
- アンロードされたデータファイルのタイムスタンプ値の形式を定義する文字列。値が指定されていないか、 - AUTOに設定されている場合、 TIMESTAMP_OUTPUT_FORMAT パラメーターの値が使用されます。- デフォルト: - AUTO
- BINARY_FORMAT = HEX | BASE64 | UTF8
- バイナリ出力のエンコード形式を定義する文字列(定数)。このオプションは、テーブルのバイナリ列からデータをアンロードするときに使用できます。 - デフォルト: - HEX
- ESCAPE = 'character' | NONE
- 使用:
- データのロードとアンロード 
- 定義:
- 囲まれているフィールド値、または囲まれていないフィールド値のエスケープ文字として使用されるシングルバイト文字の文字列。エスケープ文字は、文字シーケンス内の後続の文字に対して代替解釈を呼び出します。ESCAPE 文字を使用して、データ内の - FIELD_OPTIONALLY_ENCLOSED_BY文字のインスタンスをリテラルとして解釈できます。エスケープ文字は、データ内のそれ自体のインスタンスをエスケープするためにも使用できます。
 - 一般的なエスケープシーケンス、8進数値、または16進数値を受け入れます。 - FIELD_OPTIONALLY_ENCLOSED_BYを設定して、フィールドを囲むのに使用する文字を指定します。- このオプションが設定されている場合は、 - ESCAPE_UNENCLOSED_FIELDのエスケープ文字セットが上書きされます。- デフォルト:
- NONE
 
- ESCAPE_UNENCLOSED_FIELD = 'character' | NONE
- 使用:
- データのロードとアンロード 
- 定義:
- 囲まれていないフィールド値専用のエスケープ文字として使用されるシングルバイト文字の文字列。エスケープ文字は、文字シーケンス内の後続の文字に対して代替解釈を呼び出します。ESCAPE 文字を使用して、データ内の - FIELD_DELIMITERまたは- RECORD_DELIMITER文字のインスタンスをリテラルとして解釈できます。エスケープ文字は、データ内のそれ自体のインスタンスをエスケープするためにも使用できます。
 - 一般的なエスケープシーケンス、8進数値、または16進数値を受け入れます。 - ESCAPEが設定されている場合は、そのファイルオプションのエスケープ文字セットがこのオプションを上書きします。- デフォルト:
- バックスラッシュ( - \\)
 
- FIELD_OPTIONALLY_ENCLOSED_BY = 'character' | NONE
- 文字列を囲むのに使用される文字。値は、 - NONE、一重引用符(- ')、または二重引用符(- ")のいずれかです。一重引用符を使用するには、8進数または16進数表現(- 0x27)または二重引用符で囲まれたエスケープ(- '')を使用します。- ソーステーブルのフィールドにこの文字が含まれている場合、Snowflakeはアンロード時に同じ文字を使用してエスケープします。たとえば、値が二重引用符であり、フィールドに文字列 - A "B" Cが含まれる場合、Snowflakeは二重引用符を次のようにエスケープします。- A ""B"" C- デフォルト: - NONE
- NULL_IF = ( 'string1' [ , 'string2' ... ] )
- SQL NULLからの変換に使用される文字列。Snowflakeは、 SQL NULL 値をリストの最初の値に変換します。 - デフォルト: - \N(つまり、 NULL。- ESCAPE_UNENCLOSED_FIELD値を- \(デフォルト)と仮定)。
- EMPTY_FIELD_AS_NULL = TRUE | FALSE
- FIELD_OPTIONALLY_ENCLOSED_BYと組み合わせて使用します。- FIELD_OPTIONALLY_ENCLOSED_BY = NONEの場合、- EMPTY_FIELD_AS_NULL = FALSEを設定すると、フィールド値を囲む引用符なしで空の文字列値にアンロードするように、テーブル内の空の文字列を指定します。- TRUEに設定した場合、- FIELD_OPTIONALLY_ENCLOSED_BYは文字列を囲む文字を指定する必要があります。- デフォルト: - TRUE
TYPE = JSON¶
- COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- 文字列(定数)。指定された圧縮アルゴリズムを使用してデータファイルを圧縮します。 - サポートされる値 - 注意 - AUTO- アンロードされたファイルは、デフォルトのgzipを使用して自動的に圧縮されます。 - GZIP- BZ2- BROTLI- ZSTD- DEFLATE- アンロードされたファイルは、Deflateを使用して圧縮されます(zlibヘッダー、 RFC1950 を使用)。 - RAW_DEFLATE- アンロードされたファイルは、生Deflateを使用して圧縮されます(ヘッダーなし、 RFC1951)。 - NONE- アンロードされたファイルは圧縮されません。 - デフォルト: - AUTO
- FILE_EXTENSION = 'string' | NONE
- ステージにアンロードされるファイルの拡張子を指定する文字列。拡張子を受け入れます。ユーザーは、目的のソフトウェアまたはサービスで読み取れる有効なファイル拡張子を指定する必要があります。 - デフォルト: null、つまり、ファイル拡張子は、形式タイプ(例: - .csv[compression])によって決定されます。ここで、- compressionは、- COMPRESSIONが設定されている場合、圧縮方法によって追加された拡張子です。
TYPE = PARQUET¶
- COMPRESSION = AUTO | LZO | SNAPPY | NONE
- 文字列(定数)。指定された圧縮アルゴリズムを使用してデータファイルを圧縮します。 - サポートされる値 - 注意 - AUTO- ファイルは、デフォルトの圧縮アルゴリズムであるSnappyを使用して圧縮されます。 - LZO- デフォルトでは、Snappyアルゴリズムを使用してファイルが圧縮されます。代わりに、Lempel-Ziv-Oberhumer(LZO)圧縮を適用する場合は、この値を指定します。 - SNAPPY- デフォルトでは、Snappyアルゴリズムを使用してファイルが圧縮されます。オプションでこの値を指定できます。 - NONE- アンロードされたファイルが圧縮されないことを指定します。 - デフォルト: - AUTO
- SNAPPY_COMPRESSION = TRUE | FALSE
- アンロードされたファイルが SNAPPY アルゴリズムを使用して圧縮されるかどうかを指定するブール値。 - 注釈 - 非推奨。 代わりに - COMPRESSION = SNAPPYを使用してください。- デフォルト: - TRUE
コピーオプション(copyOptions)¶
次のコピーオプションを1つ以上指定できます(空白、カンマ、または改行で区切られます):
- OVERWRITE = TRUE | FALSE
- 定義:
- COPY コマンドが、ファイルが保存されている場所にある、一致する名前を持つ既存のファイルを上書きするかどうかを指定するブール値。このオプションは、 COPY コマンドがアンロードするファイルの名前と一致しない既存のファイルを削除 しません 。 - 多くの場合、このオプションを有効にすると、同じ COPY INTO <l場所> ステートメントが複数回実行されたときに、ターゲットステージでのデータの重複を防ぐことができます。しかし、アンロード操作により複数のファイルがステージに書き込まれるとき、Snowflakeは、各ファイル名が並列実行スレッド全体で一意であることを保証するサフィックスを追加します(例: - data_0_1_0)。並列実行スレッドの数は、アンロード操作によって異なります。アンロード操作で書き込まれたファイルのファイル名が前の操作で書き込まれたファイルと同じでない場合、このコピーオプションを含む SQL ステートメントでは既存のファイルを置き換えることができず、ファイルが重複します。- 加えて、まれにマシンまたはネットワークに障害が発生した場合、アンロードジョブは再試行されます。そのシナリオでは、アンロード操作は、最初の試行で以前に書き込まれたファイルを最初に削除せずに、追加のファイルをステージに書き込みます。 - ターゲットステージでのデータの重複を避けるために、 - OVERWRITE = TRUEの代わりに- INCLUDE_QUERY_ID = TRUEコピーオプションを設定し、各アンロードジョブ間のターゲットステージとパスにある、すべてのデータファイルを削除(またはアンロード操作ごとに異なるパスを使用)することをお勧めします。
- デフォルト:
- FALSE
 
- SINGLE = TRUE | FALSE
- 定義:
- 単一のファイルを生成するか複数のファイルを生成するかを指定するブール値。 - FALSEの場合、ファイル名プレフィックスを- pathに含める必要があります。
 - 重要 - SINGLE = TRUEの場合、 COPY は- FILE_EXTENSIONファイル形式オプションを無視し、 データ という名前のファイルを出力します。ファイル拡張子を指定するには、内部または外部ロケーション- pathにファイル名と拡張子を指定します。例:- COPY INTO @mystage/data.csv ... - さらに、 - COMPRESSIONファイル形式オプションがサポートされている圧縮アルゴリズム(例:- GZIP)のいずれかに明示的に設定されている場合、指定された内部または外部ロケーション- pathは、適切なツールを使用してファイルを圧縮解除できるように、対応するファイル拡張子(例:- gz)を持つファイル名で終わる必要があります。例:- COPY INTO @mystage/data.gz ... COPY INTO @mystage/data.csv.gz ... - デフォルト:
- FALSE
 
- MAX_FILE_SIZE = num
- 定義:
- スレッドごとに並列に生成される各ファイルの最大サイズ(バイト単位)を指定します。Snowflakeは、並列実行を利用してパフォーマンスを最適化します。スレッドの数は変更できません。 - 注釈 - 実際のアンロードされるファイルのサイズと数は、並列処理に使用可能なデータの合計量とノードの数によって決定されます。アンロードされるファイルのサイズは、ウェアハウスワーカーで使用可能なメモリによって異なります。使用可能なメモリは以下に基づきます。 - ウェアハウスのサイズと使用可能なリソース。 
- ウェアハウスで実行されている同時クエリの数。 
 - MAX_FILE_SIZE は上限を設定しますが、ファイルがこのサイズに達することを保証しません。メモリ制約のために早期のファイル完了が必要な場合、ファイルが指定された MAX_FILE_SIZE よりも小さい場合があります。 - COPY コマンドは、一度に1セットのテーブル行をアンロードします。非常に小さな - MAX_FILE_SIZE値(例:1 MB 未満)を設定すると、行セット内のデータ量が指定サイズを超える可能性があります。
- デフォルト:
- 16777216 (16 MB) 
- 最大:
- 5368709120 (5 GB) 
 
- INCLUDE_QUERY_ID = TRUE | FALSE
- 定義:
- アンロードされたデータファイルのファイル名に汎用一意識別子(UUID)を含めることにより、アンロードされたファイルを一意に識別するかどうかを指定するブール値。このオプションは、同時 COPY ステートメントがアンロードされたファイルを誤って上書きしないようにするのに役立ちます。 
- 値:
- TRUEの場合、アンロードされたファイルの名前に UUID が追加されます。UUID は、データファイルをアンロードするために使用される COPY ステートメントのクエリ ID です。UUID はファイル名のセグメントです。- <パス>/data_<UUID>_<名前>.<拡張子>。このオプションは、内部リトライが発生した場合に、重複データのアンロードを防ぐこともできます。内部再試行が発生すると、Snowflake はアンロードされたファイルの部分セット(UUID で識別)を削除し、コピー操作を再開します。- FALSEの場合、アンロードされたデータファイルに UUID は追加されません。- 注釈 - INCLUDE_QUERY_ID = TRUEは、アンロードされたテーブル行を個別のファイルに分割する場合のデフォルトのコピーオプション値です(COPY INTO <l場所> ステートメントで- PARTITION BY exprを設定することにより)。この値は FALSE には変更できません。
- 次のコピーオプションのいずれかが設定されている場合、 - INCLUDE_QUERY_ID = TRUEはサポート されません。- SINGLE = TRUE
- OVERWRITE = TRUE
 
- まれに、マシンまたはネットワークに障害が発生した場合、アンロードジョブは再試行されます。そのシナリオでは、アンロード操作により、現在のクエリ ID の UUID でステージに書き込まれたファイルがすべて削除され、データのアンロードが再試行されます。ステージに書き込まれた新しいファイルには、再試行されたクエリ ID が UUID として含まれています。 
 
- デフォルト:
- FALSE
 
- DETAILED_OUTPUT = TRUE | FALSE
- 定義:
- コマンド出力がアンロード操作を説明するか、操作の結果としてアンロードされた個々のファイルを説明するかを指定するブール値。 
- 値:
- TRUEの場合、コマンド出力には、指定されたステージにアンロードされた各ファイルの行が含まれます。列には、各ファイルのパスと名前、そのサイズ、およびファイルにアンロードされた行数が表示されます。
- FALSEの場合、コマンド出力は、アンロード操作全体を説明する単一の行で構成されます。列には、圧縮前と圧縮後(該当する場合)にテーブルからアンロードされたデータの合計量と、アンロードされた行の総数が表示されます。
 
- デフォルト:
- FALSE
 
使用上の注意¶
- STORAGE_INTEGRATIONまたは- CREDENTIALSは、プライベートストレージの場所に直接アンロードする場合のみに適用されます(つまり、Amazon S3、Google Cloud Storage、またはMicrosoft Azure)パブリックバケットにアンロードする場合、安全なアクセスは必要ありません。名前付き外部ステージにアンロードする場合、ステージはバケットへのアクセスに必要なすべての認証情報を提供します。
- 現在の名前空間のファイル形式を参照する場合、形式識別子を囲む単一引用符を省略できます。 
- JSONを- TYPEに指定できるのは、テーブルの VARIANT 列からデータをアンロードする場合のみです。
- タイプ - CSV、- JSON、または- PARQUETのファイルにアンロードする場合、- デフォルトでは、VARIANT列は、出力ファイルで単純なJSON文字列に変換されます。 
- タイプ - PARQUETのファイルにアンロードする場合、- TIMESTAMP_TZ または TIMESTAMP_LTZ データをアンロードするとエラーが発生します。 
- ソーステーブルに0行が含まれている場合、 COPY 操作はデータファイルをアンロード しません。 
- この SQL コマンドは、空ではない保管場所にアンロードするときに警告を返しません。保管場所のファイルがデータパイプラインによって消費されるときの予期しない動作を回避するために、Snowflakeは空の保管場所のみに書き込むことをお勧めします。 
- アンロード操作に失敗しました。 - アンロード操作に失敗しても、データファイルがアンロードされることがあります(ステートメントがキャンセルされた場合やタイムアウト制限を超えた場合など)。パーティション化されたデータのアンロード または - INCLUDE_QUERY_ID = TRUEの場合、Snowflakeはアンロードされたファイルのクリーンアップを試み、失敗したアンロード操作を再試行することがあります。クリーンアップ操作がタイムアウトしてエラーメッセージを返した場合は、失敗したクエリ ID を使用して、ストレージの場所からファイルを見つけて手動で削除することができます。あるいは、 ファイル命名パターン によって、削除するファイルを識別子として指定することもできます。- クリーンアップを容易にし、タイムアウトを回避するため、Snowflakeでは空のストレージにのみアンロードすることを推奨しています。 
- 異なるリージョンのクラウドストレージへのアンロード操作に失敗すると、データ転送コストが発生します。 
 
- 列に マスキングポリシー が設定されている場合は、マスキングポリシーがデータに適用され、許可されていないユーザーに列内のマスキングされたデータが表示されます。 
- このコマンドの実行状況と履歴を表示するには、 QUERY_HISTORY ビュー を使用します。 
- アウトバウンドプライベート接続 の場合、外部の場所(外部ストレージ URI)への直接アンロードはサポートされていません。代わりに、外部プライベート接続用に構成されたストレージ統合の外部ステージを使用します。詳細については、次のトピックをご参照ください。 
詳細については、 明示的に数値列をParquetデータ型に変換する をご参照ください。
例¶
テーブルからテーブルステージにあるファイルへのデータのアンロード¶
フォルダー/ファイル名プレフィックス(result/data_)、名前付きファイル形式(myformat)、およびgzip圧縮を使用して、 orderstiny テーブルからテーブルのステージにデータをアンロードします。
COPY INTO @%orderstiny/result/data_ FROM orderstiny FILE_FORMAT = (FORMAT_NAME ='myformat' COMPRESSION='GZIP');
クエリから名前付き内部ステージのファイルへのデータアンロード¶
フォルダー/ファイル名プレフィックス(result/data_)、名前付きファイル形式(myformat)、およびgzip圧縮を使用して、名前付き内部ステージ(my_stage)にクエリの結果をアンロードします。
COPY INTO @my_stage/result/data_ FROM (SELECT * FROM orderstiny) file_format=(format_name='myformat' compression='gzip');上記の例は、アンロードされたデータを含むファイルが
orderstinyのテーブルの場所ではなく、my_stageのステージの場所に保存されることを除いて、機能的に最初の例と同等です。
テーブルから直接外部ロケーションにあるファイルへのデータのアンロード¶
注釈
このオプションは、 アウトバウンドプライベート接続 ではサポートされていません。代わりに外部ステージを使用します。
名前付き my_csv_format ファイル形式を使用して、テーブル内のすべてのデータを保存場所にアンロードします。
Amazon S3
myintという名前の参照されたストレージ統合を使用して、参照されたS3バケットにアクセスします。COPY INTO 's3://mybucket/unload/' FROM mytable STORAGE_INTEGRATION = myint FILE_FORMAT = (FORMAT_NAME = my_csv_format);提供された認証情報を使用して、参照されたS3バケットにアクセスします。
COPY INTO 's3://mybucket/unload/' FROM mytable CREDENTIALS = (AWS_KEY_ID='xxxx' AWS_SECRET_KEY='xxxxx' AWS_TOKEN='xxxxxx') FILE_FORMAT = (FORMAT_NAME = my_csv_format);
Google Cloud Storage
myintという名前の参照ストレージ統合を使用して、参照された GCS バケットにアクセスします。COPY INTO 'gcs://mybucket/unload/' FROM mytable STORAGE_INTEGRATION = myint FILE_FORMAT = (FORMAT_NAME = my_csv_format);
Microsoft Azure
myintという名前の参照ストレージ統合を使用して、参照されたコンテナーにアクセスします。COPY INTO 'azure://myaccount.blob.core.windows.net/unload/' FROM mytable STORAGE_INTEGRATION = myint FILE_FORMAT = (FORMAT_NAME = my_csv_format);提供された認証情報を使用して、参照されたコンテナーにアクセスします。
COPY INTO 'azure://myaccount.blob.core.windows.net/mycontainer/unload/' FROM mytable CREDENTIALS=(AZURE_SAS_TOKEN='xxxx') FILE_FORMAT = (FORMAT_NAME = my_csv_format);
アンロードされた行のParquetファイルへのパーティション分割¶
次の例では、アンロードされた行を日付列と時間列の2つの列にある値に応じて、Parquetファイルに分割します。この例では、アンロードされた各ファイルの最大サイズを指定しています。
CREATE or replace TABLE t1 (
  dt date,
  ts time
  )
AS
  SELECT TO_DATE($1)
        ,TO_TIME($2)
    FROM VALUES
           ('2020-01-28', '18:05')
          ,('2020-01-28', '22:57')
          ,('2020-01-28', NULL)
          ,('2020-01-29', '02:15')
;
SELECT * FROM t1;
+------------+----------+
| DT         | TS       |
|------------+----------|
| 2020-01-28 | 18:05:00 |
| 2020-01-28 | 22:57:00 |
| 2020-01-28 | 22:32:00 |
| 2020-01-29 | 02:15:00 |
+------------+----------+
-- Partition the unloaded data by date and hour. Set ``32000000`` (32 MB) as the upper size limit of each file to be generated in parallel per thread.
COPY INTO @%t1
  FROM t1
  PARTITION BY ('date=' || to_varchar(dt, 'YYYY-MM-DD') || '/hour=' || to_varchar(date_part(hour, ts))) -- Concatenate labels and column values to output meaningful filenames
  FILE_FORMAT = (TYPE=parquet)
  MAX_FILE_SIZE = 32000000
  HEADER=true;
LIST @%t1;
+------------------------------------------------------------------------------------------+------+----------------------------------+------------------------------+
| name                                                                                     | size | md5                              | last_modified                |
|------------------------------------------------------------------------------------------+------+----------------------------------+------------------------------|
| __NULL__/data_019c059d-0502-d90c-0000-438300ad6596_006_4_0.snappy.parquet                |  512 | 1c9cb460d59903005ee0758d42511669 | Wed, 5 Aug 2020 16:58:16 GMT |
| date=2020-01-28/hour=18/data_019c059d-0502-d90c-0000-438300ad6596_006_4_0.snappy.parquet |  592 | d3c6985ebb36df1f693b52c4a3241cc4 | Wed, 5 Aug 2020 16:58:16 GMT |
| date=2020-01-28/hour=22/data_019c059d-0502-d90c-0000-438300ad6596_006_6_0.snappy.parquet |  592 | a7ea4dc1a8d189aabf1768ed006f7fb4 | Wed, 5 Aug 2020 16:58:16 GMT |
| date=2020-01-29/hour=2/data_019c059d-0502-d90c-0000-438300ad6596_006_0_0.snappy.parquet  |  592 | 2d40ccbb0d8224991a16195e2e7e5a95 | Wed, 5 Aug 2020 16:58:16 GMT |
+------------------------------------------------------------------------------------------+------+----------------------------------+------------------------------+
アンロードされたファイルの NULL/空のフィールドデータの保持¶
アンロードされたファイルの SQL NULL と空のフィールドを保持します。
-- View the table column values SELECT * FROM HOME_SALES; +------------+-------+-------+-------------+--------+------------+ | CITY | STATE | ZIP | TYPE | PRICE | SALE_DATE | |------------+-------+-------+-------------+--------+------------| | Lexington | MA | 95815 | Residential | 268880 | 2017-03-28 | | Belmont | MA | 95815 | Residential | | 2017-02-21 | | Winchester | MA | NULL | Residential | | 2017-01-31 | +------------+-------+-------+-------------+--------+------------+ -- Unload the table data into the current user's personal stage. The file format options retain both the NULL value and the empty values in the output file COPY INTO @~ FROM HOME_SALES FILE_FORMAT = (TYPE = csv NULL_IF = ('NULL', 'null') EMPTY_FIELD_AS_NULL = false); -- Contents of the output file Lexington,MA,95815,Residential,268880,2017-03-28 Belmont,MA,95815,Residential,,2017-02-21 Winchester,MA,NULL,Residential,,2017-01-31
単一ファイルへのデータのアンロード¶
SINGLE コピーオプションを使用して、すべての行を単一のデータファイルにアンロードします。
copy into @~ from HOME_SALES single = true;
アンロードされたファイル名への UUID の包含¶
INCLUDE_QUERY_ID コピーオプションを TRUE に設定して、アンロードされたファイルの名前に UUID を含めます。
-- Unload rows from the T1 table into the T1 table stage:
COPY INTO @%t1
  FROM t1
  FILE_FORMAT=(TYPE=parquet)
  INCLUDE_QUERY_ID=true;
-- Retrieve the query ID for the COPY INTO location statement.
-- This optional step enables you to see that the query ID for the COPY INTO location statement
-- is identical to the UUID in the unloaded files.
SELECT last_query_id();
+--------------------------------------+
| LAST_QUERY_ID()                      |
|--------------------------------------|
| 019260c2-00c0-f2f2-0000-4383001cf046 |
+--------------------------------------+
LS @%t1;
+----------------------------------------------------------------+------+----------------------------------+-------------------------------+
| name                                                           | size | md5                              | last_modified                 |
|----------------------------------------------------------------+------+----------------------------------+-------------------------------|
| data_019260c2-00c0-f2f2-0000-4383001cf046_0_0_0.snappy.parquet |  544 | eb2215ec3ccce61ffa3f5121918d602e | Thu, 20 Feb 2020 16:02:17 GMT |
+----------------------------------------------------------------+------+----------------------------------+-------------------------------+
アンロードするデータの検証(クエリから)¶
検証モードで COPY を実行してクエリの結果を返し、 COPY が通常モードで実行された場合に、 orderstiny テーブルからアンロードされるデータを表示します。
COPY INTO @my_stage
  FROM (SELECT * FROM orderstiny LIMIT 5)
  VALIDATION_MODE='RETURN_ROWS';
出力:
+-----+--------+----+-----------+------------+----------+-----------------+----+---------------------------------------------------------------------------+
|  C1 |   C2   | C3 |    C4     |     C5     |    C6    |       C7        | C8 |                                    C9                                     |
+-----+--------+----+-----------+------------+----------+-----------------+----+---------------------------------------------------------------------------+
|  1  | 36901  | O  | 173665.47 | 1996-01-02 | 5-LOW    | Clerk#000000951 | 0  | nstructions sleep furiously among                                         |
|  2  | 78002  | O  | 46929.18  | 1996-12-01 | 1-URGENT | Clerk#000000880 | 0  |  foxes. pending accounts at the pending\, silent asymptot                 |
|  3  | 123314 | F  | 193846.25 | 1993-10-14 | 5-LOW    | Clerk#000000955 | 0  | sly final accounts boost. carefully regular ideas cajole carefully. depos |
|  4  | 136777 | O  | 32151.78  | 1995-10-11 | 5-LOW    | Clerk#000000124 | 0  | sits. slyly regular warthogs cajole. regular\, regular theodolites acro   |
|  5  | 44485  | F  | 144659.20 | 1994-07-30 | 5-LOW    | Clerk#000000925 | 0  | quickly. bold deposits sleep slyly. packages use slyly                    |
+-----+--------+----+-----------+------------+----------+-----------------+----+---------------------------------------------------------------------------+