ALTER TABLE¶
既存のテーブルのプロパティ、列、または制約を変更します。
- こちらもご参照ください。
ALTER TABLE ... ALTER COLUMN、 CREATE TABLE、 DROP TABLE、 SHOW TABLES、 DESCRIBE TABLE
構文¶
ALTER TABLE [ IF EXISTS ] <name> RENAME TO <new_table_name>
ALTER TABLE [ IF EXISTS ] <name> SWAP WITH <target_table_name>
ALTER TABLE [ IF EXISTS ] <name> { clusteringAction | tableColumnAction | constraintAction }
ALTER TABLE [ IF EXISTS ] <name> extTableColumnAction
ALTER TABLE [ IF EXISTS ] <name> searchOptimizationAction
ALTER TABLE [ IF EXISTS ] <name> SET
[ 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>' ]
[ ENABLE_SCHEMA_EVOLUTION = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
ALTER TABLE [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER TABLE [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
ALTER TABLE [ IF EXISTS ] <name> UNSET {
DATA_RETENTION_TIME_IN_DAYS |
MAX_DATA_EXTENSION_TIME_IN_DAYS |
CHANGE_TRACKING |
DEFAULT_DDL_COLLATION |
ENABLE_SCHEMA_EVOLUTION |
COMMENT |
}
[ , ... ]
ALTER TABLE [ IF EXISTS ] <name>
ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])
ALTER TABLE [ IF EXISTS ] <name>
DROP ROW ACCESS POLICY <policy_name>
ALTER TABLE [ IF EXISTS ] <name>
DROP ROW ACCESS POLICY <policy_name>,
ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])
ALTER TABLE [ IF EXISTS ] <name> DROP ALL ROW ACCESS POLICIES
条件:
clusteringAction ::= { CLUSTER BY ( <expr> [ , <expr> , ... ] ) /* RECLUSTER is deprecated */ | RECLUSTER [ MAX_SIZE = <budget_in_bytes> ] [ WHERE <condition> ] /* { SUSPEND | RESUME } RECLUSTER is valid action */ | { SUSPEND | RESUME } RECLUSTER | DROP CLUSTERING KEY }tableColumnAction ::= { ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> [ { DEFAULT <expr> | { AUTOINCREMENT | IDENTITY } /* AUTOINCREMENT (or IDENTITY) is supported only for */ /* columns with numeric data types (NUMBER, INT, FLOAT, etc.). */ /* Also, if the table is not empty (i.e. if the table contains */ /* any rows), only DEFAULT can be altered. */ [ { ( <start_num> , <step_num> ) | START <num> INCREMENT <num> } ] [ { ORDER | NOORDER } ] } ] [ inlineConstraint ] [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1_name> , cond_col_1 , ... ) ] ] [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ] | RENAME COLUMN <col_name> TO <new_col_name> | ALTER | MODIFY [ ( ] [ COLUMN ] <col1_name> DROP DEFAULT , [ COLUMN ] <col1_name> SET DEFAULT <seq_name>.NEXTVAL , [ COLUMN ] <col1_name> { [ SET ] NOT NULL | DROP NOT NULL } , [ COLUMN ] <col1_name> [ [ SET DATA ] TYPE ] <type> , [ COLUMN ] <col1_name> COMMENT '<string>' , [ COLUMN ] <col1_name> UNSET COMMENT [ , [ COLUMN ] <col2_name> ... ] [ , ... ] [ ) ] | ALTER | MODIFY COLUMN <col1_name> SET MASKING POLICY <policy_name> [ USING ( <col1_name> , cond_col_1 , ... ) ] [ FORCE ] | ALTER MODIFY COLUMN <col1_name> UNSET MASKING POLICY | ALTER | MODIFY [ COLUMN ] <col1_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] , [ COLUMN ] <col2_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] ... | ALTER | MODIFY COLUMN <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ] , COLUMN <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ] ... | DROP [ COLUMN ] [ IF EXISTS ] <col1_name> [, <col2_name> ... ] } inlineConstraint ::= [ NOT NULL ] [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | { [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } } [ <constraint_properties> ]列を変更するための詳細な構文と例については、 ALTER TABLE ... ALTER COLUMN をご参照ください。 .
インライン制約を作成/変更するための詳細な構文と例については、 CREATE | ALTER TABLE ... CONSTRAINT をご参照ください。
extTableColumnAction ::= { ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> AS ( <expr> ) | RENAME COLUMN <col_name> TO <new_col_name> | DROP [ COLUMN ] [ IF EXISTS ] <col1_name> [, <col2_name> ... ] }constraintAction ::= { ADD outoflineConstraint | RENAME CONSTRAINT <constraint_name> TO <new_constraint_name> | { ALTER | MODIFY } { CONSTRAINT <constraint_name> | PRIMARY KEY | UNIQUE | FOREIGN KEY } ( <col_name> [ , ... ] ) [ [ NOT ] ENFORCED ] [ VALIDATE | NOVALIDATE ] [ RELY | NORELY ] | DROP { CONSTRAINT <constraint_name> | PRIMARY KEY | UNIQUE | FOREIGN KEY } ( <col_name> [ , ... ] ) [ CASCADE | RESTRICT ] } 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 をご参照ください。
searchOptimizationAction ::= { ADD SEARCH OPTIMIZATION [ ON <search_method_with_target> [ , <search_method_with_target> ... ] ] | DROP SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ , ... ] ] }詳細については、 検索最適化アクション( searchOptimizationAction) をご参照ください。
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>' PARSE_HEADER = TRUE | FALSE SKIP_HEADER = <integer> SKIP_BLANK_LINES = TRUE | FALSE DATE_FORMAT = '<string>' | AUTO TIME_FORMAT = '<string>' | AUTO TIMESTAMP_FORMAT = '<string>' | AUTO BINARY_FORMAT = HEX | BASE64 | UTF8 ESCAPE = '<character>' | NONE ESCAPE_UNENCLOSED_FIELD = '<character>' | NONE TRIM_SPACE = TRUE | FALSE FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | NONE NULL_IF = ( '<string>' [ , '<string>' ... ] ) ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE EMPTY_FIELD_AS_NULL = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSE ENCODING = '<string>' | UTF8 -- If 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 REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( '<string>' [ , '<string>' ... ] ) -- If TYPE = ORC TRIM_SPACE = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( '<string>' [ , '<string>' ... ] ) -- If TYPE = PARQUET COMPRESSION = AUTO | LZO | SNAPPY | NONE SNAPPY_COMPRESSION = TRUE | FALSE BINARY_AS_TEXT = TRUE | FALSE USE_LOGICAL_TYPE = TRUE | FALSE TRIM_SPACE = TRUE | FALSE REPLACE_INVALID_CHARACTERS = 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 REPLACE_INVALID_CHARACTERS = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSEcopyOptions ::= ON_ERROR = { CONTINUE | SKIP_FILE | SKIP_FILE_<num> | 'SKIP_FILE_<num>%' | ABORT_STATEMENT } SIZE_LIMIT = <num> PURGE = TRUE | FALSE RETURN_FAILED_ONLY = TRUE | FALSE MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE ENFORCE_LENGTH = TRUE | FALSE TRUNCATECOLUMNS = TRUE | FALSE FORCE = TRUE | FALSE
パラメーター¶
name
変更するテーブルの識別子。識別子にスペースまたは特殊文字が含まれる場合、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます。
RENAME TO new_table_name
指定されたテーブルの名前を、スキーマ内の他のテーブルで現在使用されていない新しい識別子に変更します。
テーブル識別子の詳細については、 識別子の要件 をご参照ください。
オプションでオブジェクトの名前を変更して、オブジェクトを別のデータベースやスキーマに移動できます。これを実行するには、新しいデータベース名やスキーマ名をそれぞれ
db_name.schema_name.object_name
またはschema_name.object_name
の形式で含む、修飾されたnew_name
値を指定します。注釈
宛先データベースやスキーマはすでに存在している必要があります。また、同じ名前のオブジェクトが宛先データベースにすでに存在することはできません。存在する場合、ステートメントはエラーを返します。
オブジェクトを管理アクセススキーマに移動することは、オブジェクトの所有者(つまり、オブジェクトに対して OWNERSHIP 権限を持つロール)がターゲットスキーマも所有している場合を 除き 禁止されています。
オブジェクト(テーブル、列など)の名前が変更されると、それを参照する他のオブジェクトも新しい名前で更新する必要があります。
SWAP WITH target_table_name
スワップは、1つのトランザクションで2つのテーブルの名前を変更します。
永続テーブルまたは一時テーブルを、作成されたユーザーセッションの期間のみ存続する仮テーブルと交換することは許可されていないことに注意してください。この制限により、仮テーブルが永続テーブルまたは一時テーブルと交換され、既存の永続テーブルまたは一時テーブルの名前が、仮テーブルと同じになった場合に発生する可能性のある名前の競合が防止されます。永続テーブルまたは一時テーブルを仮テーブルと交換するには、3つの
ALTER TABLE ... RENAME TO
ステートメントを使用します。テーブル名をa
からc
に、b
からa
に、そしてc
からb
に変更します。
注釈
テーブルの名前を変更するか、2つのテーブルを交換するには、操作の実行に使用するロールにテーブルに対する OWNERSHIP 権限が必要です。さらに、テーブルの名前を変更するには、テーブルのスキーマに対する CREATE TABLE 権限が必要です。
SET ...
テーブルに設定する1つ以上のプロパティ/パラメーターを指定します(空白、コンマ、または改行で区切られます)。
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 [ ... ]
ロード/アンロードするファイルのタイプを指定します。追加の形式固有オプションを文字列に含めることができます。詳細については、 形式タイプオプション (このトピック)をご参照ください。
注釈
FORMAT_NAME
とTYPE
は相互に排他的です。テーブルにはどちらか一方しか指定できません。STAGE_COPY_OPTIONS = ( ... )
ファイルからテーブルにデータをロードするときに使用するコピーオプションを変更します。詳細については、 コピーオプション (このトピック内)をご参照ください。
DATA_RETENTION_TIME_IN_DAYS = integer
Time Travelのテーブルの保持期間を変更するオブジェクトレベルのパラメーター。詳細については、 Time Travelの理解と使用 および 仮テーブルと一時テーブルの使用 をご参照ください。
このパラメーターの詳細な説明、およびオブジェクトパラメーターの詳細については、 パラメーター をご参照ください。
値:
Standard Edition:
0
または1
Enterprise Edition:
永続テーブルの場合は
0
~90
仮および一時テーブルの場合は
0
または1
注釈
0
の値は、テーブルのTime Travelを効果的に無効化します。MAX_DATA_EXTENSION_TIME_IN_DAYS = integer
Snowflakeがテーブルのデータ保持期間を延長してテーブル上のストリームが古くなるのを防ぐことができる最大日数を指定するオブジェクトパラメーター。
このパラメーターの詳細については、 MAX_DATA_EXTENSION_TIME_IN_DAYS をご参照ください。
CHANGE_TRACKING = TRUE | FALSE
テーブルの変更追跡を有効または無効にするように指定します。
DEFAULT_DDL_COLLATION = 'collation_specification'
テーブルに追加された新しい列のデフォルトの 照合仕様 を指定します。
パラメーターを設定しても、既存の列の照合仕様は 変更されません 。
パラメーターの詳細については、 DEFAULT_DDL_COLLATION をご参照ください。
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントにあるタグの指定の詳細については、 オブジェクトおよび列のタグクォータ をご参照ください。
ENABLE_SCHEMA_EVOLUTION = { TRUE | FALSE }
以下を含むソースファイルから、テーブルにロードされたデータからのテーブルスキーマを自動的に変更することを有効または無効にします。
追加された列。
デフォルトでは、スキーマ進化は、ロード操作ごとに最大10列の追加された列に制限されています。1回のロード操作で10列を超えるの列の追加をリクエストする場合は、 Snowflakeサポート にお問い合わせください。
NOT NULL 制約は、新しいデータファイルで欠落しているいくつの列からでもドロップすることができます。
TRUE
に設定すると、自動テーブルスキーマ進化が有効になります。デフォルトのFALSE
は、自動テーブルスキーマ進化を無効にします。注釈
ファイルからのデータのロードでテーブル列が進化するのは、次のすべてが当てはまる場合です。
COPY INTO <テーブル> ステートメントには
MATCH_BY_COLUMN_NAME
オプションが含まれる。データのロードに使用されるロールは、テーブルに対する EVOLVE SCHEMA または OWNERSHIP の権限を持っている。
さらに、 CSV でスキーマを進化させる際に、
MATCH_BY_COLUMN_NAME
とPARSE_HEADER
を使用する場合は、ERROR_ON_COLUMN_COUNT_MISMATCH
をfalseに設定する必要があります。COMMENT = 'string_literal'
テーブルのコメントを追加するか、既存のコメントを上書きします。
UNSET ...
テーブルの設定を解除する1つ以上のプロパティ/パラメーターを指定し、それらをデフォルトにリセットします。
DATA_RETENTION_TIME_IN_DAYS
MAX_DATA_EXTENSION_TIME_IN_DAYS
CHANGE_TRACKING
DEFAULT_DDL_COLLATION
ENABLE_SCHEMA_EVOLUTION
TAG tag_name [ , tag_name ... ]
COMMENT
注釈
UNSET
を使用して、ファイル形式とコピーオプションをリセットすることはできません。これらのオプションをリセットするには、 SET
を使用する必要があります。
policy_name
マスキングポリシーまたは行アクセスポリシーの識別子。スキーマに対して一意である必要があります。
ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])
行アクセスポリシーをテーブルに追加します。
少なくとも1つの列名を指定する必要があります。追加の列は、各列名をコンマで区切って指定できます。この式を使用して、テーブルと外部テーブルの両方に行アクセスポリシーを追加します。
DROP ROW ACCESS POLICY policy_name
テーブルから行アクセスポリシーをドロップします。
この式を使用して、テーブルと外部テーブルの両方からポリシーをドロップします。
DROP ALL ROW ACCESS POLICIES
すべての 行アクセスポリシーの関連付けをテーブルからドロップします。
この式は、テーブルからポリシーをドロップする 前に、スキーマから行アクセスポリシーをドロップするときに役立ちます。この式を使用して、テーブルと外部テーブルの両方から行アクセスポリシーの関連付けをドロップします。
クラスタリングアクション(clusteringAction
)¶
CLUSTER BY ( expr [ , expr , ... ] )
1つ以上のテーブル列または列式をテーブルのクラスタリングキーとして指定(または変更)します。これらは、自動クラスタリングによってクラスタリングが維持される列/式です。
重要
クラスタリングキーは、すべてのテーブルに対して意図または推奨されて いません。通常、非常に大きな(つまり、マルチテラバイト)テーブルに役立ちます。
テーブルのクラスタリングキーを指定する前に、 Snowflakeテーブル構造について をご参照ください。
RECLUSTER ...
非推奨
クラスタリングキーが定義されているテーブルの手動の増分再クラスタリングを実行します。
MAX_SIZE = budget_in_bytes
非推奨 --- より大きなウェアハウスを使用して、より効果的な手動再クラスタリングを実現します
再クラスタ化するテーブルのデータ量の上限(バイト単位)を指定します。
WHERE condition
テーブル内のデータを再クラスター化する条件または範囲を指定します。
注釈
テーブルに対して OWNERSHIP または INSERT 権限を持つロールのみがテーブルを再クラスター化できます。
SUSPEND | RESUME RECLUSTER
テーブルの 自動クラスタリング を有効または無効にします。
DROP CLUSTERING KEY
テーブルのクラスタリングキーをドロップします。
クラスタリングキーと再クラスタリングの詳細については、 Snowflakeテーブル構造について をご参照ください。
テーブル列アクション(tableColumnAction
)¶
ADD [ COLUMN ] [ IF NOT EXISTS ] col_name col_data_type
.[ DEFAULT | AUTOINCREMENT ... ]
.[ inlineConstraint ]
.[ [ WITH ] MASKING POLICY policy_name ]
.[ [ WITH ] TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] ) ] [ , ...]
新しい列を追加します。デフォルト値、インライン制約、マスキングポリシー、および/または1つ以上のタグを指定できます。
詳細については、次をご参照ください。
この操作は、同じコマンドにある複数の列で実行できます。
列がすでに存在するかどうかわからない場合は、列を追加する際に IF NOT EXISTS を指定できます。列がすでに存在する場合、 ADD COLUMN が既存の列に影響を与えることはなく、エラーにはなりません。
注釈
新しい列に次のいずれかも指定する場合は、 IF NOT EXISTS を指定できません。
DEFAULT 、 AUTOINCREMENT 、または IDENTITY
UNIQUE、 PRIMARY KEY、または FOREIGN KEY
RENAME COLUMN col_name to new_col_name
指定した列の名前を、テーブル内の他の列に現在使用されていない新しい名前に変更します。
クラスタリングキーの一部である列の名前を変更することはできません。
オブジェクト(テーブル、列など)の名前が変更されると、それを参照する他のオブジェクトも新しい名前で更新する必要があります。
ALTER | MODIFY [ COLUMN ] ...
列の1つ以上のプロパティを変更します。この操作は、同じコマンドの複数の列で実行できます。
列を変更するための詳細な構文と例については、 ALTER TABLE ... ALTER COLUMN をご参照ください。
USING ( col_name , cond_col_1 ... )
条件付きマスキングポリシー SQL 式に渡す引数を指定します。
リストの最初の列は、データをマスクまたはトークン化するポリシー条件の列を指定し、マスキングポリシーが設定されている列と一致する 必要 があります。
追加の列は、最初の列でクエリが実行されたときに、クエリ結果の各行のデータをマスクするかトークン化するかを決定するために評価する列を指定します。
USING 句が省略されている場合、Snowflakeは条件付きマスキングポリシーを通常の マスキングポリシー として扱います。
FORCE
単一のステートメント内で、列に現在設定されているマスキングポリシーを別のマスキングポリシーに置き換えます。
FORCE
キーワードを使用するには、 ALTER TABLE ステートメント(つまり STRING)内のポリシーの データ型 が、列に現在設定されているマスキングポリシーのデータ型(つまり STRING)と一致している必要があります。現在列にマスキングポリシーが設定されていない場合は、このキーワードを指定しても効果はありません。
詳細については、 列のマスキングポリシーを置き換える をご参照ください。
DROP COLUMN [ IF EXISTS ] col_name [ CASCADE | RESTRICT ]
指定した列をテーブルから削除します。
列がすでに存在するかどうかわからない場合は、列をドロップする際に IF EXISTS を指定できます。列が存在しない場合、 DROP COLUMN は何の影響もなく、エラーにもなりません。
列のドロップは、メタデータのみの操作です。マイクロパーティションはすぐには書き換えられないため、列で使用されているスペースはすぐには解放されません。通常、個々のマイクロパーティション内のスペースは、次にマイクロパーティションが再書き込みされるときに解放されます。これは通常、 DML (INSERT、 UPDATE、 DELETE)または再クラスタリングによって書き込みが完了した時点です。
外部テーブル列アクション(extTableColumnAction
)¶
他のすべての外部テーブル変更については、 ALTER EXTERNAL TABLE をご参照ください。
ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> AS ( <expr> ) [, ...]
新しい列を外部テーブルに追加します。
列がすでに存在するかどうかわからない場合は、列を追加する際に IF NOT EXISTS を指定できます。列がすでに存在する場合、 ADD COLUMN が既存の列に影響を与えることはなく、エラーにはなりません。
この操作は、同じコマンドにある複数の列で実行できます。
col_name
列識別子(名前)を指定する文字列。テーブル識別子のすべての要件は、列識別子にも適用されます。
詳細については、 識別子の要件 をご参照ください。
col_type
列のデータ型を指定する文字列(定数)。データ型は、列の
expr
の結果と一致する必要があります。テーブル列に指定できるデータ型の詳細については、 データ型 をご参照ください。
expr
列の式を指定する文字列。クエリすると、列はこの式から派生した結果を返します。
外部テーブルの列は、明示的な式を使用して定義される仮想列です。VALUE 列および/または METADATA$FILENAME 疑似列を使用し、式として仮想列を追加します。
- VALUE
外部ファイルの単一の行を表す VARIANT 型の列。
- CSV
VALUE 列は、各行を、列の位置(つまり、
{c1: <列1の値>, c2: <列2の値>, c3: <列1の値> ...}
)で識別される要素を持つオブジェクトとして構成します。たとえば、ステージングされた CSV ファイル内の最初の列を参照する
mycol
という名前の VARCHAR 列を追加します。mycol varchar as (value:c1::varchar)
- 半構造化データ
要素の名前と値を二重引用符で囲みます。ドット表記を使用して、 VALUE 列のパスを走査します。
たとえば、次がステージングされたファイル内の半構造化データの単一行を表すとします。
{ "a":"1", "b": { "c":"2", "d":"3" } }
ステージングされたファイル内のネストされた繰り返し
c
要素を参照するmycol
という名前の VARCHAR 列を追加します。mycol varchar as (value:"b"."c"::varchar)
- METADATA$FILENAME
外部テーブルに含まれるステージングされた各データファイルの名前を識別する疑似列。ステージ内のパスも含まれます。
RENAME COLUMN col_name to new_col_name
外部テーブル内の他の列で現在使用されていない新しい名前に、指定した列の名前を変更します。
DROP COLUMN [ IF EXISTS ] col_name
指定した列を外部テーブルから削除します。
列がすでに存在するかどうかわからない場合は、列をドロップする際に IF EXISTS を指定できます。列が存在しない場合、 DROP COLUMN は何の影響もなく、エラーにもなりません。
制約アクション(constraintAction
)¶
ADD CONSTRAINT
テーブルの1つ以上の列にアウトラインの整合性制約を追加します。(列の)インライン制約を追加するには、 列アクション (このトピック)をご参照ください。
RENAME CONSTRAINT constraint_name TO new_constraint_name
指定された制約の名前を変更します。
ALTER | MODIFY CONSTRAINT ...
指定された制約のプロパティを変更します。
DROP CONSTRAINT constraint_name | PRIMARY KEY | UNIQUE | FOREIGN KEY ( col_name [ , ... ] ) [ CASCADE | RESTRICT ]
指定した列または列セットの指定した制約をドロップします。
制約を追加または変更するための詳細な構文と例については、 CREATE | ALTER TABLE ... CONSTRAINT をご参照ください。
検索最適化アクション( searchOptimizationAction
)¶
ADD SEARCH OPTIMIZATION
テーブル全体の、またはオプションの ON 句を指定した場合は特定の列の 検索最適化 を追加します。
ノート:
特にテーブル内のデータが頻繁に変更される場合、検索最適化は維持にコストがかかる可能性があります。詳細については、 検索最適化サービスのコストの管理 をご参照ください。
マテリアライズドビューに検索最適化を追加しようとすると、Snowflakeはエラーメッセージを返します。
ON search_method_with_target [, search_method_with_target ... ]
特定の列または VARIANT フィールド(テーブル全体ではなく)に対して検索最適化を構成することを指定します。
search_method_with_target
には、次の構文の式を使用します。<search_method>(<target> [, ...])
条件:
search_method
は、特定の型の述語に対するクエリを最適化する次の方法のいずれかを指定します。検索方法
説明
EQUALITY
等価および IN 述語。
SUBSTRING
部分文字列と正規表現に一致する述語(例: LIKE、 ILIKE、 RLIKE、 REGEXP_LIKE など)
GEO
GEOGRAPHY 型を使用する述語。
target
は、列、 VARIANT フィールド、またはアスタリスク(*)を指定します。search_method
の値に応じて、次に挙げる型の列または VARIANT フィールドを指定できます。検索方法
サポートされるターゲット
EQUALITY
VARIANTs 内のフィールドへのパスを含む、数値、文字列、バイナリ、および VARIANT データ型の列。
VARIANT フィールドを指定するには、 ドットまたはブラケット表記 (例:
my_column:my_field_name.my_nested_field_name
またはmy_column['my_field_name']['my_nested_field_name']
)を使用します。フィールドへのコロン区切りのパスを使用することもできます(例:my_column:my_field_name:my_nested_field_name
)。VARIANT フィールドを指定すると、そのフィールドの下にネストされたすべてのフィールドに構成が適用されます。たとえば、
ON EQUALITY(src:a.b)
を指定したとします。この構成により、クエリ
on src:a.b
およびネストされたフィールド(例:src:a.b.c
、src:a.b.c.d
など)を改善できます。この構成は、
src:a.b
プレフィックスを使用しないクエリ(例:src:a
、src:z
など)には影響しません。
SUBSTRING
VARIANTs のフィールドへのパスを含む、文字列または VARIANT データ型の列。
EQUALITY
で説明したように、フィールドへのパスを指定します。ネストされたフィールドの検索も同様に改善されます。GEO
GEOGRAPHY データ型の列。
テーブル内の該当するすべての列をターゲットとして指定するには、アスタリスク(
*
)を使用します。特定の検索方法に対して、アスタリスクと特定の列名の 両方 を指定することはできません。ただし、さまざまな検索方法でアスタリスクを指定できます。
たとえば、次の式を指定できます。
-- Allowed ON SUBSTRING(*) ON EQUALITY(*), SUBSTRING(*), GEO(*)
次の式は指定できません。
-- Not allowed ON EQUALITY(*, c1) ON EQUALITY(c1, *) ON EQUALITY(v1:path, *) ON EQUALITY(c1), EQUALITY(*)
ターゲットに複数の検索方法を指定するには、コンマを使用して後続の各メソッドとターゲットを区切ります。
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
同じテーブルに対して ALTER TABLE ... ADD SEARCH OPTIMIZATION ON ... コマンドを複数回実行すると、後続の各コマンドがテーブルの既存の構成に追加されます。たとえば、次のコマンドを実行するとします。
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2); ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c3, c4);
これにより、列c1、c2、c3、およびc4の等価述語がテーブルの構成に追加されます。これは、次のコマンドを実行するのと同じです。
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3, c4);
例については、 特定の列に対する検索最適化の構成 をご参照ください。
DROP SEARCH OPTIMIZATION
テーブル全体の、またはオプションの ON 句を指定した場合は特定の列から 検索最適化 を削除します。
ノート:
テーブルに検索最適化プロパティがある場合、テーブルをドロップしてからドロップを解除すると、検索最適化プロパティが保持されます。
テーブルから検索最適化プロパティを削除した後に再度追加すると、最初に追加したときと同じコストがかかります。
ON search_method_with_target | column_name | expression_id [, ... ]
特定の列または VARIANT フィールド(テーブル全体の検索最適化をドロップするのではなく)の検索最適化構成をドロップすることを指定します。
ドロップする列構成を識別するには、次のいずれかを指定します。
search_method_with_target
には、1つ以上の特定のターゲット(列または VARIANT フィールド)のクエリを最適化する方法を指定します。 前に説明されている構文 を使用します。column_name
には、検索最適化用に構成された列の名前を指定します。列名を指定すると、その列の VARIANT フィールドを使用する式を含む、その列のすべての式がドロップされます。expression_id
には、 DESCRIBE SEARCH OPTIMIZATION コマンドの出力にリストされた式の ID を指定します。
これらを複数指定するには、項目間にコンマを使用します。
ターゲット、列名、および式 IDs を使用して、検索方法を自由に組み合わせて指定できます。
例については、 特定の列に対する検索最適化のドロップ をご参照ください。
形式の種類のオプション(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'
)向けとして区切り文字の部分文字列にすることはできません。注釈
ASCII 以外の文字の場合は、16進数のバイトシーケンス値を使用して決定論的動作を得る必要があります。
指定された区切り文字は、ランダムなバイトのシーケンスではなく、有効な 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
)でファイル名と拡張子を指定します。PARSE_HEADER = TRUE | FALSE
- 使用
データのロードのみ
- 定義
データファイルにある最初の行のヘッダーを使用して列名を決定するかどうかを指定するブール値。
このファイル形式オプションは、次のアクションにのみ適用されます。
INFER_SCHEMA 関数を使用した、列定義の自動検出。
INFER_SCHEMA 関数と MATCH_BY_COLUMN_NAME コピーオプションを使用した、個別の列への CSV データロード。
オプションが TRUE に設定されている場合は、最初の行のヘッダーが列名を決定するために使われます。デフォルト値 FALSE は、列名をc として返します。 は列の位置です。
なお、 SKIP_HEADER オプションは、 PARSE_HEADER = TRUE ではサポートされません。
デフォルト:
FALSE
SKIP_HEADER = integer
- 使用
データのロードおよび外部テーブル
- 定義
スキップするファイルの先頭の行数。
SKIP_HEADER は RECORD_DELIMITER または FIELD_DELIMITER の値を使用してヘッダー行を決定しないことに注意してください。むしろ、指定された数の CRLF (キャリッジリターン、ラインフィード)で区切られたファイル内の行を単にスキップします。ロードするデータの行を決定するのには、RECORD_DELIMITER および FIELD_DELIMITER が使用されます。
- デフォルト
0
SKIP_BLANK_LINES = TRUE | FALSE
- 使用
データのロードおよび外部テーブル
- 定義
データファイルで検出された空白行のスキップを指定するブール値。それ以外の場合、空白行は記録終了エラーを生成します(デフォルトの動作)。
デフォルト:
FALSE
DATE_FORMAT = 'string' | AUTO
- 使用
データのロードとアンロード
- 定義
データファイル(データのロード)またはテーブル(データのアンロード)の日付値の形式を定義します。値が指定されていない、または
AUTO
の場合、 DATE_INPUT_FORMAT (データのロード)または 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
ヘブライ語
IBM949
IBM949
韓国語
ISO-2022-CN
ISO2022CN
中国語(簡体字)
ISO-2022-JP
ISO2022JP
日本語
ISO-2022-KR
ISO2022KR
韓国語
ISO-8859-1
ISO88591
デンマーク語、オランダ語、英語、フランス語、ドイツ語、イタリア語、ノルウェー語、ポルトガル語、スウェーデン語
ISO-8859-2
ISO88592
チェコ語、ハンガリー語、ポーランド語、ルーマニア語
ISO-8859-5
ISO88595
ロシア語
ISO-8859-6
ISO88596
アラビア語
ISO-8859-7
ISO88597
ギリシャ語
ISO-8859-8
ISO88598
ヘブライ語
ISO-8859-9
ISO88599
トルコ語
ISO-8859-15
ISO885915
デンマーク語、オランダ語、英語、フランス語、ドイツ語、イタリア語、ノルウェー語、ポルトガル語、スウェーデン語
ユーロ通貨記号を含む8文字を除いて、 ISO-8859-1と同じです。
KOI8-R
KOI8R
ロシア語
Shift_JIS
SHIFTJIS
日本語
UTF-8
UTF8
すべての言語
区切りファイル(CSV、 TSVなど)からデータをロードする場合、 UTF-8がデフォルトです。 . . サポートされている他のすべてのファイル形式(JSON、Avroなど)からデータをロードおよびアンロードする場合、サポートされる文字セットは UTF-8のみです。
UTF-16
UTF16
すべての言語
UTF-16BE
UTF16BE
すべての言語
UTF-16LE
UTF16LE
すべての言語
UTF-32
UTF32
すべての言語
UTF-32BE
UTF32BE
すべての言語
UTF-32LE
UTF32LE
すべての言語
windows-949
WINDOWS949
韓国語
windows-1250
WINDOWS1250
チェコ語、ハンガリー語、ポーランド語、ルーマニア語
windows-1251
WINDOWS1251
ロシア語
windows-1252
WINDOWS1252
デンマーク語、オランダ語、英語、フランス語、ドイツ語、イタリア語、ノルウェー語、ポルトガル語、スウェーデン語
windows-1253
WINDOWS1253
ギリシャ語
windows-1254
WINDOWS1254
トルコ語
windows-1255
WINDOWS1255
ヘブライ語
windows-1256
WINDOWS1256
アラビア語
- デフォルト
UTF8
注釈
Snowflakeは、すべてのデータを UTF-8文字セットで内部に保存します。データは、Snowflakeにロードされる前に UTF-8に変換されます。
TYPE = JSON¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- 使用
データのロードおよび外部テーブル
- 定義
データをロードするときに、データファイルの現在の圧縮アルゴリズムを指定します。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
データをアンロードする際、指定された圧縮アルゴリズムを使用してデータファイルを圧縮します。
- 値
サポートされる値
メモ
AUTO
データをロードすると、圧縮アルゴリズムは自動的に検出されますが、Brotliで圧縮されたファイルは例外で、現在は自動検出できません。データをアンロードするとき、ファイルはデフォルトの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エンコードエラーがエラー状態を引き起こすかどうかを指定するブール値。
REPLACE_INVALID_CHARACTERS
の代替構文です。- 値
TRUE
に設定すると、無効な UTF-8シーケンスはUnicode文字U+FFFD
(つまり、「置換文字」)で警告なしに置き換えられます。FALSE
に設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト
FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
- 使用
データのロードのみ
- 定義
データファイルに存在する場合、 BOM (バイト順マーク)をスキップするかどうかを指定するブール値。 BOM は、データファイルの先頭にある文字コードで、バイト順とエンコード形式を定義します。
FALSE
に設定されている場合、Snowflakeはデータファイル内の BOM を認識し、 BOM がエラーの原因になるか、テーブルの最初の列にマージされる可能性があります。- デフォルト
TRUE
TYPE = AVRO¶
COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- 使用
データのロードのみ
- 定義
データをロードするときに、データファイルの現在の圧縮アルゴリズムを指定します。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
データをアンロードする際、指定された圧縮アルゴリズムを使用してデータファイルを圧縮します。
- 値
サポートされる値
メモ
AUTO
データをロードすると、圧縮アルゴリズムは自動的に検出されますが、Brotliで圧縮されたファイルは例外で、現在は自動検出できません。データをアンロードするとき、ファイルはデフォルトのgzipを使用して自動的に圧縮されます。
GZIP
BROTLI
Brotliで圧縮されたファイルをロード/アンロードする場合は、指定する必要があります。
ZSTD
Zstandard v0.8(およびそれ以上)がサポートされています。
DEFLATE
Deflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。
RAW_DEFLATE
生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。
NONE
データをロードするとき、ファイルが圧縮されていないことを示します。データをアンロードするとき、アンロードされたファイルが圧縮されないことを指定します。
- デフォルト
AUTO
。
注釈
ファイル圧縮とコーデック圧縮の両方が決定されるため、デフォルトの AUTO
オプションを使用することをお勧めします。圧縮オプションの指定は、ブロック(コーデック)の圧縮ではなく、ファイルの圧縮を意味します。
TRIM_SPACE = TRUE | FALSE
- 使用
データのロードのみ
- 定義
文字列から先頭と末尾の空白を削除するかどうかを指定するブール値。
たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeはフィールドの先頭として開始引用文字ではなく先頭スペースを読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを
TRUE
に設定すると、データのロード中に不要なスペースが削除されます。このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してAvroデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
- デフォルト
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- 使用
データのロードおよび外部テーブル
- 定義
無効な UTF -8文字をUnicode置換文字(
�
)で置き換えるかどうかを指定するブール値。このオプションは、1対1の文字置換を実行します。- 値
TRUE
に設定すると、Snowflakeは無効な UTF -8文字をUnicode置換文字に置き換えます。FALSE
に設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- 使用
データのロードのみ
- 定義
SQL NULL との間の変換に使用される文字列。Snowflakeはデータロードソースのこれらの文字列を SQL NULL に置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。
このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してAvroデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
Snowflakeは、データ型に関係なく、値のすべてのインスタンスを NULL に変換することに注意してください。たとえば、
2
が値として指定されている場合は、文字列または数値としての2
のインスタンスすべてが変換されます。例:
NULL_IF = ('\\N', 'NULL', 'NUL', '')
このオプションには空の文字列を含めることができます。
- デフォルト
\\N
(つまり、 NULL、ESCAPE_UNENCLOSED_FIELD
値が\\
であると想定)
TYPE = ORC¶
TRIM_SPACE = TRUE | FALSE
- 使用
データのロードおよび外部テーブル
- 定義
文字列から先頭と末尾の空白を削除するかどうかを指定するブール値。
たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeはフィールドの先頭として開始引用文字ではなく先頭スペースを読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを
TRUE
に設定すると、データのロード中に不要なスペースが削除されます。このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してOrcデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
- デフォルト
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- 使用
データのロードおよび外部テーブル
- 定義
無効な UTF -8文字をUnicode置換文字(
�
)で置き換えるかどうかを指定するブール値。このオプションは、1対1の文字置換を実行します。- 値
TRUE
に設定すると、Snowflakeは無効な UTF -8文字をUnicode置換文字に置き換えます。FALSE
に設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- 使用
データのロードおよび外部テーブル
- 定義
SQL NULL との間の変換に使用される文字列。Snowflakeはデータロードソースのこれらの文字列を SQL NULL に置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。
このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してOrcデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
Snowflakeは、データ型に関係なく、値のすべてのインスタンスを NULL に変換することに注意してください。たとえば、
2
が値として指定されている場合は、文字列または数値としての2
のインスタンスすべてが変換されます。例:
NULL_IF = ('\\N', 'NULL', 'NUL', '')
このオプションには空の文字列を含めることができます。
- デフォルト
\\N
(つまり、 NULL、ESCAPE_UNENCLOSED_FIELD
値が\\
であると想定)
TYPE = PARQUET¶
COMPRESSION = AUTO | 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
注釈
Snowflakeは、潜在的な変換の問題を回避するために、 BINARY_AS_TEXT を FALSE に設定することをお勧めします。
TRIM_SPACE = TRUE | FALSE
- 使用
データのロードのみ
- 定義
文字列から先頭と末尾の空白を削除するかどうかを指定するブール値。
たとえば、外部データベースソフトウェアがフィールドを引用符で囲み、先頭にスペースを挿入する場合、Snowflakeはフィールドの先頭として開始引用文字ではなく先頭スペースを読み取ります(つまり、引用符はフィールドデータの文字列の一部として解釈されます)。このオプションを
TRUE
に設定すると、データのロード中に不要なスペースが削除されます。このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してParquetデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
- デフォルト
FALSE
USE_LOGICAL_TYPE = TRUE | FALSE
- 使用
データのロード、ステージングされたファイルでのデータクエリ、スキーマ検出。
- 定義
Parquet論理型を使用するかどうかを指定するブール値。このファイル形式オプションを使用すると、Snowflakeはデータのロード中にParquet論理型を解釈できます。詳細については、 Parquet理論型の定義 をご参照ください。Parquet論理型を有効にするには、新しいファイル形式オプションを作成するときに USE_LOGICAL_TYPE を TRUE に設定します。
- 制限事項
データのアンロードには対応していません。
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- 使用
データのロードおよび外部テーブル
- 定義
無効な UTF -8文字をUnicode置換文字(
�
)で置き換えるかどうかを指定するブール値。このオプションは、1対1の文字置換を実行します。- 値
TRUE
に設定すると、Snowflakeは無効な UTF -8文字をUnicode置換文字に置き換えます。FALSE
に設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- 使用
データのロードのみ
- 定義
SQL NULL との間の変換に使用される文字列。Snowflakeはデータロードソースのこれらの文字列を SQL NULL に置き換えます。複数の文字列を指定するには、文字列のリストを括弧で囲み、各値をコンマで区切ります。
このファイル形式オプションは、 MATCH_BY_COLUMN_NAME コピーオプションを使用してParquetデータを個別の列にロードする場合にのみ、次のアクションに適用されます。
Snowflakeは、データ型に関係なく、値のすべてのインスタンスを NULL に変換することに注意してください。たとえば、
2
が値として指定されている場合は、文字列または数値としての2
のインスタンスすべてが変換されます。例:
NULL_IF = ('\\N', 'NULL', 'NUL', '')
このオプションには空の文字列を含めることができます。
- デフォルト
\\N
(つまり、 NULL、ESCAPE_UNENCLOSED_FIELD
値が\\
であると想定)
TYPE = XML¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- 使用
データのロードのみ
- 定義
データをロードするときに、データファイルの現在の圧縮アルゴリズムを指定します。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
データをアンロードする際、指定された圧縮アルゴリズムを使用してデータファイルを圧縮します。
- 値
サポートされる値
メモ
AUTO
データをロードすると、圧縮アルゴリズムは自動的に検出されますが、Brotliで圧縮されたファイルは例外で、現在は自動検出できません。データをアンロードするとき、ファイルはデフォルトの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エンコードエラーがエラー状態を引き起こすかどうかを指定するブール値。
REPLACE_INVALID_CHARACTERS
の代替構文です。- 値
TRUE
に設定すると、無効な UTF-8シーケンスはUnicode文字U+FFFD
(つまり、「置換文字」)で警告なしに置き換えられます。FALSE
に設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト
FALSE
PRESERVE_SPACE = TRUE | FALSE
- 使用
データのロードのみ
- 定義
XML パーサーが要素コンテンツの先頭と後続のスペースを保持するかどうかを指定するブール値。
- デフォルト
FALSE
STRIP_OUTER_ELEMENT = TRUE | FALSE
- 使用
データのロードのみ
- 定義
XML パーサーが外側の XML 要素を取り除き、2番目のレベルの要素を別のドキュメントとして公開するかどうかを指定するブール値。
- デフォルト
FALSE
DISABLE_SNOWFLAKE_DATA = TRUE | FALSE
- 使用
データのロードのみ
- 定義
XML パーサーがSnowflake半構造化データタグの認識を無効にするかどうかを指定するブール値。
- デフォルト
FALSE
DISABLE_AUTO_CONVERT = TRUE | FALSE
- 使用
データのロードのみ
- 定義
XML パーサーがテキストからネイティブ表現への数値およびブール値の自動変換を無効にするかどうかを指定するブール値。
- デフォルト
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- 使用
データのロードおよび外部テーブル
- 定義
無効な UTF -8文字をUnicode置換文字(
�
)で置き換えるかどうかを指定するブール値。このオプションは、1対1の文字置換を実行します。- 値
TRUE
に設定すると、Snowflakeは無効な UTF -8文字をUnicode置換文字に置き換えます。FALSE
に設定すると、無効な UTF-8文字エンコードが検出されたときにロード操作でエラーが生成されます。- デフォルト
FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
- 使用
データのロードのみ
- 定義
入力ファイルに存在する BOM (バイト順マーク)をスキップするかどうかを指定するブール値。BOM は、データファイルの先頭にある文字コードで、バイト順とエンコード形式を定義します。
FALSE
に設定されている場合、Snowflakeはデータファイル内の BOM を認識し、 BOM がエラーの原因になるか、テーブルの最初の列にマージされる可能性があります。- デフォルト
TRUE
コピーオプション(copyOptions
)¶
コピーオプションは、 テーブルへのデータのロード と テーブルからのデータのアンロード に使用されます。
次のコピーオプションを1つ以上指定できます(空白、コンマ、または改行で区切り)。
ON_ERROR = CONTINUE | SKIP_FILE | SKIP_FILE_num | 'SKIP_FILE_num%' | ABORT_STATEMENT
- 使用
データのロードのみ
- 定義
ロード操作のエラー処理を指定する文字列(定数)。
重要
ON_ERROR コピーオプションの値を慎重に検討してください。デフォルト値は一般的なシナリオでは適切ですが、常に最良のオプションであるとは限りません。
- 値
CONTINUE
エラーが見つかった場合は、ファイルのロードを続行します。COPY ステートメントは、データファイルごとに見つかった最大1つのエラーのエラーメッセージを返します。
ROWS_PARSED 列の値と ROWS_LOADED 列の値の差は、検出されたエラーを含む行の数を表します。ただし、これらの各行には複数のエラーが含まれる可能性があります。データファイルのすべてのエラーを表示するには、 VALIDATION_MODE パラメーターを使用するか、 VALIDATE 関数をクエリします。
SKIP_FILE
エラーが見つかった場合はファイルをスキップします。
SKIP_FILE
アクションは、エラーが見つかったかどうかに関係なく、ファイル全体をバッファーすることに注意してください。このため、SKIP_FILE
はCONTINUE
またはABORT_STATEMENT
よりも低速です。少数のエラーで大型のファイルをスキップすると、遅延が発生し、クレジットが無駄になる可能性があります。論理的な叙述がないファイルから多数の記録をロードする場合(例: ファイルが大まかな間隔で自動的に生成された場合)は、代わりにCONTINUE
を指定することを検討してください。その他のパターン:
SKIP_FILE_num
(例:SKIP_FILE_10
)ファイル内で見つかったエラー行の数が指定された数以上の場合は、ファイルをスキップします。
'SKIP_FILE_num%'
(例:'SKIP_FILE_10%'
)ファイル内で見つかったエラー行の割合が指定された割合を超えた場合は、ファイルをスキップします。
ABORT_STATEMENT
データファイルにエラーが見つかった場合は、ロード操作を中止します。
データファイルが見つからない(例: データファイルが存在しない、またはデータファイルにアクセスできないため)場合は、
FILES
パラメーターでデータファイルが見つからない場合を明示的に指定していたときを除いて、ロード操作は中止 されません。
- デフォルト
- COPY を使用した一括ロード
ABORT_STATEMENT
- Snowpipe
SKIP_FILE
SIZE_LIMIT = num
- 使用
データのロードのみ
- 定義
特定の COPY ステートメントに対してロードされるデータの最大サイズ(バイト単位)を指定する数値(> 0)。しきい値を超えると、 COPY 操作はファイルのロードを中止します。このオプションは、通常、複数の COPY ステートメントを使用してファイルの共通グループをロードするために使用されます。各ステートメントについて、次のステートメントに進む前に、指定された
SIZE_LIMIT
を超えるまでデータのロードが続行されます。たとえば、ステージパス内の一連のファイルのサイズがそれぞれ10 MB であるとします。複数の COPY ステートメントが SIZE_LIMIT を
25000000
(25 MB)に設定すると、それぞれが3ファイルをロードします。つまり、SIZE_LIMIT
のしきい値を超えると、各 COPY 操作は中断されます。ロードするファイルがない場合を除き、
SIZE_LIMIT
に指定された値に関係なく、少なくとも1つのファイルがロードされることに注意してください。- デフォルト
null(サイズ制限なし)
PURGE = TRUE | FALSE
- 使用
データのロードのみ
- 定義
データが正常にロードされた後、ステージからデータファイルを自動的に削除するかどうかを指定するブール値。
このオプションが
TRUE
に設定されている場合は、正常にロードされたデータファイルを削除するために最善の努力が払われることに注意してください。パージ操作が何らかの理由で失敗した場合、現在エラーは返されません。ステージングされたファイルを定期的にリストし( LIST を使用)、正常にロードされたファイルがある場合は手動で削除することをお勧めします。- デフォルト
FALSE
RETURN_FAILED_ONLY = TRUE | FALSE
- 使用
データのロードのみ
- 定義
ステートメント結果でロードに失敗したファイルのみを返すかどうかを指定するブール値。
- デフォルト
FALSE
MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE
- 使用
データのロードのみ
- 定義
データで表される対応する列と一致するターゲットテーブルの列に半構造化データをロードするかどうかを指定する文字列。
このコピーオプションは、次のデータ形式でサポートされています。
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
使用上の注意¶
テーブルへの変更は、そのテーブルで作成されたビューに自動的に反映されません。たとえば、テーブル内の列をドロップし、その列を含むようにビューが定義されている場合、ビューは無効になります。ビューは列をドロップするように調整されていません。
列をドロップしても、必ずしも列のストレージスペースがすぐに解放されるわけではありません。
各マイクロパーティションのスペースは、そのマイクロパーティションの再書き込みが行われるまで解放されません。そのマイクロパーティション内の1行以上に書き込み操作(挿入、更新、削除など)を行うと、マイクロパーティションが再書き込みされます。スペースを強制的に解放する場合、テーブル内のすべての行を強制的に更新するか、
CREATE TABLE AS ...
を使用して、保持する古いテーブルの列のみを含む新しいテーブルを作成してから古いテーブルをドロップできます。テーブル内のデータの残りの量が多い場合、これらの操作のどちらもコストが高額になる可能性があります。テーブルがTime Travel機能によって保護されている場合、Time Travelの保持期間が終了するまで、Time Travelストレージで使用されるスペースは解放されません。
デフォルト値を持つ新しい列が既存の行を持つテーブルに追加されると、既存のすべての行にデフォルト値が入力されます。
関数を含むデフォルト値を持つ新しい列を追加することは、現在サポートされていません。次のエラーが返されます。
Invalid column default expression (expr)
テーブルを変更するには、テーブルの所有権限を持つロールを使用する必要があります。
テーブルにクラスタリングを追加するには、テーブルを含むスキーマとデータベースに対する USAGE または OWNERSHIP 権限も必要です。
マスキングポリシーの場合、
USING
句とFORCE
キーワードはどちらもオプションです。どちらも、列にマスキングポリシーを設定する必要はありません。USING
句とFORCE
キーワードは、個別にまたは一緒に使用できます。詳細については、以下をご参照ください。テーブルの列構造がポリシーで指定された列と一致する場合は、条件付き列を使用する単一のマスキングポリシーを複数のテーブルに適用できます。
マスキングポリシーを使用して1つ以上のテーブル列を変更する場合、または行アクセスポリシーを使用してテーブル自体を変更する場合は、 POLICY_CONTEXT 関数を使用して、マスキングポリシーによって保護されている列と、行アクセスポリシーによって保護されているテーブルに対するクエリをシミュレートします。
行アクセスポリシーの場合、
Snowflakeは、単一の SQL ステートメントで行アクセスポリシーの追加とドロップをサポートしています。
たとえば、テーブルにすでに設定されている行アクセスポリシーを別のポリシーに置き換えるには、最初に行アクセスポリシーをドロップしてから、新しい行アクセスポリシーを追加します。
特定のリソース(つまり、テーブルまたはビュー)の場合、行アクセスポリシーを
ADD
またはDROP
するには、スキーマに対する APPLY ROW ACCESS POLICY 権限、 または リソースに対する OWNERSHIP 権限と行アクセスポリシーリソースに対する APPLY 権限が必要です。テーブルまたはビューは、一度に1つの行アクセスポリシーでのみ保護できます。ポリシー本体が、行アクセスポリシーによって保護されているテーブルまたはビューの列、またはマスキングポリシーによって保護されている列を参照している場合、ポリシーの追加は失敗します。
同様に、マスキングポリシー本体が、行アクセスポリシーまたは別のマスキングポリシーによって保護されているテーブルを参照している場合、テーブル列へのマスキングポリシーの追加は失敗します。
行アクセスポリシーは、システムビューまたはテーブル関数には適用できません。
他の DROP <オブジェクト> 操作と同様に、行アクセスポリシーが追加されていないリソースから行アクセスポリシーをドロップしようとすると、Snowflakeはエラーを返します。
オブジェクトに行アクセスポリシーと1つ以上のマスキングポリシーの両方がある場合は、行アクセスポリシーが最初に評価されます。
外部キーを作成する場合、
REFERENCES
句の列は、主キーの列と同じ順序でリストする必要があります。例:create table parent ... constraint primary_key_1 primary key (c_1, c_2) ... create table child ... constraint foreign_key_1 foreign key (...) REFERENCES parent (c_1, c_2) ...
どちらの場合も、列の順序は
c_1, c_2
です。外部キーの列の順序が異なっていた場合(例:c_2, c_1
)、外部キーを作成する試みは失敗していました。メタデータについて、
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
ALTER TABLE ... CHANGE_TRACKING = TRUE
変更の追跡を有効にするためにテーブルが変更されると、テーブルは操作の間ロックされます。ロックにより、関連する DDL/DML オペレーションの一部で遅延が発生する可能性があります。詳細については、 リソースのロック をご参照ください。
例¶
次のセクションでは、 ALTER COLUMN コマンドの使用例を示します。
テーブル名の変更¶
次の例では、 t1
という名前のテーブルを作成します。
CREATE OR REPLACE TABLE t1(a1 number);
SHOW TABLES LIKE 't1';
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
| created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | change_tracking | is_external | enable_schema_evolution | owner_role_type | is_event | budget |
|-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------|
| 2023-10-19 10:37:04.858 -0700 | T1 | TESTDB | MY_SCHEMA | TABLE | | | 0 | 0 | PUBLIC | 1 | OFF | N | N | ROLE | N | NULL |
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
次のステートメントは、テーブル名を tt1
に変更します。
ALTER TABLE t1 RENAME TO tt1;
SHOW TABLES LIKE 'tt1';
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
| created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | change_tracking | is_external | enable_schema_evolution | owner_role_type | is_event | budget |
|-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------|
| 2023-10-19 10:37:04.858 -0700 | TT1 | TESTDB | MY_SCHEMA | TABLE | | | 0 | 0 | PUBLIC | 1 | OFF | N | N | ROLE | N | NULL |
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
テーブルの交換¶
次のステートメントは、 t1
および t2
という名前のテーブルを作成します。
CREATE OR REPLACE TABLE t1(a1 NUMBER, a2 VARCHAR, a3 DATE);
CREATE OR REPLACE TABLE t2(b1 VARCHAR);
DESC TABLE t1;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | DATE | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
DESC TABLE t2;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
次のステートメントは、テーブル t1
とテーブル t2
を交換します。
ALTER TABLE t1 SWAP WITH t2;
DESC TABLE t1;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
DESC TABLE t2;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | DATE | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
列の追加¶
次の例では、 t1
という名前のテーブルを作成します。
CREATE OR REPLACE TABLE t1(a1 NUMBER);
DESC TABLE t1;
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
次のステートメントは、このテーブルに a2
という名前の列を追加します。
ALTER TABLE t1 ADD COLUMN a2 NUMBER;
次のステートメントは、 a3
という名前の列に NOT NULL 制約を追加します。
ALTER TABLE t1 ADD COLUMN a3 NUMBER NOT NULL;
次のステートメントは、 a3
という名前の列にデフォルト値と NOT NULL 制約を追加します。
ALTER TABLE t1 ADD COLUMN a4 NUMBER DEFAULT 0 NOT NULL;
DESC TABLE t1;
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
次のステートメントは IF NOT EXISTS 句を使用して、列が存在しない場合にのみ a2
という名前の列を追加します。 a2
という名前の列が存在します。IF NOT EXISTS 句を指定すると、ステートメントがエラーで失敗するのを防ぐことができます。
ALTER TABLE t1 ADD COLUMN IF NOT EXISTS a2 NUMBER;
DESCRIBE TABLE コマンドの出力に示されているように、上記のステートメントが a2
という名前の既存の列に影響を与えることはありません。
DESC TABLE t1;
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
列の名前の変更¶
次のステートメントは、列 a1
の名前を b1
に変更します。
ALTER TABLE t1 RENAME COLUMN a1 TO b1;
DESC TABLE t1;
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
列の削除¶
次のステートメントは、列 a2
をドロップします。
ALTER TABLE t1 DROP COLUMN a2;
DESC TABLE t1;
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
次のステートメントは IF EXISTS 句を使用して、列が存在する場合にのみ a2
という名前の列をドロップします。 a2
という名前の列は存在しません。IF EXISTS 句を指定すると、ステートメントがエラーで失敗するのを防ぐことができます。
ALTER TABLE t1 DROP COLUMN IF EXISTS a2;
DESCRIBE TABLE コマンドの出力に示されているように、上記のステートメントが既存のテーブルに影響を与えることはありません。
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
外部テーブルの列の追加、名前の変更、ドロップ¶
次のステートメントは、 exttable1
という名前の外部テーブルを作成します。
CREATE EXTERNAL TABLE exttable1
LOCATION=@mystage/logs/
AUTO_REFRESH = true
FILE_FORMAT = (TYPE = PARQUET)
;
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
次のステートメントは、外部テーブルに a1
という名前の新しい列を追加します。
ALTER TABLE exttable1 ADD COLUMN a1 VARCHAR AS (value:a1::VARCHAR);
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
| A1 | VARCHAR(16777216) | VIRTUAL | Y | NULL | N | N | NULL | TO_CHAR(GET(VALUE, 'a1')) | NULL |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
次のステートメントは、 a1
列の名前を b1
に変更します。
ALTER TABLE exttable1 RENAME COLUMN a1 TO b1;
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
| B1 | VARCHAR(16777216) | VIRTUAL | Y | NULL | N | N | NULL | TO_CHAR(GET(VALUE, 'a1')) | NULL |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
次のステートメントは、 b1
という名前の列をドロップします。
ALTER TABLE exttable1 DROP COLUMN b1;
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
クラスタリングキーの順序の変更¶
次のステートメントは t1
という名前のテーブルを作成し、 id
列と date
列でクラスタリングします。
CREATE OR REPLACE TABLE T1 (id NUMBER, date TIMESTAMP_NTZ, name STRING) CLUSTER BY (id, date);
SHOW TABLES LIKE 'T1';
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
Tue, 21 Jun 2016 15:42:12 -0700 | T1 | TESTDB | TESTSCHEMA | TABLE | | (ID,DATE) | 0 | 0 | ACCOUNTADMIN | 1 |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
次のステートメントは、クラスタリングキーの順序を変更します。
ALTER TABLE t1 CLUSTER BY (date, id);
SHOW TABLES LIKE 'T1';
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
Tue, 21 Jun 2016 15:42:12 -0700 | T1 | TESTDB | TESTSCHEMA | TABLE | | (DATE,ID) | 0 | 0 | ACCOUNTADMIN | 1 |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
行アクセスポリシーの追加とドロップ¶
次の例では、単一の列を指定しながら、テーブルに行アクセスポリシーを追加します。ポリシーを設定した後、 Information Schema を確認することで検証できます。
alter table t1 add row access policy rap_t1 on (empl_id);
次の例では、1つのテーブルに2つの列を指定しながら、行アクセスポリシーを追加します。
alter table t1 add row access policy rap_test2 on (cost, item);
次の例では、テーブルから行アクセスポリシーをドロップします。 Information Schema にクエリを実行して、ポリシーがドロップされたことを検証します。
alter table t1 drop row access policy rap_v1;
次の例は、テーブルの単一の SQL ステートメントで行アクセスポリシーの追加とドロップを組み合わせる方法を示しています。 Information Schema を確認して結果を検証します。
alter table t1 drop row access policy rap_t1_version_1, add row access policy rap_t1_version_2 on (empl_id);