カテゴリ:

テーブル、ビュー、シーケンス DDL

CREATE TABLE

現在の/指定されたスキーマに新しいテーブルを作成するか、既存のテーブルを置き換えます。テーブルには複数の列を含めることができ、各列の定義は名前、データ型に加え、オプションで列に次があるかどうかにより構成されます。

  • 値(NOT NULL)が必要かどうか。

  • デフォルト値があるかどうか。

  • 参照整合性の制約(主キー、外部キーなど)があるかどうか。

さらに、このコマンドは次のバリアントをサポートしています。

  • CREATE TABLE ... AS SELECT (データが入ったテーブルを作成。 CTAS とも呼ばれる)

  • CREATE TABLE ... USING TEMPLATE (ステージングされたファイルのセットから派生した列定義を持つテーブルを作成)

  • CREATE TABLE ... LIKE (既存テーブルの空のコピーを作成)

  • CREATETABLE ... CLONE (既存のテーブルのクローンを作成)

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

ALTER TABLEDROP TABLESHOW TABLESDESCRIBE TABLE

このトピックの内容:

構文

CREATE [ OR REPLACE ]
    [ { [ LOCAL | GLOBAL ] TEMP[ORARY] | VOLATILE } | TRANSIENT ]
    TABLE [ IF NOT EXISTS ] <table_name>
    ( <col_name> <col_type>
                             [ COLLATE '<collation_specification>' ]
                                /* COLLATE is supported only for text data types (VARCHAR and synonyms) */
                             [ COMMENT '<string_literal>' ]
                             [ { DEFAULT <expr>
                               | { AUTOINCREMENT | IDENTITY } [ { ( <start_num> , <step_num> ) | START <num> INCREMENT <num> } ] } ]
                                /* AUTOINCREMENT (or IDENTITY) is supported only for numeric data types (NUMBER, INT, FLOAT, etc.) */
                             [ NOT NULL ]
                             [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
                             [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
                             [ inlineConstraint ]
      [ , <col_name> <col_type> [ ... ] ]
      [ , outoflineConstraint ]
      [ , ... ] )
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ STAGE_FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>'
                           | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
  [ STAGE_COPY_OPTIONS = ( copyOptions ) ]
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ CHANGE_TRACKING = { TRUE | FALSE } ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
  [ COPY GRANTS ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ COMMENT = '<string_literal>' ]

条件:

inlineConstraint ::=
  [ CONSTRAINT <constraint_name> ]
  { UNIQUE | PRIMARY KEY | { [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } }
  [ <constraint_properties> ]

インライン制約の詳細については、 CREATE | ALTER TABLE ... CONSTRAINT をご参照ください。

outoflineConstraint ::=
  [ CONSTRAINT <constraint_name> ]
  {
     UNIQUE [ ( <col_name> [ , <col_name> , ... ] ) ]
   | PRIMARY KEY [ ( <col_name> [ , <col_name> , ... ] ) ]
   | [ FOREIGN KEY ] [ ( <col_name> [ , <col_name> , ... ] ) ]
                     REFERENCES <ref_table_name> [ ( <ref_col_name> [ , <ref_col_name> , ... ] ) ]
  }
  [ <constraint_properties> ]

アウトライン制約の詳細については、 CREATE | ALTER TABLE ... CONSTRAINT をご参照ください。

formatTypeOptions ::=
-- If TYPE = CSV
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     RECORD_DELIMITER = '<character>' | NONE
     FIELD_DELIMITER = '<character>' | NONE
     FILE_EXTENSION = '<string>'
     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 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>' ... ] )
     FILE_EXTENSION = '<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 TYPE = AVRO
     COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = ORC
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = PARQUET
     COMPRESSION = AUTO | LZO | SNAPPY | NONE
     SNAPPY_COMPRESSION = TRUE | FALSE
     BINARY_AS_TEXT = TRUE | FALSE
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If 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
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

バリアント構文

CREATE TABLE ... AS SELECT (CTAS とも呼ばれる)

クエリによって返されたデータが入力される新しいテーブルを作成します。

CREATE [ OR REPLACE ] TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ]
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ COPY GRANTS ]
  AS SELECT <query>
  [ ... ]

マスキングポリシーは、 CTAS ステートメントの列に適用できます。列のデータ型の後にマスキングポリシーを指定します。同様に、行アクセスポリシーをテーブルに適用できます。例:

CREATE TABLE <table_name> ( <col1> <data_type> [ with ] masking policy <policy_name> [ , ... ] )
  ...
  [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col1> [ , ... ] )
  AS SELECT <query>
  [ ... ]

注釈

CTAS では、 COPY GRANTS 句は、 OR REPLACE 句と組み合わせた場合にのみ有効です。COPY GRANTS は、 SELECT ステートメントでクエリされているソーステーブルからではなく、 CREATE OR REPLACE で置き換えられているテーブル(既に存在する場合)から権限をコピーします。CTAS と合わせて COPY GRANTS を使用すると、テーブルに対する既存の権限を維持しながら、新しいデータセットでテーブルを上書きできます。

COPYGRANTS の詳細については、このドキュメント内の COPY GRANTS をご参照ください。

CREATE TABLE ... USING TEMPLATE

半構造化データを含むステージングされたファイルのセットから派生した列定義で、新しいテーブルを作成します。この機能は現在、Apache Parquet、Apache Avro、および ORC ファイルに限定されています。

CREATE [ OR REPLACE ] TABLE <table_name>
  [ COPY GRANTS ]
  USING TEMPLATE <query>
  [ ... ]

注釈

ステートメントにより同じ名前の既存のテーブルを置き換える場合、権限は置き換えられるテーブルからコピーされます。その名前の既存のテーブルがない場合、権限はクローンされるソーステーブルからコピーされます。

COPYGRANTS の詳細については、このドキュメント内の COPY GRANTS をご参照ください。

CREATE TABLE ... LIKE

既存のテーブルと同じ列定義を使用して新しいテーブルを作成しますが、既存のテーブルからデータをコピーしません。列名、タイプ、デフォルト、および制約が新しいテーブルにコピーされます。

CREATE [ OR REPLACE ] TABLE <table_name> LIKE <source_table>
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ COPY GRANTS ]
  [ ... ]

COPYGRANTS の詳細については、このドキュメント内の COPY GRANTS をご参照ください。

注釈

データ共有を介してアクセスされる自動インクリメントシーケンスを持つテーブルに対するCREATE TABLE ... LIKEは、現在 サポートされていません

