COPY INTO <テーブル>¶
データファイルから既存のテーブルにデータをロードします。ファイルはすでに以下のいずれかの場所にある必要があります。
内部ステージ(またはテーブル/ユーザーステージ)という名前。ファイルは、 PUT コマンドを使用してステージングできます。
外部の場所を参照する名前付きの外部ステージ(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)。
取得する前に復元が必要な、アーカイブクラウドストレージクラスに保持されているデータにアクセスすることはできません。これらのアーカイブストレージクラスには、たとえば、Amazon S3 Glacier Flexible RetrievalまたはGlacier Deep Archiveストレージクラス、またはMicrosoft Azure Archive Storageが含まれます。
外部の場所(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)。
- こちらもご参照ください。
構文¶
/* Standard data load */
COPY INTO [<namespace>.]<table_name>
FROM { internalStage | externalStage | externalLocation }
[ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
[ PATTERN = '<regex_pattern>' ]
[ FILE_FORMAT = ( { FORMAT_NAME = '[<namespace>.]<file_format_name>' |
TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
[ copyOptions ]
[ VALIDATION_MODE = RETURN_<n>_ROWS | RETURN_ERRORS | RETURN_ALL_ERRORS ]
/* Data load with transformation */
COPY INTO [<namespace>.]<table_name> [ ( <col_name> [ , <col_name> ... ] ) ]
FROM ( SELECT [<alias>.]$<file_col_num>[.<element>] [ , [<alias>.]$<file_col_num>[.<element>] ... ]
FROM { internalStage | externalStage } )
[ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
[ PATTERN = '<regex_pattern>' ]
[ FILE_FORMAT = ( { FORMAT_NAME = '[<namespace>.]<file_format_name>' |
TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
[ copyOptions ]
条件:
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 MULTI_LINE = TRUE | FALSE PARSE_HEADER = TRUE | FALSE SKIP_HEADER = <integer> SKIP_BLANK_LINES = TRUE | FALSE DATE_FORMAT = '<string>' | AUTO TIME_FORMAT = '<string>' | AUTO TIMESTAMP_FORMAT = '<string>' | AUTO BINARY_FORMAT = HEX | BASE64 | UTF8 ESCAPE = '<character>' | NONE ESCAPE_UNENCLOSED_FIELD = '<character>' | NONE TRIM_SPACE = TRUE | FALSE FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | NONE NULL_IF = ( [ '<string>' [ , '<string>' ... ] ] ) ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE EMPTY_FIELD_AS_NULL = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSE ENCODING = '<string>' | UTF8 -- If FILE_FORMAT = ( TYPE = JSON ... ) COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE DATE_FORMAT = '<string>' | AUTO TIME_FORMAT = '<string>' | AUTO TIMESTAMP_FORMAT = '<string>' | AUTO BINARY_FORMAT = HEX | BASE64 | UTF8 TRIM_SPACE = TRUE | FALSE MULTI_LINE = TRUE | FALSE NULL_IF = ( [ '<string>' [ , '<string>' ... ] ] ) ENABLE_OCTAL = TRUE | FALSE ALLOW_DUPLICATE = TRUE | FALSE STRIP_OUTER_ARRAY = TRUE | FALSE STRIP_NULL_VALUES = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE IGNORE_UTF8_ERRORS = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSE -- If FILE_FORMAT = ( TYPE = AVRO ... ) COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE TRIM_SPACE = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( [ '<string>' [ , '<string>' ... ] ] ) -- If FILE_FORMAT = ( TYPE = ORC ... ) TRIM_SPACE = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( [ '<string>' [ , '<string>' ... ] ] ) -- If FILE_FORMAT = ( TYPE = PARQUET ... ) COMPRESSION = AUTO | SNAPPY | NONE BINARY_AS_TEXT = TRUE | FALSE USE_LOGICAL_TYPE = TRUE | FALSE TRIM_SPACE = TRUE | FALSE USE_VECTORIZED_SCANNER = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( [ '<string>' [ , '<string>' ... ] ] ) -- If FILE_FORMAT = ( TYPE = XML ... ) COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE IGNORE_UTF8_ERRORS = TRUE | FALSE PRESERVE_SPACE = TRUE | FALSE STRIP_OUTER_ELEMENT = TRUE | FALSE DISABLE_AUTO_CONVERT = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSEcopyOptions ::= CLUSTER_AT_INGEST_TIME = TRUE | FALSE ENFORCE_LENGTH = TRUE | FALSE FILE_PROCESSOR = (SCANNER = <custom_scanner_type> SCANNER_OPTIONS = (<scanner_options>)) FORCE = TRUE | FALSE INCLUDE_METADATA = ( <column_name> = METADATA$<field> [ , <column_name> = METADATA${field} ... ] ) LOAD_MODE = { FULL_INGEST | ADD_FILES_COPY } LOAD_UNCERTAIN_FILES = TRUE | FALSE MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE ON_ERROR = { CONTINUE | SKIP_FILE | SKIP_FILE_<num> | 'SKIP_FILE_<num>%' | ABORT_STATEMENT } PURGE = TRUE | FALSE RETURN_FAILED_ONLY = TRUE | FALSE SIZE_LIMIT = <num> TRUNCATECOLUMNS = TRUE | FALSE
必須パラメーター¶
[namespace.]table_nameデータがロードされるテーブルの名前を指定します。
名前空間は、オプションでテーブルのデータベースまたはスキーマ、あるいはその両方を
database_name.schema_nameまたはschema_nameの形式で指定します。ユーザーセッション内でデータベースとスキーマが現在使用されている場合は オプション です。それ以外の場合は必須です。FROM ...ロードするデータを含むファイルがステージングされる内部または外部ロケーションを指定します。
@[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は、ロードするファイルのセットを制限するクラウドストレージの場所にある、ファイルの大文字と小文字を区別するオプションのパスです(つまり、ファイルの名前は一般的な文字列で開始)。パスは、別のクラウドストレージサービスによって プレフィックス または フォルダー と呼ばれることもあります。「パス」は名前のリテラルプレフィックスであるため、
/./や/../などの相対パス修飾子は文字どおりに解釈されます。例:-- S3 bucket COPY INTO mytable FROM 's3://mybucket/./../a.csv'; -- Google Cloud Storage bucket COPY INTO mytable FROM 'gcs://mybucket/./../a.csv'; -- Azure container COPY INTO mytable FROM 'azure://myaccount.blob.core.windows.net/mycontainer/./../a.csv';
これらのCOPYステートメントでは、Snowflakeは外部の場所で文字通り
./../a.csvという名前のファイルを探します。
注釈
内部または外部のステージ、またはパス名にスペースなどの特殊文字が含まれている場合は、
FROM ...文字列を一重引用符で囲みます。FROM ...値は、リテラル定数にする必要があります。値を SQL 変数 にすることはできません。
追加のクラウドプロバイダーパラメーター¶
STORAGE_INTEGRATION = integration_nameまたは .CREDENTIALS = ( cloud_specific_credentials )COPY ステートメントの FROM 値が、外部ステージ名ではなく外部ストレージ URI の場合にサポートされます。
外部のプライベート/保護されたクラウドストレージの場所からロードする場合のみに必要です。パブリックバケット/コンテナーには必要ありません
クラウドプロバイダーに接続し、データファイルがステージされるプライベート/保護されたストレージコンテナーにアクセスするためのセキュリティ認証情報を指定します。
Amazon S3
STORAGE_INTEGRATION = integration_name外部クラウドストレージの認証責任をSnowflake IDおよびアクセス管理(IAM)エンティティに委任するために使用されるストレージ統合の名前を指定します。詳細については、 CREATE STORAGE INTEGRATION をご参照ください。
注釈
ストレージ統合の使用を強くお勧めします。このオプションにより、ステージの作成時またはデータのロード時に CREDENTIALS パラメーターを使用してクラウドストレージの認証情報を提供する必要がなくなります。
CREDENTIALS = ( AWS_KEY_ID = 'string' AWS_SECRET_KEY = 'string' [ AWS_TOKEN = 'string' ] )AWS に接続し、ロードするファイルがステージングされるプライベート/保護されたS3バケットにアクセスするためのセキュリティ認証情報を指定します。詳細については、 Amazon S3へのセキュアアクセスの構成 をご参照ください。
指定する認証情報は、バケットのSnowflakeアクセス許可を AWS IAM (識別およびアクセス管理)ユーザーまたはロールに関連付けたかどうかによって異なります。
IAM ユーザー: 一時的な IAM 認証情報が必要です。一時的な(別名「スコープ」)認証情報は AWS セキュリティトークンサービス(STS)によって生成され、3つのコンポーネントで構成されます。
AWS_KEY_IDAWS_SECRET_KEYAWS_TOKEN
プライベート/保護されたバケットにアクセスするには、3つすべてが 必要 です。指定された期間が経過すると、仮の認証情報は期限切れになり、使用できなくなります。そうすると、有効な一時的な認証情報の新しいセットを生成する必要があります。
重要
COPY コマンドには、複雑な構文と認証情報などの機密情報が含まれます。さらに、これらは頻繁に実行され、スクリプトまたはワークシートに保存されることが多いため、機密情報が誤って公開される可能性があります。COPY コマンドを使用すると、永続的な(別名「長期」)認証情報を使用できます。ただし、セキュリティ上の理由から、 永久 認証情報を COPY コマンドで使用しないでください。代わりに、一時的な認証情報を使用します。
永続的な認証情報を使用する必要がある場合は、 外部ステージ を使用します。認証情報が1回入力され、安全に保存されるため、暴露の可能性が最小限に抑えられます。
IAM ロール: セキュリティ認証情報とアクセスキーを省略し、代わりに
AWS_ROLEを使用してロールを識別し、 AWS ロール ARN (Amazonリソース名)を指定します。
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 をご参照ください。
注釈
ストレージ統合の使用を強くお勧めします。このオプションにより、ステージの作成時またはデータのロード時に 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値を受け入れるサーバー側の暗号化。NONE:暗号化なし。
暗号化タイプの詳細については、 クライアント側の暗号化 または サーバー側の暗号化 の AWS ドキュメントをご参照ください。
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ビットキーである必要があります。
変換パラメーター¶
( SELECT [alias.]$file_col_num[.element] [ , [alias.]$file_col_num[.element] ... ] FROM ... [ alias ] )ロード中にデータを変換するために必要
ステージングされたデータファイルからロードする明示的なフィールド/列のセット(カンマ区切り)を指定します。フィールド/列は、標準の SQL クエリ(つまり SELECT リスト)を使用してファイルから選択されます。条件:
aliasFROM値のオプションのエイリアスを指定します(例:COPY INTO t1 (c1) FROM (SELECT d.$1 FROM @mystage/file1.csv.gz d);のd)。file_col_numロードするデータを含む(ファイル内の)フィールド/列の位置番号を指定します(最初のフィールドには
1、2番目のフィールドには2など)elementデータファイル内の繰り返し値のパスと要素名を指定します( 半構造化データファイル にのみ適用)。
SELECT リストは、ロード元のデータファイル内のフィールド/列の番号付きセットを定義します。リストはターゲットテーブルの列のシーケンスと一致する 必要があります 。オプションの
( col_name [ , col_name ... ] )パラメーターを使用して、ターゲットテーブルの特定の列にリストをマップできます。データファイルの実際のフィールド/列の順序は、ターゲットテーブルの列の順序と異なる場合があることに注意してください。重要なのは、 SELECT リストがデータファイルのフィールド/列をテーブルの 対応する 列にマップすることです。
注釈
変換に使用される SELECT ステートメントは、すべての関数をサポートしているわけではありません。サポートされている関数の完全なリストと、例を含むデータ読み込み変換の詳細については、 ロード中のデータの変換 の使用上の注意をご参照ください。
また、データロード変換 のみ は、ユーザーステージおよび名前付きステージ(内部または外部)からのデータの選択をサポートしています。
( col_name [ , col_name ... ] )オプションで、データを挿入するテーブル列の明示的なリスト(カンマ区切り)を指定します。
最初の列は、ロードされたファイルから抽出された最初のフィールド/列から生成された値を消費します。
2番目の列は、ロードされたファイルから抽出された2番目のフィールド/列から生成された値を消費します。
上記のように順序が指定されます。
このリストで列を繰り返すことはできません。この列リストから除外された列には、デフォルト値(指定されていない場合はNULL)が入力されます。ただし、除外された列は、デフォルト値としてシーケンスを持つことは できません 。
オプションのパラメーター¶
FILES = ( 'file_name' [ , 'file_name' ... ] )ロードする1つ以上のファイル名のリスト(コンマで区切る)を指定します。ファイルは、コマンドで指定されたSnowflake内部の場所または外部の場所のいずれかに既にステージングされている必要があります。指定されたいずれのファイルも見つからない場合は、 COPY ステートメントで別の
ON_ERRORオプションが明示的に設定されていない限り、デフォルトの動作ON_ERROR = ABORT_STATEMENTはロード操作を中止します。指定できるファイル名の最大数は1000です。
注釈
外部ステージのみ(つまり、Amazon S3、Google Cloud Storage、またはMicrosoft Azure)、ステージ定義の URL と解決されたファイル名のリストを連結することにより、ファイルパスが設定されます。
ただし、Snowflakeはパス名とファイル名の間に暗黙的に区切り文字を挿入しません。ステージ定義の URL の末尾、またはこのパラメーターで指定された各ファイル名の先頭のいずれかに明示的に区切り文字(
/)を含める必要があります。PATTERN = 'regex_pattern'一致するファイル名やパスを指定する、単一引用符で囲まれた正規表現パターン文字列。
Tip
最高のパフォーマンスを得るには、多数のファイルをフィルターするパターンを適用しないようにしてください。
正規表現は、異なる方法で一括データロードとSnowpipeデータロードに適用されることに注意してください。
Snowpipe trims any path segments in the stage definition from the storage location and applies the regular expression to any remaining path segments and filenames. To view the stage definition, execute the DESCRIBE STAGE command for the stage. The URL property consists of the bucket or container name and zero or more path segments. For example, if the FROM location in a COPY INTO <table> statement is
@s/path1/path2/and the URL value for stage@siss3://mybucket/path1/, then Snowpipe trimss3://mybucket/path1/path2/from the storage location in the FROM clause and applies the regular expression to the remaining filenames in the path.一括データロード操作は、 FROM 句の保存場所全体に正規表現を適用します。
注釈
FILESとPATTERNオプションを一緒に使うと、FILESオプションで指定したパスだけが読み込まれます。この2つのオプションは併用しないことをお勧めします。FILE_FORMAT = ( FORMAT_NAME = 'file_format_name' )または .FILE_FORMAT = ( TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML [ ... ] )ロードするデータの形式を指定します。
FORMAT_NAME = 'file_format_name'テーブルへのデータのロードに使用する既存の名前付きファイル形式を指定します。名前付きファイル形式は、データファイルの形式タイプ(CSV、 JSONなど)およびその他の形式オプションを決定します。詳細については、 CREATE FILE FORMAT をご参照ください。
TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML [ ... ]テーブルにロードするファイルのタイプを指定します。形式タイプが指定されている場合、追加の形式固有のオプションを指定できます。詳細については、 形式タイプオプション (このトピック)をご参照ください。
注釈
FORMAT_NAMEとTYPEは相互に排他的です。同じ COPY コマンドで両方を指定すると、予期しない動作が発生する可能性があります。COPY_OPTIONS = ( ... )ロードされたデータの1つ以上のコピーオプションを指定します。詳細については、 コピーオプション (このトピック内)をご参照ください。
VALIDATION_MODE = RETURN_n_ROWS | RETURN_ERRORS | RETURN_ALL_ERRORS指定したテーブルにデータファイルをロードする 代わりに 、 COPY コマンドにデータファイルを検証するよう指示する文字列(定数)。つまり、 COPY コマンドはファイルのエラーをテストしますが、ロードしません。このコマンドは、ロードされるデータを検証し、指定された検証オプションに基づいて結果を返します。
サポートされる値
注意
RETURN_n_ROWS(例:RETURN_10_ROWS)エラーが発生しない場合、指定された行数を検証します。そうでない場合、行で最初に発生したエラーで不合格となります。
RETURN_ERRORSCOPY ステートメントで指定されたすべてのファイルにわたるすべてのエラー(解析、変換など)を返します。
RETURN_ALL_ERRORSロード中に
ON_ERRORコピーオプションがCONTINUEに設定されていたため、以前のロード中に部分的にロードされたエラーを含む、 COPY ステートメントで指定されたすべてのファイルにわたるすべてのエラーを返します。注釈
VALIDATION_MODEは、ロード中にデータを変換する COPY ステートメントをサポートしません。パラメーターが指定されている場合、 COPY ステートメントはエラーを返します。Icebergテーブルでは、
VALIDATION_MODEはサポートされていません。VALIDATE テーブル関数を使用して、以前のロード中に発生したすべてのエラーを表示します。この関数も、ロード中にデータを変換する COPY ステートメントをサポートしません。
形式タイプオプション(formatTypeOptions)¶
指定したファイル形式タイプ(FILE_FORMAT = ( TYPE = ... ))に応じて、次の形式固有のオプションを1つ以上含めることができます(空白、コンマ、または改行で区切る)。
TYPE = CSV¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONEロードするデータファイルの現在の圧縮アルゴリズムを指定する文字列(定数)。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
サポートされる値
注意
AUTO現在は自動検出できないBrotliで圧縮されたファイルを除き、圧縮アルゴリズムは自動的に検出されます。Brotliで圧縮されたファイルをロードする場合は、
AUTOではなくBROTLIを明示的に使用してください。GZIPBZ2BROTLIBrotliで圧縮されたファイルをロードするときには、指定する必要があります。
ZSTDZstandard v0.8(およびそれ以上)がサポートされています。
DEFLATEDeflate圧縮されたファイル(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の値も受け入れます。- デフォルト:
コンマ(
,)
MULTI_LINE = TRUE | FALSE複数行を許すかどうかを指定するブール。
MULTI_LINE が
FALSEに設定され、指定されたレコード区切り文字が CSV フィールド内に存在する場合、そのフィールドを含むレコードはエラーとして解釈されます。- デフォルト:
TRUE
注釈
RFC4180 仕様に従った大きな非圧縮 CSV ファイル(128MB より大きい)をロードする場合、MULTI_LINE が
FALSEに、COMPRESSION がNONEに、ON_ERROR がABORT_STATEMENTまたはCONTINUEに設定されているときは、Snowflakeはこれら CSV ファイルの平行スキャンをサポートします。PARSE_HEADER = TRUE | FALSEデータファイルにある最初の行のヘッダーを使用して列名を決定するかどうかを指定するブール値。
このファイル形式オプションは、次のアクションにのみ適用されます。
INFER_SCHEMA 関数を使用した、列定義の自動検出。
INFER_SCHEMA 関数と MATCH_BY_COLUMN_NAME コピーオプションを使用した、個別の列への CSV データロード。
オプションが TRUE に設定されている場合は、最初の行のヘッダーが列名を決定するために使われます。デフォルト値 FALSE は、列名をc として返します。 は列の位置です。
なお、 SKIP_HEADER オプションは、 PARSE_HEADER = TRUE ではサポートされません。
- デフォルト:
FALSE
SKIP_HEADER = integerスキップするファイルの先頭の行数。
SKIP_HEADER は RECORD_DELIMITER または FIELD_DELIMITER の値を使用してヘッダー行を決定しないことに注意してください。むしろ、指定された数の CRLF (キャリッジリターン、ラインフィード)で区切られたファイル内の行を単にスキップします。ロードするデータの行を決定するのには、RECORD_DELIMITER および FIELD_DELIMITER が使用されます。
- デフォルト:
0
SKIP_BLANK_LINES = TRUE | FALSE- 使用:
データのロードのみ
- 定義:
データファイルで検出された空白行のスキップを指定するブール値。それ以外の場合、空白行は記録終了エラーを生成します(デフォルトの動作)。
- デフォルト:
FALSE
DATE_FORMAT = 'string' | AUTOロードするデータファイルの日付値の形式を定義する文字列。値が指定されていない場合、または
AUTOの場合、 DATE_INPUT_FORMAT セッションパラメーターの値が使用されます。- デフォルト:
AUTO
TIME_FORMAT = 'string' | AUTOロードするデータファイルの時間値の形式を定義する文字列。値が指定されていない場合、または
AUTOの場合、 TIME_INPUT_FORMAT セッションパラメーターの値が使用されます。- デフォルト:
AUTO
TIMESTAMP_FORMAT = 'string' | AUTOロードするデータファイルのタイムスタンプ値の形式を定義する文字列。値が指定されていない場合、または
AUTOの場合、 TIMESTAMP_INPUT_FORMAT セッションパラメーターの値が使用されます。- デフォルト:
AUTO
BINARY_FORMAT = HEX | BASE64 | UTF8バイナリ入力または出力のエンコード形式を定義する文字列(定数)。このオプションは、テーブルのバイナリ列にデータをロードする場合にのみ適用されます。
- デフォルト:
HEX
ESCAPE = 'character' | NONE- 使用:
データのロードとアンロード
- 定義:
囲まれているフィールド値専用のエスケープ文字として使用されるシングルバイト文字。エスケープ文字は、文字シーケンス内の後続の文字に対して代替解釈を呼び出します。ESCAPE 文字を使用して、データ内の
FIELD_OPTIONALLY_ENCLOSED_BY文字のインスタンスをリテラルとして解釈できます。
一般的なエスケープシーケンス(例えば、
\tはタブ、\nは改行、\rはキャリッジリターン、\\はバックスラッシュ)、8進数値、16進数値を受け付けます。注釈
このファイル形式オプションは、シングルバイト文字のみをサポートします。UTF-8文字エンコードは、上位の ASCII 文字をマルチバイト文字として表すことに注意してください。データファイルが UTF-8文字セットでエンコードされている場合は、オプション値として上位の ASCII 文字を指定することはできません。
さらに、上位の ASCII 文字を指定する場合は、データファイルの文字エンコードとして
ENCODING = 'string'ファイル形式オプションを設定して、文字が正しく解釈されるようにすることをお勧めします。- デフォルト:
NONE
ESCAPE_UNENCLOSED_FIELD = 'character' | NONE- 使用:
データのロードとアンロード
- 定義:
囲まれていないフィールド値専用のエスケープ文字として使用されるシングルバイト文字。エスケープ文字は、文字シーケンス内の後続の文字に対して代替解釈を呼び出します。ESCAPE 文字を使用して、データ内の
FIELD_DELIMITERまたはRECORD_DELIMITER文字のインスタンスをリテラルとして解釈できます。エスケープ文字は、データ内のそれ自体のインスタンスをエスケープするためにも使用できます。
一般的なエスケープシーケンス(例えば、
\tはタブ、\nは改行、\rはキャリッジリターン、\\はバックスラッシュ)、8進数値、16進数値を受け付けます。注釈
デフォルト値は
\\です。データファイルの行がバックスラッシュ(\)文字で終わる場合、この文字はRECORD_DELIMITERファイル形式オプションに指定された改行文字または復帰文字をエスケープします。その結果、ロード操作はこの行と次の行を単一のデータ行として扱います。この問題を回避するには、この値をNONEに設定します。このファイル形式オプションは、シングルバイト文字のみをサポートします。UTF-8文字エンコードは、上位の ASCII 文字をマルチバイト文字として表すことに注意してください。データファイルが UTF-8文字セットでエンコードされている場合は、オプション値として上位の ASCII 文字を指定することはできません。
さらに、上位の ASCII 文字を指定する場合は、データファイルの文字エンコードとして
ENCODING = 'string'ファイル形式オプションを設定して、文字が正しく解釈されるようにすることをお勧めします。
- デフォルト:
バックスラッシュ(
\\)
TRIM_SPACE = TRUE | FALSEフィールドから空白を削除するかどうかを指定するブール値。
たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeは引用符の先頭文字ではなく、先頭のスペースをフィールドの先頭として読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを使用して、データのロード中に不要なスペースを削除します。
別の例として、文字列を囲む引用符を前後のスペースで囲む場合、
TRIM_SPACEオプションを使用して周囲のスペースを削除し、FIELD_OPTIONALLY_ENCLOSED_BYオプションを使用して引用符を削除できます。引用符 内 のスペースは保持されることに注意してください。例えば、フィールド区切り文字が
|およびFIELD_OPTIONALLY_ENCLOSED_BY = '"'であると仮定します。|"Hello world"| |" Hello world "| | "Hello world" |
次のようになります:
+---------------+ | C1 | |----+----------| | Hello world | | Hello world | | Hello world | +---------------+
- デフォルト:
FALSE
FIELD_OPTIONALLY_ENCLOSED_BY = 'character' | NONE文字列を囲むのに使用される文字。値は、
NONE、一重引用符(')、または二重引用符(")のいずれかです。一重引用符を使用するには、8進数または16進数表現(0x27)または二重引用符で囲まれたエスケープ('')を使用します。- デフォルト:
NONE
NULL_IF = ( [ 'string1' [ , 'string2' ... ] ] )SQL NULL との間の変換に使用される文字列。Snowflakeはデータロードソースのこれらの文字列を SQL NULL に置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。
Snowflakeは、データ型に関係なく、値のすべてのインスタンスを NULL に変換することに注意してください。たとえば、
2が値として指定されている場合は、文字列または数値としての2のインスタンスすべてが変換されます。例:
NULL_IF = ('\N', 'NULL', 'NUL', '')このオプションには空の文字列を含めることができます。
- デフォルト:
\N(つまり、 NULL。これはESCAPE_UNENCLOSED_FIELD値が\\(デフォルト)であると想定します)
ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE入力データファイルの区切り列(つまり、フィールド)の数が対応するテーブルの列の数と一致しない場合に、解析エラーを生成するかどうかを指定するブール値。
FALSEに設定すると、エラーは生成されず、ロードが続行されます。ファイルが正常にロードされた場合:入力ファイルに、テーブル内の列よりもフィールド数が多いレコードが含まれている場合、一致するフィールドはファイル内の出現順にロードされ、残りのフィールドはロードされません。
入力ファイルにテーブル内の列よりもフィールド数が少ない記録が含まれている場合、テーブル内の一致しない列は NULL 値でロードされます。
このオプションは、入力ファイル内のすべての記録が同じ長さであることを前提としています(つまり、長さの異なる記録を含むファイルは、このオプションに指定された値に関係なくエラーを返します)。
- デフォルト:
TRUE
注釈
ロード中にデータを変換する場合 (つまり、 COPY INTO <テーブル> コマンドのソースとしてクエリを使用する場合)、このオプションは無視されます。データファイルは、ターゲットテーブルと同数および同順序の列にする必要はありません。
REPLACE_INVALID_CHARACTERS = TRUE | FALSE無効な UTF -8文字をUnicode置換文字(
�)で置き換えるかどうかを指定するブール値。コピーオプションは、1対1の文字置換を実行します。TRUEに設定すると、Snowflakeは無効な UTF-8文字をUnicode置換文字に置き換えます。FALSEに設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト:
FALSE
EMPTY_FIELD_AS_NULL = TRUE | FALSE入力ファイル内の空フィールドに対して SQL NULL を挿入するかどうかを指定するブール。空フィールドは2つの連続した区切り文字で表されます(例えば、
,,)。FALSEに設定すると、Snowflakeは空のフィールドを対応する列タイプにキャストしようとします。タイプ STRING の列に空の文字列が挿入されます。他の列タイプの場合、 COPYINTO <テーブル> コマンドはエラーを生成します。- デフォルト:
TRUE
SKIP_BYTE_ORDER_MARK = TRUE | FALSEデータファイルに存在する場合、 BOM (バイト順マーク)をスキップするかどうかを指定するブール値。BOM は、データファイルの先頭にある文字コードで、バイト順とエンコード形式を定義します。
FALSEに設定されている場合、Snowflakeはデータファイル内の BOM を認識し、 BOM がエラーの原因になるか、テーブルの最初の列にマージされる可能性があります。- デフォルト:
TRUE
ENCODING = 'string'ソースデータの文字セットを指定する文字列(定数)。
文字 セット
ENCODING値サポートされている言語
注意
Big5
BIG5中国語(繁体字)
EUC-JP
EUCJP日本語
EUC-KR
EUCKR韓国語
GB18030
GB18030中国語
IBM420
IBM420アラビア語
IBM424
IBM424ヘブライ語
IBM949
IBM949韓国語
ISO-2022-CN
ISO2022CN中国語(簡体字)
ISO-2022-JP
ISO2022JP日本語
ISO-2022-KR
ISO2022KR韓国語
ISO-8859-1
ISO88591デンマーク語、オランダ語、英語、フランス語、ドイツ語、イタリア語、ノルウェー語、ポルトガル語、スウェーデン語
ISO-8859-2
ISO88592チェコ語、ハンガリー語、ポーランド語、ルーマニア語
ISO-8859-5
ISO88595ロシア語
ISO-8859-6
ISO88596アラビア語
ISO-8859-7
ISO88597ギリシャ語
ISO-8859-8
ISO88598ヘブライ語
ISO-8859-9
ISO88599トルコ語
ISO-8859-15
ISO885915デンマーク語、オランダ語、英語、フランス語、ドイツ語、イタリア語、ノルウェー語、ポルトガル語、スウェーデン語
ユーロ通貨記号を含む8文字を除いて、 ISO-8859-1と同じです。
KOI8-R
KOI8Rロシア語
Shift_JIS
SHIFTJIS日本語
UTF-8
UTF8すべての言語
区切りファイル(CSV、 TSVなど)からデータをロードする場合、 UTF-8がデフォルトです。. . サポートされている他のすべてのファイル形式(JSON、Avroなど)からデータをロードおよびアンロードする場合、サポートされる文字セットは UTF-8のみです。
UTF-16
UTF16すべての言語
UTF-16BE
UTF16BEすべての言語
UTF-16LE
UTF16LEすべての言語
UTF-32
UTF32すべての言語
UTF-32BE
UTF32BEすべての言語
UTF-32LE
UTF32LEすべての言語
windows-874
WINDOWS874タイ
windows-949
WINDOWS949韓国語
windows-1250
WINDOWS1250チェコ語、ハンガリー語、ポーランド語、ルーマニア語
windows-1251
WINDOWS1251ロシア語
windows-1252
WINDOWS1252デンマーク語、オランダ語、英語、フランス語、ドイツ語、イタリア語、ノルウェー語、ポルトガル語、スウェーデン語
windows-1253
WINDOWS1253ギリシャ語
windows-1254
WINDOWS1254トルコ語
windows-1255
WINDOWS1255ヘブライ語
windows-1256
WINDOWS1256アラビア語
- デフォルト:
UTF8
注釈
Snowflakeは、すべてのデータを UTF -8文字セットで内部に保存します。データは、Snowflakeにロードされる前に UTF-8に変換されます。
TYPE = JSON¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONEロードするデータファイルの現在の圧縮アルゴリズムを指定する文字列(定数)。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
サポートされる値
注意
AUTO現在は自動検出できないBrotliで圧縮されたファイルを除き、圧縮アルゴリズムは自動的に検出されます。Brotliで圧縮されたファイルをロードする場合は、
AUTOではなくBROTLIを明示的に使用してください。GZIPBZ2BROTLIZSTDDEFLATEDeflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。
RAW_DEFLATE生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。
NONEデータをロードするためのファイルが圧縮されていないことを示します。
- デフォルト:
AUTO
DATE_FORMAT = 'string' | AUTOデータファイルの日付文字列値の形式を定義します。値が指定されていない場合、または
AUTOの場合は、 DATE_INPUT_FORMAT パラメーターの値が使用されます。このファイル形式オプションは、次のアクションにのみ適用されます。
MATCH_BY_COLUMN_NAME コピーオプションを使用して、 JSON データを個別の列にロードします。
COPY ステートメント(つまり、 COPY 変換)でクエリを指定して、 JSON データを個別の列にロードします。
- デフォルト:
AUTO
TIME_FORMAT = 'string' | AUTOデータファイルの時間文字列値の形式を定義します。値が指定されていない場合、または
AUTOの場合は、 TIME_INPUT_FORMAT パラメーターの値が使用されます。このファイル形式オプションは、次のアクションにのみ適用されます。
MATCH_BY_COLUMN_NAME コピーオプションを使用して、 JSON データを個別の列にロードします。
COPY ステートメント(つまり、 COPY 変換)でクエリを指定して、 JSON データを個別の列にロードします。
- デフォルト:
AUTO
TIMESTAMP_FORMAT = string' | AUTOデータファイルのタイムスタンプ文字列値の形式を定義します。値が指定されていない場合、または
AUTOの場合は、 TIMESTAMP_INPUT_FORMAT パラメーターの値が使用されます。このファイル形式オプションは、次のアクションにのみ適用されます。
MATCH_BY_COLUMN_NAME コピーオプションを使用して、 JSON データを個別の列にロードします。
COPY ステートメント(つまり、 COPY 変換)でクエリを指定して、 JSON データを個別の列にロードします。
- デフォルト:
AUTO
BINARY_FORMAT = HEX | BASE64 | UTF8データファイル内のバイナリ文字列値のエンコード形式を定義します。このオプションは、テーブルのバイナリ列にデータをロードするときに使用できます。
このファイル形式オプションは、次のアクションにのみ適用されます。
MATCH_BY_COLUMN_NAME コピーオプションを使用して、 JSON データを個別の列にロードします。
COPY ステートメント(つまり、 COPY 変換)でクエリを指定して、 JSON データを個別の列にロードします。
- デフォルト:
HEX
TRIM_SPACE = TRUE | FALSE文字列から先頭と末尾の空白を削除するかどうかを指定するブール値。
たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeは引用符の先頭文字ではなく、先頭のスペースをフィールドの先頭として読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを
TRUEに設定すると、データのロード中に不要なスペースが削除されます。このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用して JSON データを個別の列にロードする場合にのみ、次のアクションに適用されます。
- デフォルト:
FALSE
MULTI_LINE = TRUE | FALSE複数行を許すかどうかを指定するブール。
MULTI_LINE が
FALSEに設定され、 JSON レコード内に改行がある場合、改行を含むレコードはエラーとして解釈されます。- デフォルト:
TRUE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )SQL NULL との間の変換に使用される文字列。Snowflakeはデータロードソースのこれらの文字列を SQL NULL に置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。
このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用して JSON データを個別の列にロードする場合にのみ、次のアクションに適用されます。
Snowflakeは、データ型に関係なく、値のすべてのインスタンスを NULL に変換することに注意してください。たとえば、
2が値として指定されている場合は、文字列または数値としての2のインスタンスすべてが変換されます。例:
NULL_IF = ('\N', 'NULL', 'NUL', '')このオプションには空の文字列を含めることができます。
- デフォルト:
\N(つまり、 NULL)
ENABLE_OCTAL = TRUE | FALSE8進数の解析を可能にするブール値。
- デフォルト:
FALSE
ALLOW_DUPLICATE = TRUE | FALSEオブジェクトフィールド名の重複を許可するブール値(最後のフィールドのみが保持されます)。
- デフォルト:
FALSE
STRIP_OUTER_ARRAY = TRUE | FALSEJSON パーサーに外括弧
[ ]を削除するように指示するブール値。- デフォルト:
FALSE
STRIP_NULL_VALUES = TRUE | FALSEnull値を含むオブジェクトフィールドまたは配列要素を削除するように JSON パーサーに指示するブール値。たとえば、TRUEに設定されている場合:前
後
[null][][null,null,3][,,3]{"a":null,"b":null,"c":123}{"c":123}{"a":[1,null,2],"b":{"x":null,"y":88}}{"a":[1,,2],"b":{"y":88}}- デフォルト:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE無効な UTF -8文字をUnicode置換文字(
�)で置き換えるかどうかを指定するブール値。コピーオプションは、1対1の文字置換を実行します。TRUEに設定すると、Snowflakeは無効な UTF-8文字をUnicode置換文字に置き換えます。FALSEに設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト:
FALSE
IGNORE_UTF8_ERRORS = TRUE | FALSEUTF-8エンコードエラーがエラー状態を引き起こすかどうかを指定するブール値。
REPLACE_INVALID_CHARACTERSの代替構文です。TRUEに設定すると、無効な UTF-8シーケンスはUnicode文字U+FFFD(つまり、「置換文字」)で警告なしに置き換えられます。FALSEに設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト:
FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE入力ファイルに存在する BOM (バイト順マーク)をスキップするかどうかを指定するブール値。BOM は、データファイルの先頭にある文字コードで、バイト順とエンコード形式を定義します。
FALSEに設定されている場合、Snowflakeはデータファイル内の BOM を認識し、 BOM がエラーの原因になるか、テーブルの最初の列にマージされる可能性があります。- デフォルト:
TRUE
TYPE = AVRO¶
COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONEロードするデータファイルの現在の圧縮アルゴリズムを指定する文字列(定数)。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
サポートされる値
注意
AUTO現在は自動検出できないBrotliで圧縮されたファイルを除き、圧縮アルゴリズムは自動的に検出されます。Brotliで圧縮されたファイルをロードする場合は、
AUTOではなくBROTLIを明示的に使用してください。GZIPBROTLIZSTDDEFLATEDeflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。
RAW_DEFLATE生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。
NONEロードするデータファイルは圧縮されていません。
- デフォルト:
AUTO。
注釈
ファイル圧縮とコーデック圧縮の両方が決定されるため、デフォルトの
AUTOオプションを使用することをお勧めします。圧縮オプションの指定は、ブロック(コーデック)の圧縮ではなく、ファイルの圧縮を意味します。TRIM_SPACE = TRUE | FALSE文字列から先頭と末尾の空白を削除するかどうかを指定するブール値。
たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeは引用符の先頭文字ではなく、先頭のスペースをフィールドの先頭として読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを
TRUEに設定すると、データのロード中に不要なスペースが削除されます。このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してAvroデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
- デフォルト:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE無効な UTF -8文字をUnicode置換文字(
�)で置き換えるかどうかを指定するブール値。コピーオプションは、1対1の文字置換を実行します。TRUEに設定すると、Snowflakeは無効な UTF-8文字をUnicode置換文字に置き換えます。FALSEに設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト:
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )SQL NULL との間の変換に使用される文字列。Snowflakeはデータロードソースのこれらの文字列を SQL NULL に置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。
このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してAvroデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
Snowflakeは、データ型に関係なく、値のすべてのインスタンスを NULL に変換することに注意してください。たとえば、
2が値として指定されている場合は、文字列または数値としての2のインスタンスすべてが変換されます。例:
NULL_IF = ('\N', 'NULL', 'NUL', '')このオプションには空の文字列を含めることができます。
- デフォルト:
\N(つまり、 NULL)
TYPE = ORC¶
TRIM_SPACE = TRUE | FALSE文字列から先頭と末尾の空白を削除するかどうかを指定するブール値。
たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeは引用符の先頭文字ではなく、先頭のスペースをフィールドの先頭として読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを
TRUEに設定すると、データのロード中に不要なスペースが削除されます。このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してOrcデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
- デフォルト:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE無効な UTF -8文字をUnicode置換文字(
�)で置き換えるかどうかを指定するブール値。コピーオプションは、1対1の文字置換を実行します。TRUEに設定すると、Snowflakeは無効な UTF-8文字をUnicode置換文字に置き換えます。FALSEに設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト:
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )SQL NULL との間の変換に使用される文字列。Snowflakeはデータロードソースのこれらの文字列を SQL NULL に置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。
このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してOrcデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
Snowflakeは、データ型に関係なく、値のすべてのインスタンスを NULL に変換することに注意してください。たとえば、
2が値として指定されている場合は、文字列または数値としての2のインスタンスすべてが変換されます。例:
NULL_IF = ('\N', 'NULL', 'NUL', '')このオプションには空の文字列を含めることができます。
- デフォルト:
\N(つまり、 NULL)
TYPE = PARQUET¶
COMPRESSION = AUTO | SNAPPY | NONEロードするデータファイルの現在の圧縮アルゴリズムを指定する文字列(定数)。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
サポートされる値
注意
AUTO圧縮アルゴリズムが自動的に検出されました。対応する圧縮アルゴリズム:Brotli、gzip、Lempel-Ziv-Oberhumer(LZO)、LZ4、Snappy、またはZstandard v0.8(およびそれ以上)。
SNAPPYNONEロードするデータファイルは圧縮されていません。
- デフォルト:
AUTO
BINARY_AS_TEXT = TRUE | FALSE論理データ型が定義されていない列を UTF-8テキストとして解釈するかどうかを指定するブール値。
FALSEに設定すると、Snowflakeはこれらの列をバイナリデータとして解釈します。- デフォルト:
TRUE
注釈
Snowflakeは、潜在的な変換の問題を回避するために、 BINARY_AS_TEXT を FALSE に設定することをお勧めします。
TRIM_SPACE = TRUE | FALSE文字列から先頭と末尾の空白を削除するかどうかを指定するブール値。
たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeは引用符の先頭文字ではなく、先頭のスペースをフィールドの先頭として読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを
TRUEに設定すると、データのロード中に不要なスペースが削除されます。このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してParquetデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
- デフォルト:
FALSE
USE_LOGICAL_TYPE = TRUE | FALSEParquet論理型を使用するかどうかを指定するブール値。このファイル形式オプションを使用すると、Snowflakeはデータのロード中にParquet論理型を解釈できます。詳細については、 Parquet理論型の定義 をご参照ください。Parquet論理型を有効にするには、新しいファイル形式オプションを作成するときに USE_LOGICAL_TYPE を TRUE に設定します。
- デフォルト:
FALSE
USE_VECTORIZED_SCANNER = TRUE | FALSEParquetファイルのロード時にベクトル化されたスキャナーを使用するかどうかを指定するブール値。
デフォルト値は
FALSEです。将来の BCR では、デフォルト値はTRUEになります。新しいワークロードにはUSE_VECTORIZED_SCANNER = TRUEを設定し、既存のワークロードにはテスト後に設定することを推奨します。ベクトル化されたスキャナーを使用すると、Parquetファイルをロードする際の待ち時間を大幅に短縮できます。このスキャナーは、 Parquet ファイルの列指向形式に適しているからです。スキャナーは、選択された列のサブセットなど、Parquetファイルの関連セクションのみをメモリにダウンロードします。
USE_VECTORIZED_SCANNERがTRUEに設定されている場合、ベクトル化されたスキャナーの動作は以下のようになります。設定された実際の値にかかわらず、
BINARY_AS_TEXTオプションは常にFALSEとして扱われ、USE_LOGICAL_TYPEオプションは常にTRUEとして扱われます。ベクトル化されたスキャナーはParquetマップタイプをサポートしています。マップタイプのスキャンの出力は以下の通りです。
"my_map": { "k1": "v1", "k2": "v2" }
ベクトル化されたスキャナーは、次の例が示すように、出力で
NULL値を表示します。"person": { "name": "Adam", "nickname": null, "age": 34, "phone_numbers": [ "1234567890", "0987654321", null, "6781234590" ] }
ベクトル化されたスキャナーは、時間とタイムスタンプを次のように扱います。
Parquet
Snowflakeのベクトル化されたスキャナー
TimeType(isAdjustedToUtc=True/False, unit=MILLIS/MICROS/NANOS)
TIME
TimestampType(isAdjustedToUtc=True, unit=MILLIS/MICROS/NANOS)
TIMESTAMP_LTZ
TimestampType(isAdjustedToUtc=False, unit=MILLIS/MICROS/NANOS)
TIMESTAMP_NTZ
INT96
TIMESTAMP_LTZ
USE_VECTORIZED_SCANNERがFALSEに設定されている場合、スキャナーは以下の動作をします。このオプションはParquetマップをサポートしていません。 マップタイプのスキャンの出力は以下の通りです。
"my_map": { "key_value": [ { "key": "k1", "value": "v1" }, { "key": "k2", "value": "v2" } ] }
次の例が示すように、このオプションはスキャン出力で
NULL値を明示的に表示しません。"person": { "name": "Adam", "age": 34 "phone_numbers": [ "1234567890", "0987654321", "6781234590" ] }
このオプションは、時間とタイムスタンプを次のように扱います。
Parquet
USE_LOGICAL_TYPE = TRUE の場合
USE_LOGICAL_TYPE = FALSE の場合
TimeType(isAdjustedToUtc=True/False, unit=MILLIS/MICROS)
TIME
TIME (ConvertedType がある場合)
INTEGER (ConvertedType がない場合)
TimeType(isAdjustedToUtc=True/False, unit=NANOS)
TIME
INTEGER
TimestampType(isAdjustedToUtc=True, unit=MILLIS/MICROS)
TIMESTAMP_LTZ
TIMESTAMP_NTZ
TimestampType(isAdjustedToUtc=True, unit=NANOS)
TIMESTAMP_LTZ
INTEGER
TimestampType(isAdjustedToUtc=False, unit=MILLIS/MICROS)
TIMESTAMP_NTZ
TIMESTAMP_LTZ (ConvertedType がある場合)
INTEGER (ConvertedType がない場合)
TimestampType(isAdjustedToUtc=False, unit=NANOS)
TIMESTAMP_NTZ
INTEGER
INT96
TIMESTAMP_NTZ
TIMESTAMP_NTZ
REPLACE_INVALID_CHARACTERS = TRUE | FALSE無効な UTF -8文字をUnicode置換文字(
�)で置き換えるかどうかを指定するブール値。コピーオプションは、1対1の文字置換を実行します。TRUEに設定すると、Snowflakeは無効な UTF-8文字をUnicode置換文字に置き換えます。FALSEに設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト:
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )SQL NULL との間の変換に使用される文字列。Snowflakeはデータロードソースのこれらの文字列を SQL NULL に置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。
このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してParquetデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
Snowflakeは、データ型に関係なく、値のすべてのインスタンスを NULL に変換することに注意してください。たとえば、
2が値として指定されている場合は、文字列または数値としての2のインスタンスすべてが変換されます。例:
NULL_IF = ('\N', 'NULL', 'NUL', '')このオプションには空の文字列を含めることができます。
- デフォルト:
\N(つまり、 NULL)
TYPE = XML¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONEロードするデータファイルの現在の圧縮アルゴリズムを指定する文字列(定数)。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
サポートされる値
注意
AUTO現在は自動検出できないBrotliで圧縮されたファイルを除き、圧縮アルゴリズムは自動的に検出されます。Brotliで圧縮されたファイルをロードする場合は、
AUTOではなくBROTLIを明示的に使用してください。GZIPBZ2BROTLIZSTDDEFLATEDeflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。
RAW_DEFLATE生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。
NONEロードするデータファイルは圧縮されていません。
- デフォルト:
AUTO
IGNORE_UTF8_ERRORS = TRUE | FALSEUTF-8エンコードエラーがエラー状態を引き起こすかどうかを指定するブール値。
REPLACE_INVALID_CHARACTERSの代替構文です。TRUEに設定すると、無効な UTF-8シーケンスはUnicode文字U+FFFD(つまり、「置換文字」)で警告なしに置き換えられます。FALSEに設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト:
FALSE
PRESERVE_SPACE = TRUE | FALSEXML パーサーが要素コンテンツの先頭と後続のスペースを保持するかどうかを指定するブール値。
- デフォルト:
FALSE
STRIP_OUTER_ELEMENT = TRUE | FALSEXML パーサーが外側の XML 要素を取り除き、2番目のレベルの要素を別のドキュメントとして公開するかどうかを指定するブール値。
- デフォルト:
FALSE
DISABLE_AUTO_CONVERT = TRUE | FALSEXML パーサーがテキストからネイティブ表現への数値およびブール値の自動変換を無効にするかどうかを指定するブール値。
- デフォルト:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE無効な UTF -8文字をUnicode置換文字(
�)で置き換えるかどうかを指定するブール値。コピーオプションは、1対1の文字置換を実行します。TRUEに設定すると、Snowflakeは無効な UTF-8文字をUnicode置換文字に置き換えます。FALSEに設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト:
FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE入力ファイルに存在する BOM (バイト順マーク)をスキップするかどうかを指定するブール値。BOM は、データファイルの先頭にある文字コードで、バイト順とエンコード形式を定義します。
FALSEに設定されている場合、Snowflakeはデータファイル内の BOM を認識し、 BOM がエラーの原因になるか、テーブルの最初の列にマージされる可能性があります。- デフォルト:
TRUE
コピーオプション(copyOptions)¶
次のコピーオプションを1つ以上指定できます(空白、コンマ、または改行で区切り)。
CLUSTER_AT_INGEST_TIME = TRUE | FALSE- 定義:
クラスタリングキーで構成されているテーブルの取り込み中に、データを直接事前クラスタリングするかどうかを指定するブール値。
TRUEに設定されている場合、このオプションは Snowpipe Streaming(高性能アーキテクチャを持つ) に、データがコミットされる前に、ターゲットテーブルのクラスタリングキーに基づくデータをソートさせます。これにより、取り込み時にデータが最適な状態に整理され、ターゲットテーブルでのクエリパフォーマンスが大幅に向上します。この機能は Snowpipe Streamingのハイパフォーマンスアーキテクチャ でのみ使用できます。このオプションを有効にするには、ターゲットテーブルの構成でクラスタリングキーが定義されている必要があります。
- デフォルト:
FALSE
重要
事前クラスタリング機能を使用する場合は、宛先テーブルで自動クラスタリング機能を無効にしていないことを確認してください。自動クラスタリングを無効にすると、時間の経過とともにクエリのパフォーマンスが低下する可能性があります。
- 例:
CREATE OR REPLACE PIPE TEST_PRECLUSTERED_PIPE AS COPY INTO TEST_PRECLUSTERED_TABLE (num) FROM ( SELECT $1:num::number as num FROM TABLE( DATA_SOURCE( TYPE => 'STREAMING') )) CLUSTER_AT_INGEST_TIME=TRUE;
ENFORCE_LENGTH = TRUE | FALSE- 定義:
リバースロジックを使用した
TRUNCATECOLUMNSの代替構文(他のシステムとの互換性のため)ターゲット列の長さを超えるテキスト文字列を切り捨てるかどうかを指定するブール値:
TRUEの場合、ロードされた文字列がターゲット列の長さを超えると、 COPY ステートメントはエラーを生成します。FALSEの場合、文字列はターゲット列の長さに自動的に切り捨てられます。
このコピーオプションは、 CSV データと、リレーショナルテーブルの個別の列にロードされた場合の半構造化データの文字列値をサポートします。
- デフォルト:
TRUE
注釈
ターゲット文字列の列の長さが最大に設定されている場合(例:
VARCHAR (134217728))、着信文字列はこの長さを超えることはできません。超えると、 COPY コマンドはエラーを生成します。このパラメーターは機能的には
TRUNCATECOLUMNSと同等ですが、逆の動作をします。他のデータベースとの互換性のために提供されています。必要な出力を生成するには、COPY ステートメントにこれら2つのパラメーターのいずれかを含めるだけです。
FILE_PROCESSOR = (SCANNER = custom_scanner_type SCANNER_OPTIONS = (scanner_options))- 定義:
非構造化データの処理に使用するスキャナーとスキャナーオプションを指定します。
SCANNER(必須): 非構造化データの処理に使用するカスタムスキャナーのタイプを指定します。現在、document_aiカスタムスキャナータイプのみがサポートされています。SCANNER_OPTIONS: カスタム・スキャナー・タイプのプロパティを指定します。 例えば、document_aiのタイプとしてSCANNERを指定する場合、document_aiのプロパティを指定する必要があります。次のリストは、document_aiのプロパティの事前定義されたセットを示しています。project_name: ドキュメント AI モデルを作成するプロジェクトの名前。model_name(document_aiでは必須):Document の AI モデル名。model_version(document_aiでは必須):Document AI モデルのバージョン。
詳細については、 構造化されていないデータをドキュメント AI で読み込む をご参照ください。
注釈
このコピーオプションは
MATCH_BY_COLUMN_NAMEでは動作しません。
FORCE = TRUE | FALSE- 定義:
以前にロードされたかどうか、ロード後に変更されなかったかどうかに関係なく、すべてのファイルをロードするよう指定するブール値。このオプションはファイルを再ロードし、テーブル内のデータを複製する可能性があります。
- デフォルト:
FALSE
INCLUDE_METADATA = ( column_name = METADATA$field [ , column_name = METADATA$field ... ] )- 定義:
ターゲットテーブルの既存の列と METADATA$ 列間のユーザー定義のマッピング。このコピーオプションは、 MATCH_BY_COLUMN_NAME コピーオプションと合わせてのみ使用できます。 次のリストは、
METADATA$fieldの有効な入力を示しています。METADATA$FILENAME
METADATA$FILE_ROW_NUMBER
METADATA$FILE_CONTENT_KEY
METADATA$FILE_LAST_MODIFIED
METADATA$START_SCAN_TIME
メタデータ列の詳細については、 ステージングされたファイルのメタデータのクエリ をご参照ください。
このコピーオプションでマッピングが定義されると、次の例が示すように、
column_name列に指定されたメタデータ値が入力されます。COPY INTO table1 FROM @stage1 MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE INCLUDE_METADATA = ( ingestdate = METADATA$START_SCAN_TIME, filename = METADATA$FILENAME);
+-----+-----------------------+---------------------------------+-----+ | ... | FILENAME | INGESTDATE | ... | |---------------------------------------------------------------+-----| | ... | example_file.json.gz | Thu, 22 Feb 2024 19:14:55 +0000 | ... | +-----+-----------------------+---------------------------------+-----+
- デフォルト:
NULL
注釈
INCLUDE_METADATAターゲット列名は、まずテーブルに存在する必要があります。ターゲット列名が存在しない場合は自動的に追加されません。INCLUDE_METADATA列には一意な列名を使用します。INCLUDE_METADATAターゲット列にデータファイルの列と競合する名前がある場合は、INCLUDE_METADATAで定義されたMETADATA$値が優先されます。INCLUDE_METADATAで CSV ファイルをロードする場合は、ファイル形式オプションERROR_ON_COLUMN_COUNT_MISMATCHをFALSEに設定します。
LOAD_MODE = { FULL_INGEST | ADD_FILES_COPY }- 定義:
ParquetファイルからSnowflake管理 Icebergテーブル にデータをロードする場合に使用するモードを指定します。
FULL_INGEST:Snowflakeはファイルをスキャンし、Icebergテーブルのベーステーブルの基になるParquetデータを書き換えます。Icebergテーブルにデータファイルを登録する前にデータの変換が必要な場合は、このオプションを使用します。ADD_FILES_COPY:Snowflakeは、元のParquetファイルをIcebergテーブルのベーステーブルにサーバーサイドでコピーし、そのファイルをテーブルに登録します。このアクションにより、raw ParquetファイルのIcebergテーブルへのクロスリージョンまたはクロスクラウド取り込みが可能になります。注釈
この
ADD_FILES_COPYオプションは、Iceberg互換のraw Parquetファイルから変換なしでデータをロードする場合のみサポートされます。raw Iceberg互換ParquetファイルはIcebergカタログに登録されませんが、Iceberg互換データタイプを含んでいます。ファイル読み取りのオーバーヘッドを避けるには、このオプションを使用します。ストレージコストを最小限に抑えるには、このオプションで
PURGE = TRUEを使用します。こうすると、データのロードが成功した後、Snowflakeはデータファイルを元の場所から自動的に削除します。
その他の使用上の注意については、 LOAD_MODE の使用上の注意 をご参照ください。例については、 IcebergテーブルへのIceberg互換Parquetデータのロード をご参照ください。
- デフォルト:
FULL_INGEST
LOAD_UNCERTAIN_FILES = TRUE | FALSE- 定義:
ロード状態が不明なファイルをロードすることを指定するブール値。COPY コマンドはデフォルトでこれらのファイルをスキップします。
次の条件の すべて が当てはまる場合、ロードステータスは不明です。
ファイルの LAST_MODIFIED 日付(つまり、ファイルがステージされた日付)が64日よりも前。
データの初期セットがテーブルにロードされたのが64日よりも前。
ファイルが既にテーブルに正常にロードされている場合、このイベントが発生したのが65日以上前。
ロードステータスが既知かどうかに関係なく、 COPY コマンドにすべてのファイルを強制的にロードさせるには、代わりに
FORCEオプションを使用します。ロードステータスの不確実性の詳細については、 古いファイルをロードする をご参照ください。
- デフォルト:
FALSE
MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE- 定義:
データで表される対応する列と一致するターゲットテーブルの列に半構造化データをロードするかどうかを指定する文字列。
重要
すべての場合において、ロード中のデータ変換に MATCH_BY_COLUMN_NAME コピーオプションと SELECT ステートメントを合わせて使用することはしないでください。この2つのオプションを個別に使用することはできますが、併用することはできません。これを実行しようとすると、エラー、
SQL compilation error: match_by_column_name is not supported with copy transform.が発生します.たとえば、次の構文は許可されていません。
COPY INTO [<namespace>.]<table_name> [ ( <col_name> [ , <col_name> ... ] ) ] FROM ( SELECT [<alias>.]$<file_col_num>[.<element>] [ , [<alias>.]$<file_col_num>[.<element>] ... ] FROM { internalStage | externalStage } ) [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ] [ PATTERN = '<regex_pattern>' ] [ FILE_FORMAT = ( { FORMAT_NAME = '[<namespace>.]<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ] MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE [ other copyOptions ]
詳細については、 ロード中のデータの変換 をご参照ください。
このコピーオプションは、次のデータ形式でサポートされています。
JSON
Avro
ORC
Parquet
CSV
列が一致するには、次の条件を満たす必要があります。
データで表される列は、テーブルの列と まったく同じ名前 である必要があります。コピーオプションは、列名の大文字と小文字を区別します。列の順序は関係ありません。
テーブルの列には、データで表される列の値と互換性のあるデータ型が必要です。例えば、文字列、数値、ブール値はすべてバリアント列にロードできます。
- 値:
CASE_SENSITIVE|CASE_INSENSITIVEデータで表される対応する列に一致するターゲットテーブルの列に半構造化データをロードします。列名は、大文字と小文字が区別される(
CASE_SENSITIVE)または大文字と小文字が区別されない(CASE_INSENSITIVE)です。COPY 操作は、ターゲットテーブルの少なくとも1つの列がデータファイルで表される列と一致することを確認します。一致が見つかった場合、データファイルの値が1つまたは複数の列にロードされます。一致が見つからない場合、ファイル内の各レコードの NULL 値のセットがテーブルにロードされます。
注釈
一致しない追加の列がデータファイルに存在する場合、これらの列の値はロードされません。
一致しない追加の列がターゲットテーブルに存在する場合、 COPY 操作はこれらの列に NULL 値を挿入します。これらの列は NULL 値をサポートする必要があります。
NONECOPY 操作は、半構造化データをバリアント列にロードするか、クエリが COPY ステートメントに含まれている場合にデータを変換します。
- デフォルト:
NONE
注釈
現在、次の制限が適用されます。
ターゲットテーブルにロードするのではなく、ステージングされたデータを検証するために、MATCH_BY_COLUMN_NAME を COPY ステートメントで
VALIDATION_MODEパラメーターと共に使用することはできません。:emph:` Parquetデータのみ。
MATCH_BY_COLUMN_NAME が :code:`CASE_SENSITIVEまたはCASE_INSENSITIVEに設定されている場合、空の列値(例:"col1": "")はエラーを生成します。
ON_ERROR = CONTINUE | SKIP_FILE | SKIP_FILE_num | 'SKIP_FILE_num%' | ABORT_STATEMENT- 使用:
データのロードのみ
- 定義:
ロード操作のエラー処理を指定する文字列(定数)。
重要
ON_ERROR コピーオプションの値を慎重に検討してください。デフォルト値は一般的なシナリオでは適切ですが、常に最良のオプションであるとは限りません。
- 値:
CONTINUEエラーが見つかった場合は、ファイルのロードを続行します。COPY ステートメントは、データファイルごとに見つかった最大1つのエラーのエラーメッセージを返します。
ROWS_PARSED 列の値と ROWS_LOADED 列の値の差は、検出されたエラーを含む行の数を表します。ただし、これらの各行には複数のエラーが含まれる可能性があります。データファイルのすべてのエラーを表示するには、 VALIDATION_MODE パラメーターを使用するか、 VALIDATE 関数をクエリします。
SKIP_FILEエラーが見つかった場合はファイルをスキップします。
SKIP_FILEアクションは、エラーが見つかったかどうかに関係なく、ファイル全体をバッファーします。このため、SKIP_FILEはCONTINUEまたはABORT_STATEMENTよりも低速です。少数のエラーで大型のファイルをスキップすると、遅延が発生し、クレジットが無駄になる可能性があります。論理的な叙述がないファイルから多数の記録をロードする場合(例: ファイルが大まかな間隔で自動的に生成された場合)は、代わりにCONTINUEを指定することを検討してください。その他のパターン:
SKIP_FILE_num`(例: :code:`SKIP_FILE_10)ファイル内で見つかったエラー行の数が指定された数以上の場合は、ファイルをスキップします。
'SKIP_FILE_num%'`(例: :code:'SKIP_FILE_10%'`)ファイル内で見つかったエラー行の割合が指定された割合を超えた場合は、ファイルをスキップします。
ABORT_STATEMENTデータファイルにエラーが見つかった場合は、ロード操作を中止します。
ロード操作は、
FILESパラメーターで明示的に指定されたデータファイルが見つからない場合にのみ中止されます。それ以外でデータファイルが見つからない(例: データファイルが存在しない、またはデータファイルにアクセスできない)場合、ロード操作は中止 されません。データファイルが取り込まれないため、終了した操作は COPY_HISTORY に表示されません。QUERY_HISTORY で故障箇所を検索することをお勧めします。
- デフォルト:
- COPY を使用した一括ロード:
ABORT_STATEMENT- Snowpipe:
SKIP_FILE
PURGE = TRUE | FALSE- 定義:
データが正常にロードされた後、ステージからデータファイルを自動的に削除するかどうかを指定するブール値。
このオプションが
TRUEに設定されている場合は、正常にロードされたデータファイルの削除を試みます。パージ操作が何らかの理由で失敗した場合、現在エラーは返されません。ステージングされたファイルを定期的にリストし( LIST を使用)、正常にロードされたファイルがある場合は手動で削除することをお勧めします。- デフォルト:
FALSE
RETURN_FAILED_ONLY = TRUE | FALSE- 定義:
ステートメント結果でロードに失敗したファイルのみを返すかどうかを指定するブール値。
- デフォルト:
FALSE
SIZE_LIMIT = num- 定義:
特定の COPY ステートメントに対してロードされるデータの最大サイズ(バイト単位)を指定する数値(> 0)。しきい値を超えると、 COPY 操作はファイルのロードを中止します。このオプションは、通常、複数の COPY ステートメントを使用してファイルの共通グループをロードするために使用されます。各ステートメントについて、次のステートメントに進む前に、指定された
SIZE_LIMITを超えるまでデータのロードが続行されます。たとえば、ステージパス内の一連のファイルのサイズがそれぞれ10 MB であるとします。複数の COPY ステートメントが SIZE_LIMIT を
25000000(25 MB)に設定すると、それぞれが3ファイルをロードします。つまり、SIZE_LIMITのしきい値を超えると、各 COPY 操作は中断されます。ロードするファイルがない場合を除き、
SIZE_LIMITに指定された値に関係なく、少なくとも1つのファイルがロードされます。- デフォルト:
null(サイズ制限なし)
TRUNCATECOLUMNS = TRUE | FALSE- 定義:
リバースロジックを使用した
ENFORCE_LENGTHの代替構文(他のシステムとの互換性のため)ターゲット列の長さを超えるテキスト文字列を切り捨てるかどうかを指定するブール値:
TRUEの場合、文字列はターゲット列の長さに自動的に切り捨てられます。FALSEの場合、ロードされた文字列がターゲット列の長さを超えると、 COPY ステートメントはエラーを生成します。
このコピーオプションは、 CSV データと、リレーショナルテーブルの個別の列にロードされた場合の半構造化データの文字列値をサポートします。
- デフォルト:
FALSE
注釈
ターゲット文字列の列の長さが最大に設定されている場合(例:
VARCHAR (134217728))、着信文字列はこの長さを超えることはできません。超えると、 COPY コマンドはエラーを生成します。このパラメーターは機能的には
ENFORCE_LENGTHと同等ですが、逆の動作をします。他のデータベースとの互換性のために提供されています。必要な出力を生成するには、COPY ステートメントにこれら2つのパラメーターのいずれかを含めるだけです。
使用上の注意¶
一部のユースケースは完全にはサポートされておらず、以下のユースケースを含め、 ON_ERROR の動作に一貫性がなくなったり、予期しない動作が発生したりする可能性があります。
SELECT ステートメントで DISTINCT キーワードを指定します。
クラスター化されたテーブルで COPY を使用します。
-
Snowflakeでパーティション変換時にエラーが発生すると、
ON_ERROR = CONTINUEを設定してあっても、COPY ジョブは失敗します。LOAD_MODE = ADD_FILES_COPY はサポートされていません。
CSV データをロードする際、 ストリーム がターゲット・テーブル上にある場合、 ON_ERROR コピー・オプションが期待通りに機能しないことがあります。
Google Cloud Storageからのロードのみ: 外部ステージに対して返されるオブジェクトのリストには、1つ以上の「ディレクトリBLOB」が含まれる場合があります。基本的に、スラッシュ文字(
/)で終わるパスです。例:LIST @my_gcs_stage; +---------------------------------------+------+----------------------------------+-------------------------------+ | name | size | md5 | last_modified | |---------------------------------------+------+----------------------------------+-------------------------------| | my_gcs_stage/load/ | 12 | 12348f18bcb35e7b6b628ca12345678c | Mon, 11 Sep 2019 16:57:43 GMT | | my_gcs_stage/load/data_0_0_0.csv.gz | 147 | 9765daba007a643bdff4eae10d43218y | Mon, 11 Sep 2019 18:13:07 GMT | +---------------------------------------+------+----------------------------------+-------------------------------+
これらのは、Googleが提供する他のツールを使用するのではなく、 Google Cloud console でディレクトリが作成されるときにリストされます。
オブジェクトリストにディレクトリ BLOB が含まれていると、ステージを参照する COPY ステートメントが失敗する可能性があります。エラーを回避するために、ステージのファイルリストにディレクトリ BLOB が含まれる場合、ファイルパターンマッチングを使用して、含めるファイル(つまり PATTERN 句)を識別することをお勧めします。例については、このトピックの パターンマッチングを使用したロード をご参照ください。または、 COPY ステートメントで ON_ERROR = SKIP_FILE に設定します。
STORAGE_INTEGRATION、CREDENTIALS、およびENCRYPTIONは、プライベート/保護されたストレージの場所から直接ロードする場合にのみ適用されます。パブリックバケットからロードする場合は、セキュアアクセスは必要ありません。
名前付きの外部ステージからロードする場合、ステージはバケットへのアクセスに必要なすべての認証情報を提供します。
COPY コマンドの実行中にエラーが発生した場合、コマンドの完了後、 VALIDATE テーブル関数を使用してエラーを生成したファイルを検証できます。
注釈
VALIDATE 関数は、標準のデータロードの実行に使用される COPY コマンドの出力のみを返します。データのロード中に変換を実行する COPY コマンドをサポートしません(データ列のサブセットの読み込みやデータ列の並べ替えなど)。
コピーオプションの1つとして明示的に
FORCE = TRUEを指定しない限り、コマンドは既にテーブルにロードされたステージングされたデータファイルを無視します。データを再ロードするには、FORCE = TRUEを指定するか、ファイルを変更して再度ステージングする必要があります。これにより、新しいチェックサムが生成されます。COPY コマンドは、Parquetファイルのデータ型変換を検証しません。
ハイブリッド・テーブルのロードについては、 データのロード をご参照ください。
Icebergテーブルでは、
VALIDATION_MODEはサポートされていません。Iceberg互換のParquetファイルから
LOAD_MODEを使ってロードします。LOAD_MODE = ADD_FILES_COPYオプションを使用する場合は、以下の前提条件を満たす必要があります。ターゲットテーブルは、ソースParquetファイルのデータ型と互換性のある列データ型を持つ、Snowflake管理のIcebergテーブルにする必要があります。詳細については、 Apache Iceberg™ テーブルのデータ型 をご参照ください。
ソースファイルの形式はIceberg互換のParquetにする必要があり、ベクトル化されたスキャナー
FILE_FORMAT = ( TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE)を使用する必要があります。MATCH_BY_COLUMN_NAMEオプションをCASE_SENSITIVEに設定する必要があります。
LOAD_MODE = ADD_FILES_COPYを使用する場合は、以下のオプションはサポートされません。クラウドストレージの場所とストレージ統合を指定した、ステージングされていないデータのコピー。
FILE_FORMAT = ( TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE)以外 のファイル形式構成。MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE | NONE。ON_ERROR = CONTINUE | SKIP_FILE_N | SKIP_FILE_X%。データをロードする前のデータの変換またはフィルター。データを変換するには、代わりに FULL_INGEST オプションを使用します。
ADD_FILES_COPYの場合あh、より大きなウェアハウスを使用しても、 COPY クエリの所要時間は大幅には減少しません。COPY 操作の大部分はクラウドサービスのコンピューティングリソースに依存しています。
ストレージ統合を使用する外部ステージでこのコマンドを実行するには、ストレージ統合の USAGE 権限を持つか継承するロールを使用する必要があります。
詳細については、 ステージ権限 をご参照ください。
アウトバウンドプライベート接続 の場合、外部の場所(外部ストレージ URI)からの直接の読み込みはサポートされていません。代わりに、外部プライベート接続用に構成されたストレージ統合の外部ステージを使用します。
出力¶
このコマンドは、次の列を返します。
列名 |
データ型 |
説明 |
|---|---|---|
FILE |
TEXT |
ソースファイルの名前およびファイルへの相対パス |
STATUS |
TEXT |
ステータス:ロード済み、ロード失敗、または部分的にロード済み |
ROWS_PARSED |
NUMBER |
ソースファイルから解析された行数 |
ROWS_LOADED |
NUMBER |
ソースファイルからロードされた行数 |
ERROR_LIMIT |
NUMBER |
エラーの数がこの制限に達した場合、中止します |
ERRORS_SEEN |
NUMBER |
ソースファイル内のエラー行の数 |
FIRST_ERROR |
TEXT |
ソースファイルの最初のエラー |
FIRST_ERROR_LINE |
NUMBER |
最初のエラーの行番号 |
FIRST_ERROR_CHARACTER |
NUMBER |
最初のエラー文字の位置 |
FIRST_ERROR_COLUMN_NAME |
TEXT |
最初のエラーの列名 |
例¶
データロード変換の例については、 ロード中のデータの変換 をご参照ください。
内部ステージからのファイルのロード¶
注釈
これらの例では、 PUT コマンドを使用して以前にファイルがステージにコピーされたことを想定しています。
名前付きの内部ステージからテーブルにファイルをロードします。
COPY INTO mytable FROM @my_int_stage;
テーブルのステージからテーブルにファイルをロードします。
COPY INTO mytable FILE_FORMAT = (TYPE = CSV);注釈
テーブルの場所にあるファイルからデータをコピーする場合、Snowflakeはテーブルの場所にあるファイルを自動的にチェックするため、 FROM 句を省略できます。
ユーザーの個人用ステージからテーブルにファイルをロードします。
COPY INTO mytable from @~/staged FILE_FORMAT = (FORMAT_NAME = 'mycsv');
名前付き外部ステージからのファイルのロード¶
CREATE STAGE コマンドを使用して以前に作成した名前付き外部ステージからファイルをロードします。名前付き外部ステージは外部の場所(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)を参照し、場所にアクセスするために必要なすべての認証情報とその他の詳細が含まれます。
COPY INTO mycsvtable FROM @my_ext_stage/tutorials/dataloading/contacts1.csv;
列の一致を使用したファイルのロード¶
MATCH_BY_COLUMN_NAME コピーオプションを使用して、名前付きの外部ステージからテーブルにファイルをロードします。ファイル内の列名とテーブルで定義された列名を大文字と小文字を区別せずに一致させます。このオプションでは、ファイルの列の順序がテーブルの列の順序と一致する必要はありません。
COPY INTO mytable FROM @my_ext_stage/tutorials/dataloading/sales.json.gz FILE_FORMAT = (TYPE = 'JSON') MATCH_BY_COLUMN_NAME='CASE_INSENSITIVE';
外部ロケーションからのファイルの直接ロード¶
注釈
このオプションは、 アウトバウンドプライベート接続 ではサポートされていません。代わりに外部ステージを使用します。
次の例では、名前付きの my_csv_format ファイル形式を使用して、保存場所(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)から data/files で始まるすべてのファイルをロードします。
Amazon S3
myintという名前の参照されたストレージ統合を使用して、参照されたS3バケットにアクセスします。どちらの例もMASTER_KEY値を切り捨てることに注意してください。COPY INTO mytable FROM s3://mybucket/data/files STORAGE_INTEGRATION = myint ENCRYPTION=(MASTER_KEY = 'eSx...') FILE_FORMAT = (FORMAT_NAME = my_csv_format);提供された認証情報を使用して、参照されたS3バケットにアクセスします。
COPY INTO mytable FROM s3://mybucket/data/files CREDENTIALS=(AWS_KEY_ID='$AWS_ACCESS_KEY_ID' AWS_SECRET_KEY='$AWS_SECRET_ACCESS_KEY') ENCRYPTION=(MASTER_KEY = 'eSx...') FILE_FORMAT = (FORMAT_NAME = my_csv_format);
Google Cloud Storage
myintという名前の参照ストレージ統合を使用して、参照された GCS バケットにアクセスします。COPY INTO mytable FROM 'gcs://mybucket/data/files' STORAGE_INTEGRATION = myint FILE_FORMAT = (FORMAT_NAME = my_csv_format);
Microsoft Azure
myintという名前の参照ストレージ統合を使用して、参照されたコンテナーにアクセスします。どちらの例もMASTER_KEY値を切り捨てることに注意してください。COPY INTO mytable FROM 'azure://myaccount.blob.core.windows.net/data/files' STORAGE_INTEGRATION = myint ENCRYPTION=(TYPE='AZURE_CSE' MASTER_KEY = 'kPx...') FILE_FORMAT = (FORMAT_NAME = my_csv_format);提供された認証情報を使用して、参照されたコンテナーにアクセスします。
COPY INTO mytable FROM 'azure://myaccount.blob.core.windows.net/mycontainer/data/files' CREDENTIALS=(AZURE_SAS_TOKEN='?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D') ENCRYPTION=(TYPE='AZURE_CSE' MASTER_KEY = 'kPx...') FILE_FORMAT = (FORMAT_NAME = my_csv_format);
パターンの一致を使用したロード¶
任意のパスの圧縮された CSV ファイルからのみデータをロードするパターンマッチングを使用して、テーブルのステージからテーブルにファイルをロードします。
COPY INTO mytable FILE_FORMAT = (TYPE = 'CSV') PATTERN='.*/.*/.*[.]csv[.]gz';
ここで、 .* は、「任意の文字の0回以上の出現」と解釈されます。角括弧は、ファイル拡張子の前のピリオド文字(.)をエスケープします。
パターンマッチングを使用して、名前に文字列 sales が含まれる非圧縮 CSV ファイルのみをロードすることにより、テーブルステージからテーブルにファイルをロードします。
COPY INTO mytable FILE_FORMAT = (FORMAT_NAME = myformat) PATTERN='.*sales.*[.]csv';
VARIANT 列への JSON データのロード¶
次の例では、型 VARIANT の単一の列を持つテーブルに JSON データをロードします。
ステージされた JSON 配列は、改行で区切られた3つのオブジェクトで構成されます。
[{ "location": { "city": "Lexington", "zip": "40503", }, "sq__ft": "1000", "sale_date": "4-25-16", "price": "75836" }, { "location": { "city": "Belmont", "zip": "02478", }, "sq__ft": "1103", "sale_date": "6-18-16", "price": "92567" } { "location": { "city": "Winchester", "zip": "01890", }, "sq__ft": "1122", "sale_date": "1-31-16", "price": "89921" }]/* Create a JSON file format that strips the outer array. */ CREATE OR REPLACE FILE FORMAT json_format TYPE = 'JSON' STRIP_OUTER_ARRAY = TRUE; /* Create an internal stage that references the JSON file format. */ CREATE OR REPLACE STAGE mystage FILE_FORMAT = json_format; /* Stage the JSON file. */ PUT file:///tmp/sales.json @mystage AUTO_COMPRESS=TRUE; /* Create a target table for the JSON data. */ CREATE OR REPLACE TABLE house_sales (src VARIANT); /* Copy the JSON data into the target table. */ COPY INTO house_sales FROM @mystage/sales.json.gz; SELECT * FROM house_sales; +---------------------------+ | SRC | |---------------------------| | { | | "location": { | | "city": "Lexington", | | "zip": "40503" | | }, | | "price": "75836", | | "sale_date": "4-25-16", | | "sq__ft": "1000", | | "type": "Residential" | | } | | { | | "location": { | | "city": "Belmont", | | "zip": "02478" | | }, | | "price": "92567", | | "sale_date": "6-18-16", | | "sq__ft": "1103", | | "type": "Residential" | | } | | { | | "location": { | | "city": "Winchester", | | "zip": "01890" | | }, | | "price": "89921", | | "sale_date": "1-31-16", | | "sq__ft": "1122", | | "type": "Condo" | | } | +---------------------------+
ファイルの再ロード¶
COPY コマンドに FORCE = TRUE を追加して、変更されていない(つまり、最初にロードされたときと同じチェックサムを持つ)ステージングされたデータファイルのセットからデータを再ロード(複製)します。
次の例では、最初のコマンドは指定されたファイルをロードし、2番目のコマンドはファイルの内容が変更されていなくても同じファイルを強制的に再ロードします(重複行を生成します)。
COPY INTO load1 FROM @%load1/data1/ FILES=('test1.csv', 'test2.csv'); COPY INTO load1 FROM @%load1/data1/ FILES=('test1.csv', 'test2.csv') FORCE=TRUE;
ロード後のファイルのパージ¶
テーブルのステージからテーブルにファイルをロードし、ロード後にファイルをパージします。デフォルトでは、 COPY はロードされたファイルをその場所からパージしません。ロード後にファイルをパージするには:
使用するアカウントに、ファイルが保存されているバケットまたはコンテナーへの書き込みアクセス権があることを確認してください。
テーブルに
PURGE=TRUEを設定して、テーブルに正常にロードされたすべてのファイルがロード後にパージされるように指定します。ALTER TABLE mytable SET STAGE_COPY_OPTIONS = (PURGE = TRUE); COPY INTO mytable;
COPY コマンドでコピーオプションを直接上書きすることもできます。
COPY INTO mytable PURGE = TRUE;
ファイルがテーブルにロードされた後、ファイルは保存元のバケットまたはコンテナーから削除されます。ファイルが削除プロセスを開始した後に、クエリをキャンセルすることはできません。
ステージングされたファイルの検証¶
ロードせずにステージでファイルを検証します。
検証モードで COPY コマンドを実行し、すべてのエラーを確認します。
COPY INTO mytable VALIDATION_MODE = 'RETURN_ERRORS'; +-------------------------------------------------------------------------------------------------------------------------------+------------------------+------+-----------+-------------+----------+--------+-----------+----------------------+------------+----------------+ | ERROR | FILE | LINE | CHARACTER | BYTE_OFFSET | CATEGORY | CODE | SQL_STATE | COLUMN_NAME | ROW_NUMBER | ROW_START_LINE | +-------------------------------------------------------------------------------------------------------------------------------+------------------------+------+-----------+-------------+----------+--------+-----------+----------------------+------------+----------------+ | Field delimiter ',' found while expecting record delimiter '\n' | @MYTABLE/data1.csv.gz | 3 | 21 | 76 | parsing | 100016 | 22000 | "MYTABLE"["QUOTA":3] | 3 | 3 | | NULL result in a non-nullable column. Use quotes if an empty field should be interpreted as an empty string instead of a null | @MYTABLE/data3.csv.gz | 3 | 2 | 62 | parsing | 100088 | 22000 | "MYTABLE"["NAME":1] | 3 | 3 | | End of record reached while expected to parse column '"MYTABLE"["QUOTA":3]' | @MYTABLE/data3.csv.gz | 4 | 20 | 96 | parsing | 100068 | 22000 | "MYTABLE"["QUOTA":3] | 4 | 4 | +-------------------------------------------------------------------------------------------------------------------------------+------------------------+------+-----------+-------------+----------+--------+-----------+----------------------+------------+----------------+
指定された行数に対して検証モードで COPY コマンドを実行します。この例では、最初の実行で指定した行数でエラーが発生せず、正常に完了し、テーブルにロードされたときに表示される情報が表示されます。2回目の実行では、指定された行数でエラーが発生し、エラーが発生した時点で失敗します。
COPY INTO mytable VALIDATION_MODE = 'RETURN_2_ROWS'; +--------------------+----------+-------+ | NAME | ID | QUOTA | +--------------------+----------+-------+ | Joe Smith | 456111 | 0 | | Tom Jones | 111111 | 3400 | +--------------------+----------+-------+ COPY INTO mytable VALIDATION_MODE = 'RETURN_3_ROWS'; FAILURE: NULL result in a non-nullable column. Use quotes if an empty field should be interpreted as an empty string instead of a null File '@MYTABLE/data3.csv.gz', line 3, character 2 Row 3, column "MYTABLE"["NAME":1]
IcebergテーブルへのIceberg互換Parquetデータのロード¶
この例では、Icebergテーブルを作成し、外部ステージにあるIceberg互換のParquetデータファイルからデータをロードします。
デモのため、この例では以下のリソースを使用します。
iceberg_ingest_volという名前の外部ボリューム。外部ボリュームを作成するには、 外部ボリュームの構成 をご参照ください。Iceberg互換のParquetファイルが置かれた
my_parquet_stageという外部ステージ。外部ステージを作成するには、 CREATE STAGE をご参照ください。
Iceberg互換のParquetデータ(
TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE)をコピーするために必要な構成を使用して、ステージングされたParquetファイルを説明するファイル形式オブジェクトを作成します。CREATE OR REPLACE FILE FORMAT my_parquet_format TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE;
ソースParquetファイルのデータ型と互換性のあるデータ型の列を定義して、Snowflake管理のIcebergテーブルを作成します。
CREATE OR REPLACE ICEBERG TABLE customer_iceberg_ingest ( c_custkey INTEGER, c_name STRING, c_address STRING, c_nationkey INTEGER, c_phone STRING, c_acctbal INTEGER, c_mktsegment STRING, c_comment STRING ) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'iceberg_ingest_vol' BASE_LOCATION = 'customer_iceberg_ingest/';
注釈
このステートメント例では、Snowflakeデータ型にマップするIcebergデータ型を指定します。詳細については、 Apache Iceberg™ テーブルのデータ型 をご参照ください。
COPY INTO ステートメントを使用して、ステージングされたParquetファイル(ステージ URL パスの直下にある)のデータをIcebergテーブルにロードします。
COPY INTO customer_iceberg_ingest FROM @my_parquet_stage FILE_FORMAT = 'my_parquet_format' LOAD_MODE = ADD_FILES_COPY PURGE = TRUE MATCH_BY_COLUMN_NAME = CASE_SENSITIVE;
注釈
この例では、
LOAD_MODE = ADD_FILES_COPYを指定しています。これは、Snowflakeにファイルを外部ボリュームの場所にコピーし、そのファイルをテーブルに登録するように指示します。SnowflakeはソースParquetファイルをスキャンしてデータを新しいParquetファイルに書き換えないため、このオプションを使用するとファイル課金が発生しません。
出力:
+---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+ | file | status | rows_parsed | rows_loaded | error_limit | errors_seen | first_error | first_error_line | first_error_character | first_error_column_name | |---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------| | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_008.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_006.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_005.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_002.parquet | LOADED | 5 | 5 | 0 | 0 | NULL | NULL | NULL | NULL | | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_010.parquet | LOADED | 15000 | 15000 | 0 | 0 | NULL | NULL | NULL | NULL | +---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
テーブルをクエリします。
SELECT c_custkey, c_name, c_mktsegment FROM customer_iceberg_ingest LIMIT 10;
出力:
+-----------+--------------------+--------------+ | C_CUSTKEY | C_NAME | C_MKTSEGMENT | |-----------+--------------------+--------------| | 75001 | Customer#000075001 | FURNITURE | | 75002 | Customer#000075002 | FURNITURE | | 75003 | Customer#000075003 | MACHINERY | | 75004 | Customer#000075004 | AUTOMOBILE | | 75005 | Customer#000075005 | FURNITURE | | 1 | Customer#000000001 | BUILDING | | 2 | Customer#000000002 | AUTOMOBILE | | 3 | Customer#000000003 | AUTOMOBILE | | 4 | Customer#000000004 | MACHINERY | | 5 | Customer#000000005 | HOUSEHOLD | +-----------+--------------------+--------------+