カテゴリ:

DML コマンド - データのロード

COPY INTO <テーブル>

ステージングされたファイルから既存のテーブルにデータをロードします。ファイルは、次のいずれかの場所に既にステージングされている必要があります。

  • 内部ステージ(またはテーブル/ユーザーステージ)という名前。ファイルは、 PUT コマンドを使用してステージングできます。

  • 外部の場所を参照する名前付きの外部ステージ(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)。

  • 外部の場所(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)。

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

COPY INTO <場所>

このトピックの内容:

構文

/* 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 ]
[ VALIDATION_MODE = RETURN_<n>_ROWS | RETURN_ERRORS | RETURN_ALL_ERRORS ]

条件:

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
     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
     VALIDATE_UTF8 = 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
     IGNORE_UTF8_ERRORS = TRUE | FALSE
     SKIP_BYTE_ORDER_MARK = TRUE | FALSE
-- If FILE_FORMAT = ( TYPE = AVRO ... )
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If FILE_FORMAT = ( TYPE = ORC ... )
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If FILE_FORMAT = ( TYPE = PARQUET ... )
     COMPRESSION = AUTO | SNAPPY | NONE
     BINARY_AS_TEXT = TRUE | FALSE
     TRIM_SPACE = 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
     SKIP_BYTE_ORDER_MARK = TRUE | FALSE
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
copyOptions ::=
     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

必須パラメーター

[名前空間.]テーブル名

データがロードされるテーブルの名前を指定します。

名前空間は、オプションでテーブルのデータベースまたはスキーマ、あるいはその両方を データベース名.スキーマ名 または スキーマ名 の形式で指定します。ユーザーセッション内でデータベースとスキーマが現在使用されている場合は オプション です。それ以外の場合は必須です。

FROM ...

ロードするデータを含むファイルがステージングされる内部または外部ロケーションを指定します。

@[名前空間.]内部ステージ名[/パス]

ファイルは指定された名前付き内部ステージにあります。

@[名前空間.]外部ステージ名[/パス]

ファイルは指定された名前付き外部ステージにあります。

@[名前空間.]%テーブル名[/パス]

ファイルは指定されたテーブルのステージにあります。

@~[/パス]

ファイルは現在のユーザーのステージにあります。

's3://バケット[/パス]'

ファイルは指定された外部の場所(S3バケット)にあります。追加のパラメーターが必要になる場合があります。詳細については、このトピックの 追加のクラウドプロバイダーパラメーター をご参照ください。

'azure://アカウント.blob.core.windows.net/コンテナ[/パス]'

ファイルは指定された外部の場所(Azureコンテナー)にあります。追加のパラメーターが必要になる場合があります。詳細については、このトピックの 追加のクラウドプロバイダーパラメーター をご参照ください。

条件:

  • 名前空間 は、内部ステージまたは外部ステージが存在するデータベースまたはスキーマ、あるいはその両方で、 データベース名.スキーマ名 または スキーマ名 の形式です。ユーザーセッション内でデータベースとスキーマが現在使用されている場合は オプション です。それ以外の場合は必須です。

  • パス は、ロードするファイルのセットを制限するクラウドストレージの場所にある、ファイルの大文字と小文字を区別するオプションのパスです(つまり、ファイルの名前は一般的な文字列で開始)。パスは、別のクラウドストレージサービスによって プレフィックス または フォルダー と呼ばれることもあります。

    「パス」は名前のリテラルプレフィックスであるため、 /.//../ などの相対パス修飾子は文字どおりに解釈されます。例:

    -- S3 bucket
    COPY INTO mytable FROM 's3://mybucket/./../a.csv';
    
    -- Azure container
    COPY INTO mytable FROM 'azure://myaccount.blob.core.windows.net/mycontainer/./../a.csv';
    

    これらの COPY ステートメントでは、Snowflakeは外部の場所で文字通り ./../a.csv という名前のファイルを探します。

注釈

外部の場所の URI 文字列(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)は一重引用符で囲む 必要があります 。ただし、任意の文字列を一重引用符で囲むことができます。これにより、スペースを含む特殊文字を場所およびファイル名で使用できます。例:

-- Stages
COPY INTO mytable FROM '@mystage/path 1/file 1.csv';
COPY INTO mytable FROM '@%mytable/path 1/file 1.csv';
COPY INTO mytable FROM '@~/path 1/file 1.csv';

-- S3 bucket
COPY INTO mytable FROM 's3://mybucket 1/prefix 1/file 1.csv';

-- Azure container
COPY INTO mytable FROM 'azure://myaccount.blob.core.windows.net/mycontainer/encrypted_files/file 1.csv';

追加のクラウドプロバイダーパラメーター

STORAGE_INTEGRATION = 統合名 または . CREDENTIALS = ( クラウド固有の認証情報 )

アドホック COPY ステートメント(名前付き外部ステージを参照しないステートメント)で使用します。 クラウドプロバイダーに接続し、データファイルがステージングされるプライベート/保護されたストレージコンテナーにアクセスするためのセキュリティ認証情報を指定します。

外部のプライベート/保護されたクラウドストレージの場所からロードする場合のみに必要です。パブリックバケット/コンテナーには必要ありません

Amazon S3

STORAGE_INTEGRATION = 統合名

外部クラウドストレージの認証責任をSnowflake IDおよびアクセス管理(IAM)エンティティに委任するために使用されるストレージ統合の名前を指定します。詳細については、 CREATE STORAGE INTEGRATION をご参照ください。

注釈

ストレージ統合の使用を強くお勧めします。このオプションにより、ステージの作成時またはデータのロード時に CREDENTIALS パラメーターを使用してクラウドストレージの認証情報を提供する必要がなくなります。

CREDENTIALS = ( AWS_KEY_ID = '文字列' AWS_SECRET_KEY = '文字列' [ AWS_TOKEN = '文字列' ] )

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回入力され、安全に保存されるため、露出の可能性が最小限に抑えられます。

Google Cloud Storage

STORAGE_INTEGRATION = 統合名

外部クラウドストレージの認証責任をSnowflake IDおよびアクセス管理(IAM)エンティティに委任するために使用されるストレージ統合の名前を指定します。詳細については、 CREATE STORAGE INTEGRATION をご参照ください。

Microsoft Azure

STORAGE_INTEGRATION = 統合名

外部クラウドストレージの認証責任をSnowflake IDおよびアクセス管理(IAM)エンティティに委任するために使用されるストレージ統合の名前を指定します。詳細については、 CREATE STORAGE INTEGRATION をご参照ください。

注釈

ストレージ統合の使用を強くお勧めします。このオプションにより、ステージの作成時またはデータのロード時に CREDENTIALS パラメーターを使用してクラウドストレージの認証情報を提供する必要がなくなります。

CREDENTIALS = ( AZURE_SAS_TOKEN = '文字列' )

Azureに接続し、データを含むファイルがステージングされるプライベート/保護されたコンテナーにアクセスするための SAS (共有アクセス署名)トークンを指定します。認証情報はAzureによって生成されます。

ENCRYPTION = ( クラウド固有の暗号化 )

アドホック COPY ステートメント(名前付き外部ステージを参照しないステートメント)で使用します。暗号化されたファイルからロードする場合にのみ必要であり、ファイルが暗号化されていない場合は不要です。 保管場所の暗号化されたファイルを復号化するために使用する暗号化設定を指定します。

Amazon S3

ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] [ MASTER_KEY = '<string>' ] | [ TYPE = 'AWS_SSE_S3' ] | [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ] | [ TYPE = NONE ] )

TYPE = ...

使用される暗号化タイプを指定します。可能な値は次のとおりです。

  • AWS_CSE :クライアント側の暗号化( MASTER_KEY 値が必要)。現在、提供するクライアント側のマスターキーは対称キーのみです。 MASTER_KEY 値が指定されている場合、Snowflakeは TYPE = AWS_CSE と見なします(つまり、 MASTER_KEY 値が指定されている場合、 TYPE は不要です)。

  • AWS_SSE_S3 :追加の暗号化設定を必要としないサーバー側の暗号化。

  • AWS_SSE_KMS :オプションの KMS_KEY_ID 値を受け入れるサーバー側の暗号化。

暗号化タイプの詳細については、 クライアント側の暗号化 または サーバー側の暗号化 の AWS ドキュメントをご参照ください。

MASTER_KEY = '文字列'AWS_CSE 暗号化のみに適用)

バケット内のファイルの暗号化に使用されたクライアント側マスターキーを指定します。マスターキーは、Base64エンコード形式の128ビットまたは256ビットキーである必要があります。

KMS_KEY_ID = '文字列'AWS_SSE_KMS 暗号化のみに適用)

オプションで、バケットに アンロードされた ファイルの暗号化に使用する AWS KMS 管理キーの ID を指定します。値が指定されていない場合、デフォルトの KMS キー ID を使用して、アンロード時にファイルが暗号化されます。

この値はデータのロードでは無視されることに注意してください。

Google Cloud Storage

ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = '<string>' ] | [ TYPE = NONE ] )

TYPE = ...

使用される暗号化タイプを指定します。可能な値は次のとおりです。

  • GCS_SSE_KMS :オプションの KMS_KEY_ID 値を受け入れるサーバー側の暗号化。

詳細については、Google Cloud Platformのドキュメントをご参照ください。

KMS_KEY_ID = '文字列'GCS_SSE_KMS 暗号化のみに適用)

オプションで、バケットに アンロード されるファイルの暗号化に使用する KMS 管理キーの ID を指定します。値が指定されていない場合、バケットに対して設定されているデフォルトの KMS キー ID を使用して、アンロード時にファイルが暗号化されます。

この値はデータのロードでは無視されることに注意してください。サービスアカウントにバケット内のデータを復号化するための十分な権限がある場合、ロード操作は成功するはずです。

Microsoft Azure

ENCRYPTION = ( [ TYPE = 'AZURE_CSE' | NONE ] [ MASTER_KEY = '文字列' ] )

TYPE = ...

使用される暗号化タイプを指定します。可能な値は次のとおりです。

  • AZURE_CSE :クライアント側の暗号化( MASTER_KEY 値が必要)。詳細については、Microsoft Azureのドキュメントの クライアント側の暗号化情報 をご参照ください。

  • NONE :暗号化なし。

MASTER_KEY = '文字列' ( AZURE_CSE 暗号化のみに適用)

ファイルの復号化に使用されるクライアント側のマスターキーを指定します。マスターキーは、Base64エンコード形式の128ビットまたは256ビットキーである必要があります。

変換パラメーター

( SELECT [エイリアス.]$ファイル列番号[.要素] [ , [エイリアス.]$ファイル列番号[.要素] ... ] FROM ... )

ロード中にデータを変換するために必要

ステージングされたデータファイルからロードする明示的なフィールド/列のセット(カンマ区切り)を指定します。フィールド/列は、標準の SQL クエリ(つまり SELECT リスト)を使用してファイルから選択されます。条件:

エイリアス

オプションのエイリアスを指定します。

ファイル列番号

ロードするデータを含む(ファイル内の)フィールド/列の位置番号を指定します(最初のフィールドには 1 、2番目のフィールドには 2 など)

要素

データファイル内の繰り返し値のパスと要素名を指定します( 半構造化データファイル にのみ適用)。

SELECT リストは、ロード元のデータファイル内のフィールド/列の番号付きセットを定義します。リストはターゲットテーブルの列のシーケンスと一致する 必要があります 。オプションの ( 列名 [ , 列名 ... ] ) パラメーターを使用して、ターゲットテーブルの特定の列にリストをマップできます。

データファイルの実際のフィールド/列の順序は、ターゲットテーブルの列の順序と異なる場合があることに注意してください。重要なのは、 SELECT リストがデータファイルのフィールド/列をテーブルの 対応する 列にマップすることです。

注釈

変換に使用される SELECT ステートメントは、すべての機能をサポートしているわけではありません。サポートされている関数の完全なリストと、例を含むデータ読み込み変換の詳細については、 ロード中のデータの変換 の使用上の注意をご参照ください。

また、データロード変換 のみ は、ユーザーステージおよび名前付きステージ(内部または外部)からのデータの選択をサポートしています。

( 列名 [ , 列名 ... ] )

オプションで、データを挿入するテーブル列の明示的なリスト(カンマ区切り)を指定します。

  • 最初の列は、ロードされたファイルから抽出された最初のフィールド/列から生成された値を消費します。

  • 2番目の列は、ロードされたファイルから抽出された2番目のフィールド/列から生成された値を消費します。

  • 上記のように順序が指定されます。

このリストで列を繰り返すことはできません。この列リストから除外された列には、デフォルト値(指定されていない場合はNULL)が入力されます。ただし、除外された列は、デフォルト値としてシーケンスを持つことは できません

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

FILES = ( 'ファイル名' [ , 'ファイル名' ... ] )

ロードする1つ以上のファイル名のリスト(コンマで区切る)を指定します。ファイルは、コマンドで指定されたSnowflake内部の場所または外部の場所のいずれかに既にステージングされている必要があります。

指定できるファイル名の最大数は1000です。

注釈

外部ステージのみ(つまり、Amazon S3、Google Cloud Storage、またはMicrosoft Azure)、ステージ定義の URL と解決されたファイル名のリストを連結することにより、ファイルパスが設定されます。

ただし、Snowflakeはパス名とファイル名の間に暗黙的に区切り文字を挿入しません。ステージ定義の URL の末尾、またはこのパラメーターで指定された各ファイル名の先頭のいずれかに明示的に区切り文字(/)を含める必要があります。

PATTERN = '正規表現パターン'

一致するファイル名やパスを指定する、単一引用符で囲まれた正規表現パターン文字列。

ちなみに

最高のパフォーマンスを得るには、多数のファイルをフィルタリングするパターンを適用しないようにしてください。

FILE_FORMAT = ( FORMAT_NAME = 'ファイル形式名' ) または . FILE_FORMAT = ( TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML [ ... ] )

ロードするデータの形式を指定します。

FORMAT_NAME = 'ファイル形式名'

テーブルへのデータのロードに使用する既存の名前付きファイル形式を指定します。名前付きファイル形式は、データファイルの形式タイプ(CSV、 JSONなど)およびその他の形式オプションを決定します。詳細については、 CREATE FILE FORMAT をご参照ください。

TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML [ ... ]

テーブルにロードするファイルのタイプを指定します。形式タイプが指定されている場合、追加の形式固有のオプションを指定できます。詳細については、 形式タイプオプション (このトピック)をご参照ください。

注釈

FORMAT_NAMETYPE は相互に排他的です。同じ 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 = '文字' | NONE

入力ファイルのレコードを区切る、1つ以上のシングルバイトまたはマルチバイト文字。

一般的なエスケープシーケンス、8進値( \\ で始まる)、または16進値( 0x で始まる)を受け入れます。たとえば、ソーン(Þ)文字で区切られたレコードの場合、8進数(\\336)または16進数(0xDE)の値を指定します。 NONE の値も受け入れます。

指定された区切り文字は、ランダムなバイトのシーケンスではなく、有効な UTF-8文字でなければなりません。

複数文字の区切り文字もサポートされています。ただし、 RECORD_DELIMITER または FIELD_DELIMITER の区切り文字は、他のファイル形式オプション( FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb' など)の区切り文字の部分文字列にはできません。区切り文字は最大20文字に制限されています。 ESCAPE または ESCAPE_UNENCLOSED_FIELD などの他のファイル形式オプションに使用される文字を指定しないでください。

デフォルト:改行文字。「改行」は論理的であるため、 \r\n がWindowsプラットフォーム上のファイルの改行として理解されることに注意してください。

FIELD_DELIMITER = '文字' | NONE

入力ファイルのフィールドを区切る、1つ以上のシングルバイトまたはマルチバイト文字。

一般的なエスケープシーケンス、8進値( \\ で始まる)、または16進値( 0x で始まる)を受け入れます。たとえば、ソーン(Þ)文字で区切られたフィールドの場合、8進数(\\336)または16進数(0xDE)の値を指定します。 NONE の値も受け入れます。

指定された区切り文字は、ランダムなバイトのシーケンスではなく、有効な UTF-8文字でなければなりません。

複数文字の区切り文字もサポートされています。ただし、 RECORD_DELIMITER または FIELD_DELIMITER の区切り文字は、他のファイル形式オプション( FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb' など)の区切り文字の部分文字列にはできません。区切り文字は最大20文字に制限されています。 ESCAPE または ESCAPE_UNENCLOSED_FIELD などの他のファイル形式オプションに使用される文字を指定しないでください。

デフォルト:コンマ(,

SKIP_HEADER = 整数

スキップするファイルの先頭の行数。

SKIP_HEADER は RECORD_DELIMITER または FIELD_DELIMITER の値を使用してヘッダー行を決定しないことに注意してください。むしろ、指定された数の CRLF (キャリッジリターン、ラインフィード)で区切られたファイル内の行を単にスキップします。ロードするデータの行を決定するのには、RECORD_DELIMITER および FIELD_DELIMITER が使用されます。

デフォルト: 0

DATE_FORMAT = '文字列' | AUTO

ロードするデータファイルの日付値の形式を定義する文字列。値が指定されていない場合、または AUTO の場合、 DATE_INPUT_FORMAT セッションパラメーターの値が使用されます。

デフォルト: AUTO

TIME_FORMAT = '文字列' | AUTO

ロードするデータファイルの時間値の形式を定義する文字列。値が指定されていない場合、または AUTO の場合、 TIME_INPUT_FORMAT セッションパラメーターの値が使用されます。

デフォルト: AUTO

TIMESTAMP_FORMAT = '文字列' | AUTO

ロードするデータファイルのタイムスタンプ値の形式を定義する文字列。値が指定されていない場合、または AUTO の場合、 TIMESTAMP_INPUT_FORMAT セッションパラメーターの値が使用されます。

デフォルト: AUTO

BINARY_FORMAT = HEX | BASE64 | UTF8

バイナリ入力または出力のエンコード形式を定義する文字列(定数)。このオプションは、テーブルのバイナリ列にデータをロードする場合にのみ適用されます。

デフォルト: HEX

ESCAPE = '文字' | NONE
使用

データのロードとアンロード

定義

フィールド値のエスケープ文字として使用される1文字の文字列。エスケープ文字は、文字シーケンス内の後続の文字に対して代替解釈を呼び出します。ESCAPE 文字を使用して、データ内の FIELD_DELIMITERRECORD_DELIMITER、または FIELD_OPTIONALLY_ENCLOSED_BY 文字のインスタンスをリテラルとして解釈できます。エスケープ文字は、データ内のそれ自体のインスタンスをエスケープするためにも使用できます。

一般的なエスケープシーケンス、8進数値、または16進数値を受け入れます。

囲まれたフィールドのエスケープ文字を指定します。 FIELD_OPTIONALLY_ENCLOSED_BY を設定して、フィールドを囲むのに使用する文字を指定します。

デフォルト

NONE

ESCAPE_UNENCLOSED_FIELD = '文字' | NONE
使用

データのロードとアンロード

定義

囲まれていないフィールド値専用のエスケープ文字として使用される単一の文字列。エスケープ文字は、文字シーケンス内の後続の文字に対して代替解釈を呼び出します。ESCAPE 文字を使用して、データ内の FIELD_DELIMITER または RECORD_DELIMITER 文字のインスタンスをリテラルとして解釈できます。エスケープ文字は、データ内のそれ自体のインスタンスをエスケープするためにも使用できます。

一般的なエスケープシーケンス、8進数値、または16進数値を受け入れます。

デフォルト

バックスラッシュ(\\

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 = '文字' | NONE

文字列を囲むために使用する文字。値は、 NONE、一重引用符(')、または二重引用符(")のいずれかです。一重引用符を使用するには、8進数または16進数表現(0x27)または二重引用符で囲まれたエスケープ('')を使用します。

フィールドにこの文字が含まれる場合、同じ文字を使用してエスケープします。例えば、値が二重引用符であり、フィールドに文字列 A "B" C が含まれる場合、二重引用符を次のようにエスケープします。

A ""B"" C

デフォルト: NONE

NULL_IF = ( '文字列1' [ , '文字列2' ... ] )

SQL NULL との間の変換に使用される文字列。Snowflakeはデータロードソースのこれらの文字列を SQL NULL に置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。

例:

NULL_IF = ('\\N', 'NULL', 'NUL', '')

このオプションには空の文字列を含めることができます。

デフォルト: \\N (つまり、 NULL、 ESCAPE_UNENCLOSED_FIELD 値が \\ (デフォルト)であると想定しています)

ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE

入力データファイルの区切り列(フィールド)の数が対応するテーブルの列の数と一致しない場合に、解析エラーを生成するかどうかを指定するブール値。

FALSE に設定すると、エラーは生成されず、ロードが続行されます。ファイルが正常にロードされた場合:

  • 入力ファイルに、テーブル内の列よりもフィールド数が多いレコードが含まれている場合、一致するフィールドはファイル内の出現順にロードされ、残りのフィールドはロードされません。

  • 入力ファイルにテーブル内の列よりもフィールド数が少ないレコードが含まれている場合、テーブル内の一致しない列は NULL 値でロードされます。

このオプションは、入力ファイル内のすべてのレコードが同じ長さであることを前提としています(つまり、可変長のレコードを含むファイルは、このオプションに指定された値に関係なくエラーを返します)。

デフォルト: TRUE

注釈

ロード中にデータを変換する (つまり、 COPY コマンドのソースとしてクエリを使用する)場合、このオプションは無視されます。データファイルは、ターゲットテーブルと同数および同順序の列である必要はありません。

REPLACE_INVALID_CHARACTERS = TRUE | FALSE

無効な UTF -8文字をUnicode置換文字()で置き換えるかどうかを指定するブール値。

TRUE に設定すると、Snowflakeは無効な UTF -8文字をUnicode置換文字に置き換えます。

FALSE に設定すると、無効な UTF -8文字エンコードが検出されたときにロード操作でエラーが生成されます。

デフォルト: FALSE

VALIDATE_UTF8 = TRUE | FALSE

文字列列データの UTF-8文字エンコードを検証するかどうかを指定するブール値。

TRUE に設定すると、Snowflakeは文字列の列データの UTF-8文字エンコードを検証します。無効な UTF-8文字エンコードが検出されると、 COPY コマンドはエラーを生成します。

デフォルト: TRUE

重要

このオプションは、Snowflakeの以前のバージョンとの後方互換性を確保するためにのみ提供されています。Snowflakeサポートの指示がない限り、このオプションを 無効にしない でください。

EMPTY_FIELD_AS_NULL = TRUE | FALSE

2つの連続する区切り文字(例:,,)で表される入力ファイルの空のフィールドに、 SQL NULL を挿入するかどうかを指定するブール値。

FALSE に設定すると、Snowflakeは空のフィールドを対応する列タイプにキャストしようとします。タイプ STRINGの列に空の文字列が挿入されます。他の列タイプの場合、 COPY コマンドはエラーを生成します。

デフォルト: TRUE

SKIP_BYTE_ORDER_MARK = TRUE | FALSE

データファイルに存在する場合、 BOM (バイト順マーク)をスキップするかどうかを指定するブール値。 BOM は、データファイルの先頭にある文字コードで、バイト順とエンコード形式を定義します。

FALSE に設定されている場合、Snowflakeはデータファイル内の BOM を認識し、 BOM がエラーの原因になるか、テーブルの最初の列にマージされる可能性があります。

デフォルト: TRUE

ENCODING = '文字列'

ソースデータの文字セットを指定する文字列(定数)。

文字 セット

ENCODING 値

サポートされている言語

注意

Big5

BIG5

中国語(繁体字)

EUC-JP

EUCJP

日本語

EUC-KR

EUCKR

韓国語

GB18030

GB18030

中国語

IBM420

IBM420

アラビア語

IBM424

IBM424

ヘブライ語

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

トルコ語

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-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に変換されます。 VALIDATE_UTF8 ファイル形式オプションが TRUE の場合、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 = '文字列' | AUTO

JSON データを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 データファイルの日付文字列値の形式を定義します。値が指定されていない場合、または AUTO の場合、 DATE_INPUT_FORMAT パラメーターの値が使用されます。

現在、このファイル形式オプションは プレビュー機能 です。

デフォルト: AUTO

TIME_FORMAT = '文字列' | AUTO

JSON データを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 データファイルの時刻文字列値の形式を定義します。値が指定されていない場合、または AUTO の場合、 TIME_INPUT_FORMAT パラメーターの値が使用されます。

現在、このファイル形式オプションは プレビュー機能 です。

デフォルト: AUTO

TIMESTAMP_FORMAT = 文字列' | AUTO

JSON データを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 データファイルのタイムスタンプ文字列値の形式を定義します。値が指定されていない場合、または AUTO の場合、 TIMESTAMP_INPUT_FORMAT パラメーターの値が使用されます。

現在、このファイル形式オプションは プレビュー機能 です。

デフォルト: AUTO

BINARY_FORMAT = HEX | BASE64 | UTF8

JSON データを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 データファイルのバイナリ文字列値のエンコード形式を定義します。このオプションは、テーブルのバイナリ列にデータをロードするときに使用できます。

現在、このファイル形式オプションは プレビュー機能 です。

デフォルト: HEX

TRIM_SPACE = TRUE | FALSE

JSON データを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 文字列から先頭および末尾の空白を削除するかどうかを指定するブール値です。

たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeはフィールドの先頭として開始引用文字ではなく先頭スペースを読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを TRUE に設定すると、データのロード中に不要なスペースが削除されます。

現在、このファイル形式オプションは プレビュー機能 です。

デフォルト: FALSE

NULL_IF = ( '文字列1' [ , '文字列2' , ... ] )

JSON データを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 SQL NULLとの間の変換に使用される文字列です。Snowflakeはデータロードソースのこれらの文字列を SQL NULLに置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。

例:

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

IGNORE_UTF8_ERRORS = TRUE | FALSE

UTF-8エンコードエラーがエラー状態を引き起こすかどうかを指定するブール値。 TRUE に設定すると、無効な UTF-8シーケンスは警告なく、Unicode文字 U+FFFD (つまり、「置換文字」)に置き換えられます。

デフォルト: FALSE

SKIP_BYTE_ORDER_MARK = TRUE | FALSE

入力ファイルに存在する BOM (バイト順マーク)をスキップするかどうかを指定するブール値。 BOM は、データファイルの先頭にある文字コードで、バイト順とエンコード形式を定義します。

FALSE に設定されている場合、Snowflakeはデータファイル内の BOM を認識し、 BOM がエラーの原因になるか、テーブルの最初の列にマージされる可能性があります。

デフォルト: TRUE

TYPE = AVRO

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

TRIM_SPACE = TRUE | FALSE

Avroデータを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 文字列から先頭および末尾の空白を削除するかどうかを指定するブール値です。

たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeはフィールドの先頭として開始引用文字ではなく先頭スペースを読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを TRUE に設定すると、データのロード中に不要なスペースが削除されます。

現在、このファイル形式オプションは プレビュー機能 です。

デフォルト: FALSE

NULL_IF = ( '文字列1' [ , '文字列2' , ... ] )

Avroデータを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 SQL NULLとの間の変換に使用される文字列です。Snowflakeはデータロードソースのこれらの文字列を SQL NULLに置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。

例:

NULL_IF = ('\\N', 'NULL', 'NUL', '')

このオプションには空の文字列を含めることができます。

現在、このファイル形式オプションは プレビュー機能 です。

デフォルト: \\N (つまり、 NULL、 ESCAPE_UNENCLOSED_FIELD 値が \\ であると想定)

TYPE = ORC

TRIM_SPACE = TRUE | FALSE

ORC データを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 文字列から先頭および末尾の空白を削除するかどうかを指定するブール値です。

たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeはフィールドの先頭として開始引用文字ではなく先頭スペースを読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを TRUE に設定すると、データのロード中に不要なスペースが削除されます。

現在、このファイル形式オプションは プレビュー機能 です。

デフォルト: FALSE

NULL_IF = ( '文字列1' [ , '文字列2' , ... ] )

ORC データを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 SQL NULLとの間の変換に使用される文字列です。Snowflakeはデータロードソースのこれらの文字列を SQL NULLに置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。

例:

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

TRIM_SPACE = TRUE | FALSE

Parquetデータを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 文字列から先頭および末尾の空白を削除するかどうかを指定するブール値です。

たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeはフィールドの先頭として開始引用文字ではなく先頭スペースを読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを TRUE に設定すると、データのロード中に不要なスペースが削除されます。

現在、このファイル形式オプションは プレビュー機能 です。

デフォルト: FALSE

NULL_IF = ( '文字列1' [ , '文字列2' , ... ] )

Parquetデータを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 SQL NULLとの間の変換に使用される文字列です。Snowflakeはデータロードソースのこれらの文字列を SQL NULLに置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。

例:

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エンコードエラーがエラー状態を引き起こすかどうかを指定するブール値。 TRUE に設定すると、無効な UTF-8シーケンスは警告なく、Unicode文字 U+FFFD (つまり、「置換文字」)に置き換えられます。

デフォルト: 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

SKIP_BYTE_ORDER_MARK = TRUE | FALSE

入力ファイルに存在する BOM (バイト順マーク)をスキップするかどうかを指定するブール値。 BOM は、データファイルの先頭にある文字コードで、バイト順とエンコード形式を定義します。

FALSE に設定されている場合、Snowflakeはデータファイル内の BOM を認識し、 BOM がエラーの原因になるか、テーブルの最初の列にマージされる可能性があります。

デフォルト: TRUE

TRIM_SPACE = TRUE | FALSE

XML データを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 文字列から先頭および末尾の空白を削除するかどうかを指定するブール値です。

たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeはフィールドの先頭として開始引用文字ではなく先頭スペースを読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを TRUE に設定すると、データのロード中に不要なスペースが削除されます。

現在、このファイル形式オプションは プレビュー機能 です。

デフォルト: FALSE

NULL_IF = ( '文字列1' [ , '文字列2' , ... ] )

XML データを個別の列にロードするときにのみ適用されます(つまり、 MATCH_BY_COLUMN_NAME コピーオプションまたは COPY 変換を使用)。 SQL NULLとの間の変換に使用される文字列です。Snowflakeはデータロードソースのこれらの文字列を SQL NULLに置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。

例:

NULL_IF = ('\\N', 'NULL', 'NUL', '')

このオプションには空の文字列を含めることができます。

現在、このファイル形式オプションは プレビュー機能 です。

デフォルト: \\N (つまり、 NULL、 ESCAPE_UNENCLOSED_FIELD 値が \\ であると想定)

コピーオプション(copyOptions

次のコピーオプションを1つ以上指定できます(空白、コンマ、または改行で区切られます)。

ON_ERROR = CONTINUE | SKIP_FILE | SKIP_FILE_数値 | SKIP_FILE_数値% | ABORT_STATEMENT

ファイルからデータロード中にエラーが発生したときに実行するアクションを指定する文字列(定数):

サポートされる値

注意

CONTINUE

ファイルのロードを続けます。COPY ステートメントは、データファイルごとに発生した最大1つのエラーのエラーメッセージを返します。ROWS_PARSED 列の値と ROWS_LOADED 列の値の差は、検出されたエラーを含む行の数を表します。ただし、これらの各行には複数のエラーが含まれる可能性があります。データファイルのすべてのエラーを表示するには、 VALIDATION_MODE パラメーターを使用するか、 VALIDATE 関数をクエリします。

SKIP_FILE

ファイル内でエラーが発生した場合、ファイルをスキップします。

SKIP_FILE_数値 (例 SKIP_FILE_10

ファイル内のエラーの数が指定された数以上の場合、ファイルをスキップします。

SKIP_FILE_数値% (例 SKIP_FILE_10%

ファイル内のエラーの割合が指定された割合を超えた場合、ファイルをスキップします。

ABORT_STATEMENT

エラーが発生した場合、 COPY ステートメントを中止します。

デフォルト:

COPY を使用した一括ロード

ABORT_STATEMENT

Snowpipe

SKIP_FILE

SIZE_LIMIT = 数値

特定の COPY ステートメントに対してロードされるデータの最大サイズ(バイト単位)を指定する数値(> 0)。しきい値を超えると、 COPY 操作はファイルのロードを中止します。このオプションは、通常、複数の COPY ステートメントを使用してファイルの共通グループをロードするために使用されます。各ステートメントについて、次のステートメントに進む前に、指定された SIZE_LIMIT を超えるまでデータのロードが続行されます。

たとえば、ステージパス内の一連のファイルのサイズがそれぞれ10 MB であるとします。複数の COPY ステートメントが SIZE_LIMIT を 25000000 (25 MB)に設定すると、それぞれが3ファイルをロードします。つまり、 SIZE_LIMIT しきい値を超えると、各 COPY 操作は中断されます。

ロードするファイルがない場合を除き、 SIZE_LIMIT:code: に指定された値に関係なく、少なくとも1つのファイルがロードされることに注意してください。

デフォルト:null(サイズ制限なし)

PURGE = TRUE | FALSE

データが正常にロードされた後、ステージからデータファイルを自動的に削除するかどうかを指定するブール値。

このオプションが TRUE に設定されている場合は、正常にロードされたデータファイルを削除するために最善の努力が払われることに注意してください。パージ操作が何らかの理由で失敗した場合、現在エラーは返されません。ステージングされたファイルを定期的にリストし( LIST を使用)、正常にロードされたファイルがある場合は手動で削除することをお勧めします。

デフォルト: FALSE

RETURN_FAILED_ONLY = TRUE | FALSE

ステートメント結果でロードに失敗したファイルのみを返すかどうかを指定するブール値。

デフォルト: FALSE

MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE

データで表される対応する列と一致するターゲットテーブルの列に半構造化データをロードするかどうかを指定する文字列。

列が一致するには、次の条件を満たす必要があります。

  • データで表される列は、テーブルの列と まったく同じ名前 である必要があります。コピーオプションは、列名の大文字と小文字を区別します。列の順序は関係ありません。

  • テーブルの列には、データで表される列の値と互換性のあるデータ型が必要です。例えば、文字列、数値、ブール値はすべてバリアント列にロードできます。

次のオプションがサポートされています。

CASE_SENSITIVE | CASE_INSENSITIVE

データで表される対応する列に一致するターゲットテーブルの列に半構造化データをロードします。列名は、大文字と小文字が区別される(CASE_SENSITIVE)または大文字と小文字が区別されない(CASE_INSENSITIVE)です。

COPY 操作は、ターゲットテーブルの少なくとも1つの列がデータファイルで表される列と一致することを確認します。一致が見つかった場合、データファイルの値が1つまたは複数の列にロードされます。一致が見つからない場合、ファイル内の各レコードの NULL 値のセットがテーブルにロードされます。

注釈

  • 一致しない追加の列がデータファイルに存在する場合、これらの列の値はロードされません。

  • 一致しない追加の列がターゲットテーブルに存在する場合、 COPY 操作はこれらの列に NULL 値を挿入します。これらの列は NULL 値をサポートする必要があります。

  • COPY ステートメントでは、ロード中にデータをさらに変換するクエリを指定できません(つまり、 COPY 変換)。

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 日付(つまり、ファイルがステージされた日付)が65日以上前。

  • データの初期セットがテーブルにロードされたのが65日以上前。

  • ファイルが既にテーブルに正常にロードされている場合、このイベントが発生したのは65日以上前。

ロードステータスが既知かどうかに関係なく、 COPY コマンドにすべてのファイルを強制的にロードさせるには、代わりに FORCE オプションを使用します。

ロードステータスの不確実性の詳細については、 古いファイルをロードする をご参照ください。

デフォルト: FALSE

使用上の注意

  • テーブル自体のステージからテーブルにロードする場合、 FROM 句は不要であり、省略できます。

  • ロード中にデータを変換する場合(つまり、クエリを COPYコ マンドのソースとして使用する場合):

    • ファイルからのデータの選択は、名前付きステージ(内部または外部)とユーザーステージでのみサポートされます。テーブルステージではサポートされていません。

    • CSV および半構造化ファイルタイプの両方がサポートされています。ただし、半構造化データ(例: JSON)をロードする際も、ファイル形式タイプとして CSV を設定する必要があります(デフォルト値)。対応するファイル形式を使用できます(例: JSON)、ただし、 ON_ERROR オプションを設定してファイルを続行またはスキップしても、変換のエラーがあれば COPY 操作が停止します。

      さらに、ファイル形式オプション FIELD_DELIMITER = NONE を設定します。

    • ロード操作中に JSON データを変換するには、データファイルを NDJSON (「改行区切り JSON」)標準形式で構成する必要があります。そうしないと、次のエラーが発生する場合があります。

      Error parsing JSON: more than one document in the input

    • 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_INTEGRATIONCREDENTIALS、および 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;

外部の場所からファイルを直接ロードする

次の例では、名前付きの my_csv_format ファイル形式を使用して、保存場所(Amazon S3、Google Cloud Storage、またはMicrosoft Azure)から data/files で始まるすべてのファイルをロードします。

Amazon S3

myint という名前の参照されたストレージ統合を使用して、参照されたS3バケットにアクセスします。

COPY INTO mytable
  FROM s3://mybucket/data/files
  STORAGE_INTEGRATION = myint
  ENCRYPTION=(MASTER_KEY = 'eSxX0jzYfIamtnBKOEOwq80Au6NbSgPH5r4BDDwOaO8=')
  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 = 'eSxX0jzYfIamtnBKOEOwq80Au6NbSgPH5r4BDDwOaO8=')
  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 という名前の参照ストレージ統合を使用して、参照されたコンテナーにアクセスします。

COPY INTO mytable
  FROM azure://myaccount.blob.core.windows.net/data/files
  STORAGE_INTEGRATION = myint
  ENCRYPTION=(TYPE='AZURE_CSE' MASTER_KEY = 'kPxX0jzYfIamtnJEUTHwq80Au6NbSgPH5r4BDDwOaO8=')
  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 = 'kPxX0jzYfIamtnJEUTHwq80Au6NbSgPH5r4BDDwOaO8=')
  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 データのロード

次の例では、 JSON データを、タイプ VARIANTの単一の列を持つテーブルにロードします。

段階的な 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 delimits records using the new line character and strips the outer array. */

CREATE OR REPLACE FILE FORMAT json_format
  TYPE = 'JSON'
  FIELD_DELIMITER = NONE
  RECORD_DELIMITER = '\\n'
  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]