CREATE TABLE ... CLONE

データを実際にコピーすることなく、同じ列定義を使用して、ソーステーブルのすべての既存データを含む新しいテーブルを作成します。このバリアントは、過去の特定の時間/ポイントでテーブルをクローンするためにも使用できます( Time Travel を使用)。

CREATE [ OR REPLACE ] TABLE <name> CLONE <source_table>
  [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
  [ COPY GRANTS ]
  [ ... ]

注釈

ステートメントにより同じ名前の既存のテーブルを置き換える場合、権限は置き換えられるテーブルからコピーされます。その名前の既存のテーブルがない場合、権限はクローンされるソーステーブルからコピーされます。

COPYGRANTS の詳細については、このドキュメント内の COPY GRANTS をご参照ください。

クローンの詳細については、 CREATE <オブジェクト> ... CLONE をご参照ください。

必須パラメーター

name

テーブルの識別子(つまり、名前)を指定します。テーブルが作成されるスキーマに対して一意である必要があります。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例: "My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

col_name

列識別子(名前)を指定します。テーブル識別子のすべての要件は、列識別子にも適用されます。

詳細については、 識別子の要件 および 予約済みおよび限定キーワード をご参照ください。

注釈

標準の予約キーワードに加えて、次のキーワードは ANSI 標準コンテキスト関数用に予約されているため、列識別子として使用できません。

  • CURRENT_DATE

  • CURRENT_ROLE

  • CURRENT_TIME

  • CURRENT_TIMESTAMP

  • CURRENT_USER

予約済みキーワードのリストについては、 予約済みおよび限定キーワード をご参照ください。

col_type

列のデータ型を指定します。

テーブル列に指定できるデータ型の詳細については、 データ型 をご参照ください。

query
USING TEMPLATE を使用する場合は必須

INFER_SCHEMA 関数を呼び出し、出力を配列としてフォーマットするサブクエリ。

または、 USING TEMPLATE は INFER_SCHEMA 出力を文字列リテラルまたは変数として受け入れます。

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

TEMP[ORARY] | LOCAL TEMP[ORARY] | GLOBAL TEMP[ORARY] | VOLATILE

テーブルが仮であることを指定します。仮テーブルは、作成されたユーザーセッションの間のみ保持され、他のユーザーには表示されません。仮テーブルとそのすべてのコンテンツは、セッションの終了時にドロップされます。

TEMPORARY (例: GLOBAL TEMPORARY)の同義語と略語は、他のデータベースとの互換性のために提供されています(例えば、 CREATE TABLE ステートメントの移行時のエラーを防ぐため)。これらのキーワードのいずれかで作成されたテーブルは、 TEMPORARY を使用して作成されたテーブルと同じように表示され、動作します。

デフォルト:値なし。テーブルが TRANSIENT または TEMPORARY として宣言されていない場合、そのテーブルは永続的です。

注釈

仮テーブルには、同じスキーマ内に同じ名前を持つ他のテーブルで発生する可能性のある名前の競合に関して、使用上の考慮事項がいくつかあります。

さらに、仮テーブルにはストレージに関する考慮事項がいくつかあります。

仮テーブルを作成するか一時テーブルを作成するかを決定する際のこれらおよびその他の考慮事項の詳細については、 仮テーブルと一時テーブルの使用 および Time TravelおよびFail-safeのストレージコスト をご参照ください。

TRANSIENT

テーブルが一時的であることを指定します。

永続テーブルのように、一時テーブルは明示的にドロップされるまで存在し、適切な権限を持つすべてのユーザーに表示されます。ただし、一時テーブルは永続テーブルよりもデータ保護のレベルが低いため、システム障害が発生すると一時テーブルのデータが失われる可能性があります。そのため、一時テーブルは、Snowflakeの外部で再作成できるデータのみに使用する必要があります。

デフォルト:値なし。テーブルが TRANSIENT または TEMPORARY として宣言されていない場合、そのテーブルは永続的です。

注釈

一時テーブルには、ストレージに関する考慮事項がいくつかあります。

仮テーブルを作成するか一時テーブルを作成するかを決定する際のこれらおよびその他の考慮事項の詳細については、 仮テーブルと一時テーブルの使用 および Time TravelおよびFail-safeのストレージコスト をご参照ください。

COLLATE 'collation_specification'

文字列比較などの列操作に使用する照合を指定します。このオプションはテキスト列(VARCHAR、 STRING、 TEXTなど)にのみ適用されます。詳細については、 照合仕様 をご参照ください。

COMMENT 'string_literal'

列のコメントを指定します。

(コメントは列レベルまたはテーブルレベルで指定できることに注意してください。それぞれの構文は少し異なります。)

DEFAULT ... または . AUTOINCREMENT ...

INSERT または CREATE TABLE AS SELECT ステートメントで値が明示的に指定されていない場合に、デフォルト値を列に自動的に挿入するかどうかを指定します。

DEFAULT expr

列のデフォルト値は、次のいずれかの指定可能な式によって定義されます。

  • 定数値。

  • シーケンス参照(seq_name.NEXTVAL)。

  • スカラー値を返す単純式。

    UDFが セキュアUDF でない場合、単純式にSQL UDF(ユーザー定義関数)を含めることができます。

    注釈

    デフォルトの式がSQLユーザー定義関数(UDF)を参照している場合、関数はテーブル作成時にその定義に置き換えられます。ユーザー定義関数が将来再定義される場合は、列のデフォルト式は更新されません。

    単純式 cannot には、次の参照を含めることができません。

    • サブクエリ。

    • 集計。

    • ウィンドウ関数。

    • セキュアUDFs

    • SQL以外の言語で書かれてるUDFs(例: Java、JavaScript)。

    • 外部関数。

{ AUTOINCREMENT | IDENTITY } [ { ( start_num , step_num ) | START num INCREMENT num } ]

AUTOINCREMENTIDENTITY は同義語です。いずれかが使用されている場合、列のデフォルト値は指定された数値で始まり、連続する各値は指定された量だけ自動的に増加します。

ご用心

Snowflakeはシーケンスを使用して、自動インクリメントされた列の値を生成します。シーケンスには制限があります。 シーケンスのセマンティクス をご参照ください。

開始とステップ/増分の両方のデフォルト値は 1 です。

AUTOINCREMENT および IDENTITY は、数値データ型の列にのみ使用できます。

デフォルト:値なし(列にデフォルト値なし)

注釈

DEFAULTAUTOINCREMENT は、相互に排他的です。列には1つしか指定できません。

MASKING POLICY = policy_name

列に設定する マスキングポリシー を指定します。

USING ( col_name , cond_col_1 ... )

条件付きマスキングポリシー SQL 式に渡す引数を指定します。

リストの最初の列は、データをマスクまたはトークン化するポリシー条件の列を指定し、マスキングポリシーが設定されている列と一致する 必要 があります。

追加の列は、最初の列でクエリが実行されたときに、クエリ結果の各行のデータをマスクするかトークン化するかを決定するために評価する列を指定します。

USING 句が省略されている場合、Snowflakeは条件付きマスキングポリシーを通常の マスキングポリシー として扱います。

CONSTRAINT ...

テーブル内の指定された列のインラインまたはアウトライン制約を定義します。

構文の詳細については、 CREATE | ALTER TABLE ... CONSTRAINT をご参照ください。制約の詳細については、 制約 をご参照ください。

CLUSTER BY ( expr [ , expr , ... ] )

テーブル内の1つ以上の列または列式をクラスタリングキーとして指定します。詳細については、 クラスタリングキーとクラスタ化されたテーブル をご参照ください。

デフォルト:値なし(テーブルにクラスタリングキーが定義されていない)

重要

クラスタリングキーは、すべてのテーブルに対して意図または推奨されて いません 。通常、非常に大きな(つまり、マルチテラバイト)テーブルに役立ちます。

テーブルのクラスタリングキーを指定する前に、 Snowflakeテーブル構造について をお読みください。

STAGE_FILE_FORMAT = ( FORMAT_NAME = 'file_format_name' ) または . STAGE_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 [ ... ]

テーブルにロード/アンロードするファイルのタイプを指定します。

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

デフォルト: TYPE = CSV

注釈

FORMAT_NAMETYPE は相互に排他的です。意図しない動作を避けるために、テーブルを作成するときはどちらか一方のみを指定する必要があります。

STAGE_COPY_OPTIONS = ( ... )

テーブルにデータをロードするときに使用する1つ(または複数)のオプションを指定します。詳細については、 コピーオプション (このトピック内)をご参照ください。

DATA_RETENTION_TIME_IN_DAYS = integer

テーブルの履歴データに対してTime Travelアクション(SELECT、CLONE、UNDROP)を実行できるように、テーブルの保持期間を指定します。詳細については、 Time Travelの理解と使用 および 仮テーブルと一時テーブルの使用 をご参照ください。

このオブジェクトレベルパラメーターの詳細な説明、およびオブジェクトパラメーターの詳細については、 パラメーター をご参照ください。

値:

  • Standard Edition: 0 または 1

  • Enterprise Edition:

    • 永続テーブルの場合は 090

    • 仮テーブルと一時テーブルの場合は 0 または 1

デフォルト:

  • Standard Edition: 1

  • Enterprise Edition(またはそれ以上): 1 (スキーマ、データベースまたはアカウントレベルで別のデフォルト値が指定されていない場合)

注釈

0 の値は、テーブルのTime Travelを効果的に無効化します。

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

Snowflakeがテーブルのデータ保持期間を延長してテーブル上のストリームが古くなるのを防ぐことができる最大日数を指定するオブジェクトパラメーター。

このパラメーターの詳細については、 MAX_DATA_EXTENSION_TIME_IN_DAYS をご参照ください。

CHANGE_TRACKING = TRUE | FALSE

テーブルで変更追跡を有効にするかどうかを指定します。

  • TRUE テーブルの変更追跡を有効にします。この設定により、非表示の列のペアがソーステーブルに追加され、変更追跡メタデータの列への保存が開始されます。これらの列は少量のストレージを消費します。

    変更追跡メタデータのクエリには、 SELECT ステートメントの CHANGES 句を使用するか、テーブルで1つ以上のストリームを作成し、クエリします。

  • FALSE は、テーブルの変更追跡を有効にしません。

デフォルト: FALSE

DEFAULT_DDL_COLLATION = 'collation_specification'

将来テーブルに追加される列を含む、テーブルの列のデフォルトの 照合仕様 を指定します。

パラメーターの詳細については、 DEFAULT_DDL_COLLATION をご参照ください。

COPY GRANTS

次の CREATE TABLE バリアントのいずれかを使用して新しいテーブルが作成されるときに、元のテーブルからのアクセス権を保持することを指定します。

  • CREATE OR REPLACE TABLE

  • CREATE TABLE ... LIKE

  • CREATE TABLE ... CLONE

このパラメーターは、既存のテーブルから新しいテーブルにすべての権限(OWNERSHIP 以外)をコピーします。新しいテーブルは、スキーマ内のオブジェクトタイプに定義された将来の許可を継承 しません 。デフォルトでは、 CREATE TABLE ステートメントを実行するロールが新しいテーブルを所有します。

パラメーターが CREATE TABLE ステートメントに含まれていない場合、新しいテーブルは元のテーブルに付与された明示的なアクセス権限を 継承しません が、スキーマ内のオブジェクトタイプに定義された将来の権限を継承します。

ノート:

  • CREATE TABLE ステートメントが複数のテーブル(例: create or replace table TABLE1 clone TABLE2;)を参照している場合、 COPY GRANTS 句は 置換されるテーブル (この例では TABLE1)から許可をコピーします。

  • データ共有 の場合、

    • 既存のテーブルが別のアカウントと共有されていた場合、置換テーブルも共有されます。

    • 既存のテーブルがデータコンシューマとしてアカウントと共有され、アクセスがアカウント内の他のロールにさらに許可された場合(親データベースの GRANT IMPORTED PRIVILEGES を使用)、置換テーブルにもアクセスが許可されます。

  • 置換テーブルの SHOW GRANTS 出力には、コピーされた権限の被付与者が、ステートメントが実行されたときの現在のタイムスタンプとともに、 CREATE TABLE ステートメントを実行したロールとしてリストされます。

  • 付与をコピーする操作は、 CREATE TABLE コマンドで(つまり、同じトランザクション内で)アトミックに発生します。

ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )

