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) ::= 's3://<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 = '<character>' | NONE FIELD_DELIMITER = '<character>' | NONE 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 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 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_SNOWFLAKE_DATA = TRUE | FALSE DISABLE_AUTO_CONVERT = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSEcopyOptions ::= ON_ERROR = { CONTINUE | SKIP_FILE | SKIP_FILE_<num> | 'SKIP_FILE_<num>%' | ABORT_STATEMENT } SIZE_LIMIT = <num> PURGE = TRUE | FALSE RETURN_FAILED_ONLY = TRUE | FALSE MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE ENFORCE_LENGTH = TRUE | FALSE TRUNCATECOLUMNS = TRUE | FALSE FORCE = TRUE | FALSE LOAD_UNCERTAIN_FILES = 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]
ファイルは現在のユーザーのステージにあります。
's3://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
の形式です。ユーザーセッション内でデータベースとスキーマが現在使用されている場合は オプション です。それ以外の場合は必須です。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_ID
AWS_SECRET_KEY
AWS_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 Platformのドキュメントをご参照ください。
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 リスト)を使用してファイルから選択されます。条件:
alias
FROM
値のオプションのエイリアスを指定します(例: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は、ステージ定義内のパスセグメントを保存場所からトリムし、残りのパスセグメントとファイル名に正規表現を適用します。ステージ定義を表示するには、ステージに対して DESCRIBE STAGE コマンドを実行します。URL プロパティは、バケット名またはコンテナー名と0個以上のパスセグメントで構成されます。たとえば、 COPY INTO <テーブル> ステートメントの FROM の場所が
@s/path1/path2/
で、ステージ@s
の URL の値がs3://mybucket/path1/
の場合、Snowpipeは保存場所から/path1/
をトリムします。 FROM 句で、正規表現をpath2/
とパス内のファイル名に適用します。一括データロード操作は、 FROM 句の保存場所全体に正規表現を適用します。
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_ERRORS
COPY ステートメントで指定されたすべてのファイルにわたるすべてのエラー(解析、変換など)を返します。
RETURN_ALL_ERRORS
ロード中に
ON_ERROR
コピーオプションがCONTINUE
に設定されていたため、以前のロード中に部分的にロードされたエラーを含む、 COPY ステートメントで指定されたすべてのファイルにわたるすべてのエラーを返します。注釈
VALIDATION_MODE
は、ロード中にデータを変換する COPY ステートメントをサポートしません。パラメーターが指定されている場合、 COPY ステートメントはエラーを返します。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
を明示的に使用してください。GZIP
BZ2
BROTLI
Brotliで圧縮されたファイルをロードするときには、指定する必要があります。
ZSTD
Zstandard v0.8(およびそれ以上)がサポートされています。
DEFLATE
Deflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。
RAW_DEFLATE
生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。
NONE
ロードするデータファイルは圧縮されていません。
RECORD_DELIMITER = 'character' | 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 = 'character' | 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
の値も受け入れます。デフォルト: コンマ(
,
)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
)または二重引用符で囲まれたエスケープ(''
)を使用します。フィールドにこの文字が含まれる場合、同じ文字を使用してエスケープします。例えば、値が二重引用符であり、フィールドに文字列
A "B" C
が含まれる場合、二重引用符を次のようにエスケープします。A ""B"" C
デフォルト:
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
2つの連続する区切り文字(例:
,,
)で表される入力ファイルの空のフィールドに、 SQL NULL を挿入するかどうかを指定するブール値。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-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
を明示的に使用してください。GZIP
BZ2
BROTLI
ZSTD
DEFLATE
Deflate圧縮されたファイル(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
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、ESCAPE_UNENCLOSED_FIELD
値が\\
であると想定)ENABLE_OCTAL = TRUE | FALSE
8進数の解析を可能にするブール値。
デフォルト:
FALSE
ALLOW_DUPLICATE = TRUE | FALSE
オブジェクトフィールド名の重複を許可するブール値(最後のフィールドのみが保持されます)。
デフォルト:
FALSE
STRIP_OUTER_ARRAY = TRUE | FALSE
JSON パーサーに外括弧
[ ]
を削除するように指示するブール値。デフォルト:
FALSE
STRIP_NULL_VALUES = TRUE | FALSE
null
値を含むオブジェクトフィールドまたは配列要素を削除するように 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 | FALSE
UTF-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
を明示的に使用してください。GZIP
BROTLI
ZSTD
DEFLATE
Deflate圧縮されたファイル(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、ESCAPE_UNENCLOSED_FIELD
値が\\
であると想定)
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、ESCAPE_UNENCLOSED_FIELD
値が\\
であると想定)
TYPE = PARQUET¶
COMPRESSION = AUTO | SNAPPY | NONE
ロードするデータファイルの現在の圧縮アルゴリズムを指定する文字列(定数)。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
サポートされる値
メモ
AUTO
圧縮アルゴリズムが自動的に検出されました。対応する圧縮アルゴリズム:Brotli、gzip、Lempel-Ziv-Oberhumer(LZO)、LZ4、Snappy、またはZstandard v0.8(およびそれ以上)。
SNAPPY
NONE
ロードするデータファイルは圧縮されていません。
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 | FALSE
Parquet論理型を使用するかどうかを指定するブール値。このファイル形式オプションを使用すると、Snowflakeはデータのロード中にParquet論理型を解釈できます。詳細については、 Parquet理論型の定義 をご参照ください。Parquet論理型を有効にするには、新しいファイル形式オプションを作成するときに USE_LOGICAL_TYPE を TRUE に設定します。
デフォルト:
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 コピーオプションを使用してParquetデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
Snowflakeは、データ型に関係なく、値のすべてのインスタンスを NULL に変換することに注意してください。たとえば、
2
が値として指定されている場合は、文字列または数値としての2
のインスタンスすべてが変換されます。例:
NULL_IF = ('\N', 'NULL', 'NUL', '')
このオプションには空の文字列を含めることができます。
デフォルト:
\\N
(つまり、 NULL、ESCAPE_UNENCLOSED_FIELD
値が\\
であると想定)
TYPE = XML¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
ロードするデータファイルの現在の圧縮アルゴリズムを指定する文字列(定数)。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
サポートされる値
メモ
AUTO
現在は自動検出できないBrotliで圧縮されたファイルを除き、圧縮アルゴリズムは自動的に検出されます。Brotliで圧縮されたファイルをロードする場合は、
AUTO
ではなくBROTLI
を明示的に使用してください。GZIP
BZ2
BROTLI
ZSTD
DEFLATE
Deflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。
RAW_DEFLATE
生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。
NONE
ロードするデータファイルは圧縮されていません。
デフォルト:
AUTO
IGNORE_UTF8_ERRORS = TRUE | FALSE
UTF-8エンコードエラーがエラー状態を引き起こすかどうかを指定するブール値。
REPLACE_INVALID_CHARACTERS
の代替構文です。TRUE
に設定すると、無効な UTF-8シーケンスはUnicode文字U+FFFD
(つまり、「置換文字」)で警告なしに置き換えられます。FALSE
に設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。デフォルト:
FALSE
PRESERVE_SPACE = TRUE | FALSE
XML パーサーが要素コンテンツの先頭と後続のスペースを保持するかどうかを指定するブール値。
デフォルト:
FALSE
STRIP_OUTER_ELEMENT = TRUE | FALSE
XML パーサーが外側の XML 要素を取り除き、2番目のレベルの要素を別のドキュメントとして公開するかどうかを指定するブール値。
デフォルト:
FALSE
DISABLE_SNOWFLAKE_DATA = TRUE | FALSE
XML パーサーがSnowflake半構造化データタグの認識を無効にするかどうかを指定するブール値。
デフォルト:
FALSE
DISABLE_AUTO_CONVERT = TRUE | FALSE
XML パーサーがテキストからネイティブ表現への数値およびブール値の自動変換を無効にするかどうかを指定するブール値。
デフォルト:
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つ以上指定できます(空白、コンマ、または改行で区切り)。
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
(例:SKIP_FILE_10
)ファイル内で見つかったエラー行の数が指定された数以上の場合は、ファイルをスキップします。
'SKIP_FILE_num%'
(例:'SKIP_FILE_10%'
)ファイル内で見つかったエラー行の割合が指定された割合を超えた場合は、ファイルをスキップします。
ABORT_STATEMENT
データファイルにエラーが見つかった場合は、ロード操作を中止します。
データファイルが見つからない(例: データファイルが存在しない、またはデータファイルにアクセスできないため)場合は、
FILES
パラメーターでデータファイルが見つからない場合を明示的に指定していたときを除いて、ロード操作は中止 されません。
- デフォルト:
- COPY を使用した一括ロード:
ABORT_STATEMENT
- Snowpipe:
SKIP_FILE
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(サイズ制限なし)
PURGE = TRUE | FALSE
- 定義:
データが正常にロードされた後、ステージからデータファイルを自動的に削除するかどうかを指定するブール値。
このオプションが
TRUE
に設定されている場合は、正常にロードされたデータファイルを削除するために最善の努力が払われることに注意してください。パージ操作が何らかの理由で失敗した場合、現在エラーは返されません。ステージングされたファイルを定期的にリストし( LIST を使用)、正常にロードされたファイルがある場合は手動で削除することをお勧めします。- デフォルト:
FALSE
RETURN_FAILED_ONLY = TRUE | FALSE
- 定義:
ステートメント結果でロードに失敗したファイルのみを返すかどうかを指定するブール値。
- デフォルト:
FALSE
MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE
- 定義:
データで表される対応する列と一致するターゲットテーブルの列に半構造化データをロードするかどうかを指定する文字列。
重要
ロード中にデータを変換する場合、一緒に使用すると予期しない結果が生成されるため、 MATCH_BY_COLUMN_NAME コピーオプションは使用しないでください。
たとえば、次の構文は許可されていません。
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 ]
ビジネスニーズに応じて
MATCH_BY_COLUMN_NAME
または COPY 変換のいずれかを使用しますが、この2つを一緒に使用することはありません。詳細については、 ロード中のデータの変換 をご参照ください。このコピーオプションは、次のデータ形式でサポートされています。
JSON
Avro
ORC
Parquet
CSV (プレビュー機能 - オープン)
列が一致するには、次の条件を満たす必要があります。
データで表される列は、テーブルの列と まったく同じ名前 である必要があります。コピーオプションは、列名の大文字と小文字を区別します。列の順序は関係ありません。
テーブルの列には、データで表される列の値と互換性のあるデータ型が必要です。例えば、文字列、数値、ブール値はすべてバリアント列にロードできます。
- 値:
CASE_SENSITIVE
|CASE_INSENSITIVE
データで表される対応する列に一致するターゲットテーブルの列に半構造化データをロードします。列名は、大文字と小文字が区別される(
CASE_SENSITIVE
)または大文字と小文字が区別されない(CASE_INSENSITIVE
)です。COPY 操作は、ターゲットテーブルの少なくとも1つの列がデータファイルで表される列と一致することを確認します。一致が見つかった場合、データファイルの値が1つまたは複数の列にロードされます。一致が見つからない場合、ファイル内の各記録の NULL 値のセットがテーブルにロードされます。
注釈
一致しない追加の列がデータファイルに存在する場合、これらの列の値はロードされません。
一致しない追加の列がターゲットテーブルに存在する場合、 COPY 操作はこれらの列に NULL 値を挿入します。これらの列は NULL 値をサポートする必要があります。
NONE
COPY 操作は、半構造化データをバリアント列にロードするか、クエリが COPY ステートメントに含まれている場合にデータを変換します。
- デフォルト:
NONE
注釈
現在、次の制限が適用されます。
ターゲットテーブルにロードするのではなく、ステージングされたデータを検証するために、 MATCH_BY_COLUMN_NAME を COPY ステートメントで
VALIDATION_MODE
パラメーターと共に使用することはできません。Parquetデータのみ。 MATCH_BY_COLUMN_NAME が
CASE_SENSITIVE
またはCASE_INSENSITIVE
に設定されている場合、空の列値(例:"col1": ""
)はエラーを生成します。
ENFORCE_LENGTH = TRUE | FALSE
- 定義:
リバースロジックを使用した
TRUNCATECOLUMNS
の代替構文(他のシステムとの互換性のため)ターゲット列の長さを超えるテキスト文字列を切り捨てるかどうかを指定するブール値:
TRUE
の場合、ロードされた文字列がターゲット列の長さを超えると、 COPY ステートメントはエラーを生成します。FALSE
の場合、文字列はターゲット列の長さに自動で切り捨てられます。
このコピーオプションは、 CSV データと、リレーショナルテーブルの個別の列にロードされた場合の半構造化データの文字列値をサポートします。
- デフォルト:
TRUE
注釈
ターゲット文字列の列の長さが最大に設定されている場合(例:
VARCHAR (16777216)
)、着信文字列はこの長さを超えることはできません。そうでない場合、 COPY コマンドはエラーを生成します。このパラメーターは機能的には
TRUNCATECOLUMNS
と同等ですが、逆の動作をします。他のデータベースとの互換性のために提供されています。必要な出力を生成するには、 COPY ステートメントにこれら2つのパラメーターのいずれかを含めるだけです。
TRUNCATECOLUMNS = TRUE | FALSE
- 定義:
リバースロジックを使用した
ENFORCE_LENGTH
の代替構文(他のシステムとの互換性のため)ターゲット列の長さを超えるテキスト文字列を切り捨てるかどうかを指定するブール値:
TRUE
の場合、文字列はターゲット列の長さに自動的に切り捨てられます。FALSE
の場合、ロードされた文字列がターゲット列の長さを超えると、 COPY ステートメントはエラーを生成します。
このコピーオプションは、 CSV データと、リレーショナルテーブルの個別の列にロードされた場合の半構造化データの文字列値をサポートします。
- デフォルト:
FALSE
注釈
ターゲット文字列の列の長さが最大に設定されている場合(例:
VARCHAR (16777216)
)、着信文字列はこの長さを超えることはできません。そうでない場合、 COPY コマンドはエラーを生成します。このパラメーターは機能的には
ENFORCE_LENGTH
と同等ですが、逆の動作をします。他のデータベースとの互換性のために提供されています。必要な出力を生成するには、 COPY ステートメントにこれら2つのパラメーターのいずれかを含めるだけです。
FORCE = TRUE | FALSE
- 定義:
以前にロードされたかどうか、ロード後に変更があったかどうかに関係なく、すべてのファイルをロードするよう指定するブール値。このオプションはファイルを再ロードし、テーブル内のデータを複製する可能性があることに注意します。
- デフォルト:
FALSE
LOAD_UNCERTAIN_FILES = TRUE | FALSE
- 定義:
ロード状態が不明なファイルをロードすることを指定するブール値。 COPY コマンドはデフォルトでこれらのファイルをスキップします。
次の条件の すべて が当てはまる場合、ロードステータスは不明です。
ファイルの LAST_MODIFIED 日付(つまり、ファイルがステージされた日付)が64日よりも前。
データの初期セットがテーブルにロードされたのが64日よりも前。
ファイルが既にテーブルに正常にロードされている場合、このイベントが発生したのが65日以上前。
ロードステータスが既知かどうかに関係なく、 COPY コマンドにすべてのファイルを強制的にロードさせるには、代わりに
FORCE
オプションを使用します。ロードステータスの不確実性の詳細については、 古いファイルをロードする をご参照ください。
- デフォルト:
FALSE
使用上の注意¶
SELECT ステートメントの DISTINCT キーワードは完全にはサポートされていません。キーワードを指定すると、一貫性のない、または予期しない 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 | +---------------------------------------+------+----------------------------------+-------------------------------+
これらのBLOBは、Googleが提供する他のツールを使用するのではなく、Google Cloud Platform 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ファイルのデータ型変換を検証しません。
出力¶
このコマンドは、次の列を返します。
列名 |
データ型 |
説明 |
---|---|---|
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]