テーブルに設定する 行アクセスポリシー を指定します。

TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]

タグ の名前とタグ文字列の値を指定します。

タグ値は常に文字列であり、タグ値の最大文字数は256です。

ステートメントにあるタグの指定の詳細については、 オブジェクトおよび列のタグクォータ をご参照ください。

COMMENT = 'string_literal'

テーブルのコメントを指定します。

デフォルト:値なし

(コメントは列レベルまたはテーブルレベルで指定できることに注意してください。それぞれの構文は少し異なります。)

形式タイプオプション(formatTypeOptions

形式タイプオプションは、 テーブルへのデータのロードテーブルからのデータのアンロード に使用されます。

指定したファイル形式タイプ(STAGE_FILE_FORMAT = ( TYPE = ... ))に応じて、次の形式固有のオプションを1つ以上含めることができます(空白、コンマ、または改行で区切られます)。

TYPE = CSV

COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
使用

データのロード、データのアンロード、および外部テーブル

定義
  • データをロードするときに、データファイルの現在の圧縮アルゴリズムを指定します。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。

  • データをアンロードする際、指定された圧縮アルゴリズムを使用してデータファイルを圧縮します。

サポートされる値

メモ

AUTO

データをロードすると、圧縮アルゴリズムは自動的に検出されますが、Brotliで圧縮されたファイルは例外で、現在は自動検出できません。データをアンロードするとき、ファイルはデフォルトのgzipを使用して自動的に圧縮されます。

GZIP

BZ2

BROTLI

Brotliで圧縮されたファイルをロード/アンロードするときは、指定する必要があります。

ZSTD

Zstandard v0.8(およびそれ以上)がサポートされています。

DEFLATE

Deflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。

RAW_DEFLATE

生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。

NONE

データをロードするとき、ファイルが圧縮されていないことを示します。データをアンロードするとき、アンロードされたファイルが圧縮されないことを指定します。

デフォルト

AUTO

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プラットフォーム上のファイルの改行として理解されることに注意してください。

データのアンロード

改行文字(\n)。

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')向けとして区切り文字の部分文字列にすることはできません。

指定された区切り文字は、ランダムなバイトのシーケンスではなく、有効な UTF-8文字でなければなりません。区切り文字は最大20文字に制限されていることにも注意してください。

NONE の値も受け入れます。

デフォルト

コンマ(,

FILE_EXTENSION = 'string' | NONE
使用

データのアンロードのみ

定義

ステージにアンロードされるファイルの拡張子を指定します。拡張子を受け入れます。目的のソフトウェアまたはサービスが読み取れるファイル拡張子を指定することは、ユーザーの責任です。

デフォルト

null、つまり、ファイル拡張子は形式タイプ .csv[compression] によって決定されます。ここで、 compression は、 COMPRESSION が設定されている場合、圧縮方法によって追加された拡張子です。

注釈

SINGLE コピーオプションが TRUE の場合、 COPY コマンドはデフォルトでファイル拡張子のないファイルをアンロードします。ファイル拡張子を指定するには、 internal_location または external_location パス(例: copy into @stage/data.csv)でファイル名と拡張子を指定します。

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 (データのロード)または DATE_OUTPUT_FORMAT (データのアンロード)パラメーターの値が使用されます。

デフォルト

AUTO

TIME_FORMAT = 'string' | AUTO
使用

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

定義

データファイル(データのロード)またはテーブル(データのアンロード)の時間値の形式を定義します。値が指定されていない、または AUTO の場合、 TIME_INPUT_FORMAT (データのロード)または TIME_OUTPUT_FORMAT (データのアンロード)パラメーターの値が使用されます。

デフォルト

AUTO

TIMESTAMP_FORMAT = string' | AUTO
使用

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

定義

データファイル(データのロード)またはテーブル(データのアンロード)のタイムスタンプ値の形式を定義します。値が指定されていない、または AUTO の場合、 TIMESTAMP_INPUT_FORMAT (データのロード)または TIMESTAMP_OUTPUT_FORMAT (データのアンロード)パラメーターの値が使用されます。

デフォルト

AUTO

BINARY_FORMAT = HEX | BASE64 | UTF8
使用

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

定義

バイナリ入力または出力のエンコード形式を定義します。このオプションは、テーブルのバイナリ列にデータをロードまたはアンロードするときに使用できます。

デフォルト

HEX

ESCAPE = 'character' | NONE
使用

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

定義

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

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

データのロード

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

注釈

このファイル形式オプションは、シングルバイト文字のみをサポートします。UTF-8文字エンコードは、上位の ASCII 文字をマルチバイト文字として表すことに注意してください。データファイルが UTF-8文字セットでエンコードされている場合は、オプション値として上位の ASCII 文字を指定することはできません。

さらに、上位の ASCII 文字を指定する場合は、データファイルの文字エンコードとして ENCODING = 'string' ファイル形式オプションを設定して、文字が正しく解釈されるようにすることをお勧めします。

データのアンロード

このオプションが設定されている場合は、 ESCAPE_UNENCLOSED_FIELD のエスケープ文字セットが上書きされます。

デフォルト

NONE

ESCAPE_UNENCLOSED_FIELD = 'character' | NONE
使用

データのロード、データのアンロード、および外部テーブル

定義

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

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

データのロード

囲まれていないフィールド専用のエスケープ文字を指定します。

注釈

  • デフォルト値は \\ です。データファイルの行がバックスラッシュ(\)文字で終わる場合、この文字は RECORD_DELIMITER ファイル形式オプションに指定された改行文字または復帰文字をエスケープします。その結果、ロード操作はこの行と次の行を単一のデータ行として扱います。この問題を回避するには、この値を NONE に設定します。

  • このファイル形式オプションは、シングルバイト文字のみをサポートします。UTF-8文字エンコードは、上位の ASCII 文字をマルチバイト文字として表すことに注意してください。データファイルが UTF-8文字セットでエンコードされている場合は、オプション値として上位の ASCII 文字を指定することはできません。

    さらに、上位の ASCII 文字を指定する場合は、データファイルの文字エンコードとして ENCODING = 'string' ファイル形式オプションを設定して、文字が正しく解釈されるようにすることをお勧めします。

データのアンロード

ESCAPE が設定されている場合は、そのファイルオプションのエスケープ文字セットがこのオプションを上書きします。

デフォルト

バックスラッシュ(\\

TRIM_SPACE = TRUE | FALSE
使用

データのロードおよび外部テーブル

定義

フィールドから空白を削除するかどうかを指定するブール値。

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

別の例として、先頭または後続のスペースが文字列を囲む引用符の前後にある場合、このオプションを使用して周囲のスペースを削除し、 FIELD_OPTIONALLY_ENCLOSED_BY オプションを使用して引用文字を削除できます。引用符 のスペースは保持されることに注意してください。たとえば、 FIELD_DELIMITER = '|'FIELD_OPTIONALLY_ENCLOSED_BY = '"' を想定した場合、

|"Hello world"|    /* loads as */  >Hello world<
|" Hello world "|  /* loads as */  > Hello world <
| "Hello world" |  /* loads as */  >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', '')

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

  • データをアンロードする際、Snowflakeは SQL NULL 値をリストの最初の値に変換します。

デフォルト

\\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

EMPTY_FIELD_AS_NULL = TRUE | FALSE
使用

データのロード、データのアンロード、および外部テーブル

定義
  • データをロードするとき、2つの連続する区切り文字(例: ,,)で表される入力ファイルの空のフィールドに、 SQL NULL を挿入するかどうかを指定します。

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

  • データをアンロードするとき、このオプションは FIELD_OPTIONALLY_ENCLOSED_BY と組み合わせて使用されます。 FIELD_OPTIONALLY_ENCLOSED_BY = NONE の場合、 EMPTY_FIELD_AS_NULL = FALSE を設定すると、テーブル内の空の文字列を、フィールド値を囲む引用符なしで空の文字列値にアンロードするように指定されます。

    TRUE に設定した場合、 FIELD_OPTIONALLY_ENCLOSED_BY は文字列を囲む文字を指定する必要があります。

デフォルト

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

ヘブライ語

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-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で圧縮されたファイルは例外で、現在は自動検出できません。データをアンロードするとき、ファイルはデフォルトのgzipを使用して自動的に圧縮されます。

GZIP

BZ2

BROTLI

Brotliで圧縮されたファイルをロード/アンロードする場合は、指定する必要があります。

ZSTD

Zstandard v0.8(およびそれ以上)がサポートされています。

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 値が \\ であると想定)

FILE_EXTENSION = 'string' | NONE
使用

データのアンロードのみ

定義

ステージにアンロードされるファイルの拡張子を指定します。拡張子を受け入れます。目的のソフトウェアまたはサービスが読み取れるファイル拡張子を指定することは、ユーザーの責任です。

デフォルト

null、つまり、ファイル拡張子は形式タイプ .json[compression] によって決定されます。ここで、 compression は、 COMPRESSION が設定されている場合、圧縮方法によって追加された拡張子です。

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

注釈

このコピーオプションは、データの読み込み中に UTF-8以外のすべての文字を削除しますが、1対1の文字置換の保証はありません。代わりに、 REPLACE_INVALID_CHARACTERS コピーオプションを使用することをお勧めします。

デフォルト

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で圧縮されたファイルは例外で、現在は自動検出できません。データをアンロードするとき、ファイルはデフォルトのgzipを使用して自動的に圧縮されます。

GZIP

BROTLI

Brotliで圧縮されたファイルをロード/アンロードする場合は、指定する必要があります。

ZSTD

Zstandard v0.8(およびそれ以上)がサポートされています。

DEFLATE

Deflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。

RAW_DEFLATE

生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。

NONE

データをロードするとき、ファイルが圧縮されていないことを示します。データをアンロードするとき、アンロードされたファイルが圧縮されないことを指定します。

デフォルト

AUTO

TRIM_SPACE = TRUE | FALSE
使用

データのロードのみ

定義

文字列から先頭と末尾の空白を削除するかどうかを指定するブール値。

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

このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してAvroデータを個別の列にロードする場合にのみ、次のアクションに適用されます。

デフォルト

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

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 | LZO | SNAPPY | NONE
使用

データのロード、データのアンロード、および外部テーブル

定義

  • データをロードするときに、Parquetファイルにある列の現在の圧縮アルゴリズムを指定します。

  • データをアンロードする際、指定された圧縮アルゴリズムを使用してデータファイルを圧縮します。

サポートされる値

メモ

AUTO

データをロードするときに、圧縮アルゴリズムが自動的に検出されました。対応する圧縮アルゴリズム: Brotli、gzip、Lempel-Ziv-Oberhumer(LZO)、 LZ4、Snappy、またはZstandard v0.8(およびそれ以上)。 . データをアンロードすると、アンロードされたファイルはデフォルトで Snappy 圧縮アルゴリズムを使用して圧縮されます。

LZO

データをアンロードするとき、ファイルはデフォルトでSnappyアルゴリズムを使用して圧縮されます。LZO 圧縮ファイルにデータをアンロードする場合は、この値を指定します。

SNAPPY

データをアンロードするとき、ファイルはデフォルトでSnappyアルゴリズムを使用して圧縮されます。オプションでこの値を指定できます。

NONE

データをロードするとき、ファイルが圧縮されていないことを示します。データをアンロードするとき、アンロードされたファイルが圧縮されないことを指定します。

デフォルト

AUTO

SNAPPY_COMPRESSION = TRUE | FALSE
使用

データのアンロードのみ

AUTO | アンロードされたファイルは、デフォルトで Snappy 圧縮アルゴリズムを使用して圧縮されます。 SNAPPY | Snappy圧縮ファイルをアンロードする場合に指定できます。 NONE | データをロードするときに、ファイルが圧縮されていないことを示します。データをアンロードするとき、アンロードされたファイルが圧縮されないことを指定します。

定義

アンロードされたファイルが SNAPPY アルゴリズムを使用して圧縮されるかどうかを指定するブール値。

注釈

非推奨。 代わりに COMPRESSION = SNAPPY を使用してください。

制限事項

データのアンロード操作についてのみサポートされています。

デフォルト

TRUE

BINARY_AS_TEXT = TRUE | FALSE
使用

データのロードおよび外部テーブル

定義

論理データ型が定義されていない列を UTF-8テキストとして解釈するかどうかを指定するブール値。 FALSE に設定すると、Snowflakeはこれらの列をバイナリデータとして解釈します。

デフォルト

TRUE

TRIM_SPACE = TRUE | FALSE
使用

データのロードのみ

定義

文字列から先頭と末尾の空白を削除するかどうかを指定するブール値。

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

このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してParquetデータを個別の列にロードする場合にのみ、次のアクションに適用されます。

デフォルト

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で圧縮されたファイルは例外で、現在は自動検出できません。データをアンロードするとき、ファイルはデフォルトのgzipを使用して自動的に圧縮されます。

GZIP

BZ2

BROTLI

Brotliで圧縮されたファイルをロード/アンロードする場合は、指定する必要があります。

ZSTD

Zstandard v0.8(およびそれ以上)がサポートされています。

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

コピーオプション(copyOptions

コピーオプションは、 テーブルへのデータのロードテーブルからのデータのアンロード に使用されます。

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

STAGE_COPY_OPTIONS = ( ... )

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_FILECONTINUE または ABORT_STATEMENT よりも低速です。少数のエラーで大型のファイルをスキップすると、遅延が発生し、クレジットが無駄になる可能性があります。論理的な叙述がないファイルから多数の記録をロードする場合(例: ファイルが大まかな間隔で自動的に生成された場合)は、代わりに CONTINUE を指定することを検討してください。

その他のパターン:

SKIP_FILE_num (例: SKIP_FILE_10

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

'SKIP_FILE_num%' (例: 'SKIP_FILE_10%'

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

ABORT_STATEMENT

データファイルでエラーが見つかった場合は、ロード操作を中止します。

データファイルが見つからない(例: データファイルが存在しない、またはデータファイルにアクセスできないため)場合は、 FILES パラメーターでデータファイルが見つからない場合を明示的に指定していたときを除いて、ロード操作は中止 されません

  • このコピーオプションには、次の動作が適用されます。

    • すべての ON_ERROR 値は、構造化データファイル(CSV、 TSV など)をロードするときに、解析エラーまたは変換エラーで期待どおりに機能します。

      しかし、半構造化データファイル(JSON、Avro、 ORC、Parquet、または XML)は、 CONTINUESKIP_FILE_num、または 'SKIP_FILE_num%' に対して、これらの形式の設計が原因で ON_ERROR 値の構造化データファイルと同じ動作セマンティクスをサポートしていません。

    • Parquetと ORC データのみ。 ON_ERROR が CONTINUESKIP_FILE_num、または 'SKIP_FILE_num%' に設定されている場合は、解析エラーが発生するとデータファイルをスキップします。換算エラーまたは変換エラーは、選択したオプション値に関係なく、 ABORT_STATEMENT (COPY INTO <テーブル> ステートメント)または SKIP_FILE (Snowpipe)のデフォルトの動作に従います。

    • JSON、 XML、および Avroデータのみ。 ON_ERROR が CONTINUESKIP_FILE_num、または 'SKIP_FILE_num%' に設定されている場合は、解析エラーが含まれる記録までの全記録がロードされますが、データファイル内の残りの記録はスキップされます。換算エラーまたは変換エラーは、選択したオプション値に関係なく、 COPY (ABORT_STATEMENT)またはSnowpipe(SKIP_FILE)のデフォルトの動作に従います。

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

データのロードのみ

定義

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

このコピーオプションは、次のデータ形式でサポートされています。

  • JSON

  • Avro

  • ORC

  • Parquet

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

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

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

CASE_SENSITIVE | CASE_INSENSITIVE

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

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

注釈

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

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

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

NONE

COPY 操作は、半構造化データをバリアント列にロードするか、クエリが COPY ステートメントに含まれている場合、データを変換します。

注釈

現在、次の制限が適用されます。

  • ターゲットテーブルにロードするのではなく、ステージングされたデータを検証するために、 MATCH_BY_COLUMN_NAME を COPY ステートメントで VALIDATION_MODE パラメーターと共に使用することはできません。

  • Parquetデータのみ。 MATCH_BY_COLUMN_NAME が CASE_SENSITIVE または CASE_INSENSITIVE に設定されている場合、空の列値(例: "col1": "")はエラーを生成します。

デフォルト

NONE

ENFORCE_LENGTH = TRUE | FALSE
使用

データのロードのみ

定義

リバースロジックを使用した TRUNCATECOLUMNS の代替構文(他のシステムとの互換性のため)

ターゲット列の長さを超えるテキスト文字列を切り捨てるかどうかを指定するブール値。

  • TRUE の場合、ロードされた文字列がターゲット列の長さを超えると、 COPY ステートメントはエラーを生成します。

  • FALSE の場合、文字列はターゲット列の長さに自動で切り捨てられます。

このコピーオプションは、 CSV データと、リレーショナルテーブルの個別の列にロードされた場合の半構造化データの文字列値をサポートします。

注釈

  • ターゲット文字列の列の長さが最大に設定されている場合(例: VARCHAR (16777216))、着信文字列はこの長さを超えることはできません。超えると、 COPY コマンドはエラーを生成します。

  • このパラメーターは機能的には TRUNCATECOLUMNS と同等ですが、逆の動作をします。他のデータベースとの互換性のために提供されています。必要な出力を生成するには、 COPY ステートメントにこれら2つのパラメーターのいずれかを含めるだけです。

デフォルト

TRUE

TRUNCATECOLUMNS = TRUE | FALSE
使用

データのロードのみ

定義

リバースロジックを使用した ENFORCE_LENGTH の代替構文(他のシステムとの互換性のため)

ターゲット列の長さを超えるテキスト文字列を切り捨てるかどうかを指定するブール値。

  • TRUE の場合、文字列はターゲット列の長さに自動的に切り捨てられます。

  • FALSE の場合、ロードされた文字列がターゲット列の長さを超えると、 COPY ステートメントはエラーを生成します。

このコピーオプションは、 CSV データと、リレーショナルテーブルの個別の列にロードされた場合の半構造化データの文字列値をサポートします。

注釈

  • ターゲット文字列の列の長さが最大に設定されている場合(例: VARCHAR (16777216))、着信文字列はこの長さを超えることはできません。超えると、 COPY コマンドはエラーを生成します。

  • このパラメーターは機能的には ENFORCE_LENGTH と同等ですが、逆の動作をします。他のデータベースとの互換性のために提供されています。必要な出力を生成するには、 COPY ステートメントにこれら2つのパラメーターのいずれかを含めるだけです。

デフォルト

FALSE

FORCE = TRUE | FALSE
使用

データのロードのみ

定義

以前にロードされたかどうか、ロード後に変更があったかどうかに関係なく、すべてのファイルをロードするよう指定するブール値。このオプションはファイルを再ロードし、テーブル内のデータを複製する可能性があることに注意します。

デフォルト

FALSE

アクセス制御の要件

この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

メモ

CREATE TABLE

スキーマ

仮テーブルの作成には、 CREATE TABLE 権限は必要 ない ことに注意してください。

SELECT

テーブル、外部テーブル、ビュー

テーブルのクローンを作成したり、 CTAS ステートメントを実行したりする場合にのみ、クエリ対象のテーブルやビューで必要です。

APPLY

マスキングポリシー、行アクセスポリシー、タグ

テーブルの作成時に、マスキングポリシー、行アクセスポリシー、オブジェクトタグ、またはこうした ガバナンス 機能の任意の組み合わせを適用する場合にのみ必要です。

USAGE

ファイル形式

STAGE_FILE_FORMAT パラメーターで名前付きファイル形式を指定する場合にのみ必要です。

USAGE (外部ステージ)または READ (内部ステージ)

ステージ

CREATE TABLE ... USING TEMPLATE ステートメントを使用して、ステージングされたファイルからテーブル列の定義を取得するために必要です。

スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 Snowflakeのアクセス制御 をご参照ください。

使用上の注意

  • スキーマに同じ名前のテーブルやビューを含めることはできません。テーブルを作成する場合:

    • 同じ名前のビューがスキーマにすでに存在する場合は、エラーが返され、テーブルは作成されません。

    • 同じ名前のテーブルがスキーマに既に存在する場合、オプションの OR REPLACE キーワードがコマンドに含まれていない限り、エラーが返され、テーブルは作成されません。

    重要

    OR REPLACE を使用することは、既存のテーブルで DROP TABLE を使用してから、同じ名前で新しいテーブルを作成することと同等です。ただし、ドロップされたテーブルは、システムから完全には削除 されません 。代わりに、Time Travel内で保持されます。Time Travelでドロップされたテーブルは復元できますが、アカウントのデータストレージにも寄与するため、これは重要です。詳細については、 Time TravelおよびFail-safeのストレージコスト をご参照ください。

    CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、古いオブジェクトの削除と新しいオブジェクトの作成が1つのトランザクションで処理されます。

    これは、CREATE OR REPLACE TABLE 操作と同時に実行されるクエリが、古いテーブルバージョンまたは新しいテーブルバージョンのいずれかを使用することを意味します。

    テーブルを再作成または交換すると、変更データがドロップされます。テーブル上のストリームはすべて 古く なります。さらに、このテーブルを基になるテーブルとして持つビュー上のストリームはすべて古くなります。古いストリームは読み取れません。

  • 予約キーワード と同様に、 ANSI 予約関数名(CURRENT_DATECURRENT_TIMESTAMP など)は列名として使用できません。

  • CREATE TABLE ... CLONE:

    • ソーステーブルにクラスタリングキーがある場合は、新しいテーブルにクラスタリングキーがあります。デフォルトでは、ソーステーブルに対して自動クラスタリングが一時停止されていなくても、新しいテーブルに対して自動クラスタリングが一時停止されます。

  • CREATE TABLE ... LIKE:

    • ソーステーブルにクラスタリングキーがある場合は、新しいテーブルにクラスタリングキーがあります。デフォルトでは、ソーステーブルに対して自動クラスタリングが一時停止されていても、新しいテーブルに対して自動クラスタリングは一時停止されません。

  • CREATE TABLE ... AS SELECT (CTAS):

    • SELECT リストの列名のエイリアスが有効な列である場合、 CTAS ステートメントでは列定義は不要です。省略した場合、列の名前と型は基になるクエリから推測されます。

      CREATE TABLE <table_name> AS SELECT ...
      

      または、次の構文を使用して名前を明示的に指定できます。

      CREATE TABLE <table_name> ( <col1_name> , <col2_name> , ... ) AS SELECT ...
      

      指定する列名の数は、クエリ内の SELECT リストアイテムの数と一致する必要があります。列のタイプは、クエリによって生成されたタイプから推測されます。

    • クラスタリングキーが CTAS ステートメントで指定されている場合、

      • 列定義は必須であり、ステートメントで明示的に指定する必要があります。

      • デフォルトでは、ソーステーブルに対して自動クラスタリングが一時停止されていたとしても、新しいテーブルに対して自動クラスタリングは一時停止されません。

    • 特定の順序で行を使用してテーブルを作成する場合は、 CTAS の SELECT 句で ORDER BY サブ句を使用します。CLUSTER BY を指定しても、テーブルの作成時にデータはクラスター化されません。代わりに、 CLUSTER BY は 自動クラスタリング に依存して、時間の経過とともにデータを再クラスタリングします。

      CREATE TABLE ステートメントの ORDER BY サブ句は、そのテーブルの将来の SELECT ステートメントによって返される行の順序には影響しません。将来の SELECT ステートメントで行の順序を指定するには、それらのステートメントで ORDER BY サブ句を使用します。

  • トランザクション内では、 DDL ステートメント( CREATE TEMPORARY/TRANSIENT TABLE を含む)は、 DDL ステートメント自体を実行する前にトランザクションをコミットします。次に、 DDL ステートメントは独自のトランザクションで実行されます。DDL ステートメントの後の次のステートメントが、新しいトランザクションを開始します。したがって、単一のトランザクション内で仮テーブルまたは一時テーブルの作成、使用、およびドロップはできません。トランザクション内で仮テーブルまたは一時テーブルを使用する場合は、トランザクションの前にテーブルを作成し、トランザクションの後にテーブルをドロップします。

  • テーブルを再作成すると(オプションの OR REPLACE キーワードを使用)、その履歴が削除され、テーブル上のストリームが古くなります。古いストリームは読み取れません。

  • テーブルの列構造がポリシーで指定された列と一致する場合は、条件付き列を使用する単一のマスキングポリシーを複数のテーブルに適用できます。

  • 1つ以上のテーブル列にマスキングポリシーを使用してテーブルを作成する場合、またはテーブルに行アクセスポリシーを追加する場合は、 POLICY_CONTEXT 関数を使用して、マスキングポリシーによって保護されている列と行アクセスポリシーによって保護されているテーブルに対するクエリをシミュレートします。

  • メタデータについて、

    注意

    Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。

現在のデータベースに単純なテーブルを作成し、テーブルに行を挿入します。

CREATE TABLE mytable (amount NUMBER);

+-------------------------------------+
| status                              |
|-------------------------------------|
| Table MYTABLE successfully created. |
+-------------------------------------+

INSERT INTO mytable VALUES(1);

SHOW TABLES like 'mytable';

+---------------------------------+---------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
| created_on                      | name    | database_name | schema_name | kind  | comment | cluster_by | rows | bytes | owner        | retention_time |
|---------------------------------+---------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------|
| Mon, 11 Sep 2017 16:32:28 -0700 | MYTABLE | TESTDB        | PUBLIC      | TABLE |         |            |    1 |  1024 | ACCOUNTADMIN | 1              |
+---------------------------------+---------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+

DESC TABLE mytable;

+--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name   | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| AMOUNT | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

単純なテーブルを作成し、テーブルとテーブル内の列の両方にコメントを指定します。

CREATE TABLE example (col1 number comment 'a column comment') COMMENT='a table comment';

+-------------------------------------+
| status                              |
|-------------------------------------|
| Table EXAMPLE successfully created. |
+-------------------------------------+

SHOW TABLES like 'example';

+---------------------------------+---------+---------------+-------------+-------+-----------------+------------+------+-------+--------------+----------------+
| created_on                      | name    | database_name | schema_name | kind  | comment         | cluster_by | rows | bytes | owner        | retention_time |
|---------------------------------+---------+---------------+-------------+-------+-----------------+------------+------+-------+--------------+----------------|
| Mon, 11 Sep 2017 16:35:59 -0700 | EXAMPLE | TESTDB        | PUBLIC      | TABLE | a table comment |            |    0 |     0 | ACCOUNTADMIN | 1              |
+---------------------------------+---------+---------------+-------------+-------+-----------------+------------+------+-------+--------------+----------------+

DESC TABLE example;

+------+--------------+--------+-------+---------+-------------+------------+-------+------------+------------------+
| name | type         | kind   | null? | default | primary key | unique key | check | expression | comment          |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+------------------|
| COL1 | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | a column comment |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+------------------+

既存のテーブルから選択してテーブルを作成します。

CREATE TABLE mytable_copy (b) AS SELECT * from mytable;

DESC TABLE mytable_copy;

+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| B    | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

CREATE TABLE mytable_copy2 AS SELECT b+1 AS c FROM mytable_copy;

DESC TABLE mytable_copy2;

+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| C    | NUMBER(39,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

SELECT * FROM mytable_copy2;

+---+
| C |
|---|
| 2 |
+---+

既存のテーブルから選択してテーブルを作成するより高度な例。この例では、新しいテーブルの summary_amount 列の値は、ソーステーブルの2つの列から派生しています。

CREATE TABLE testtable_summary (name, summary_amount) AS SELECT name, amount1 + amount2 FROM testtable;

段階的なParquetデータファイルから列を選択して、テーブルを作成します。

CREATE OR REPLACE TABLE parquet_col (
  custKey number default NULL,
  orderDate date default NULL,
  orderStatus varchar(100) default NULL,
  price varchar(255)
)
AS SELECT
  $1:o_custkey::number,
  $1:o_orderdate::date,
  $1:o_orderstatus::text,
  $1:o_totalprice::text
FROM @my_stage;

+-----------------------------------------+
| status                                  |
|-----------------------------------------|
| Table PARQUET_COL successfully created. |
+-----------------------------------------+

DESC TABLE parquet_col;

+-------------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name        | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|-------------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| CUSTKEY     | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| ORDERDATE   | DATE         | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| ORDERSTATUS | VARCHAR(100) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| PRICE       | VARCHAR(255) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+-------------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

別のテーブルと同じ列定義を持つが、行がないテーブルを作成します。

CREATE TABLE mytable (amount NUMBER);

INSERT INTO mytable VALUES(1);

SELECT * FROM mytable;

+--------+
| AMOUNT |
|--------|
|      1 |
+--------+

CREATE TABLE mytable_2 LIKE mytable;

DESC TABLE mytable_2;

+--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name   | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| AMOUNT | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

SELECT * FROM mytable_2;

+--------+
| AMOUNT |
|--------|
+--------+

複数列のクラスタリングキーを持つテーブルを作成します。

CREATE TABLE mytable (date timestamp_ntz, id number, content variant) CLUSTER BY (date, id);

SHOW TABLES LIKE 'mytable';

+---------------------------------+---------+---------------+-------------+-------+---------+------------------+------+-------+--------------+----------------+
| created_on                      | name    | database_name | schema_name | kind  | comment | cluster_by       | rows | bytes | owner        | retention_time |
|---------------------------------+---------+---------------+-------------+-------+---------+------------------+------+-------+--------------+----------------|
| Mon, 11 Sep 2017 16:20:41 -0700 | MYTABLE | TESTDB        | PUBLIC      | TABLE |         | LINEAR(DATE, ID) |    0 |     0 | ACCOUNTADMIN | 1              |
+---------------------------------+---------+---------------+-------------+-------+---------+------------------+------+-------+--------------+----------------+

テーブルの列の照合を指定します。

CREATE TABLE collation_demo (
  uncollated_phrase VARCHAR, 
  utf8_phrase VARCHAR COLLATE 'utf8',
  english_phrase VARCHAR COLLATE 'en',
  spanish_phrase VARCHAR COLLATE 'sp'
  );

INSERT INTO collation_demo (uncollated_phrase, utf8_phrase, english_phrase, spanish_phrase) 
   VALUES ('pinata', 'pinata', 'pinata', 'piñata');

Avro、Parquet、または ORC データを含むステージングされたファイルのセットから列定義が派生するテーブルを作成します。

ステートメントで参照されている mystage ステージと my_parquet_format ファイル形式がすでに存在している必要があることに注意してください。ファイルのセットは、ステージ定義で参照されるクラウドストレージの場所に既にステージングされている必要があります。

次の例では、ステージングされたファイルから検出されたスキーマを使用してテーブルを作成し、列を ORDER_ID で並べ替えます。これは、 INFER_SCHEMA トピックの例に基づいて構築されています。

CREATE TABLE mytable
  USING TEMPLATE (
    SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*))
    WITHIN GROUP (ORDER BY ORDER_ID)
      FROM TABLE(
        INFER_SCHEMA(
          LOCATION=>'@mystage',
          FILE_FORMAT=>'my_parquet_format'
        )
      ));

ORDER_ID による列の並べ替えは、ステージングされたファイルすべてが1つのスキーマを共有する場合にのみ適用されることに注意してください。ステージングされたデータファイルのセットに、列名が共有されている複数のスキーマが含まれている場合は、 ORDER_ID 列で表される順序が単一のファイルと一致しない可能性があります。

セッションの終了時に自動的にドロップされる仮テーブルを作成します。

create temporary table demo_temporary (i integer);
create temp      table demo_temp      (i integer);

他のベンダーとの互換性のために、Snowflakeは以下のキーワードを TEMPORARY の同義語として使用することもサポートしています。

create local temporary table demo_local_temporary (i integer);
create local temp      table demo_local_temp      (i integer);

create global temporary table demo_global_temporary (i integer);
create global temp      table demo_global_temp      (i integer);

create volatile table demo_volatile (i integer);
最上部に戻る