ALTER TABLE ... ALTER COLUMN¶
このトピックでは、 ALTER TABLE ステートメントで ALTER COLUMN 句を使用して、テーブルの1つ以上の列プロパティを変更する方法について説明します。
次のテーブルは、列のプロパティを変更するためのサポート対象/サポート対象外のアクションを示しています。
アクション |
サポート対象 |
サポート対象外 |
注意 |
|---|---|---|---|
デフォルト値 |
|||
列のデフォルト(つまり
DROP DEFAULT )をドロップします。 |
✔ |
列とデフォルトが ALTER TABLE コマンドで定義されているときは許可されません。詳細については、以下の 使用上の注意 をご参照ください。 |
|
列のデフォルトシーケンスを変更します(つまり、
SET DEFAULT seq_name.NEXTVAL)。 |
✔ |
すでにシーケンスが含まれている列にのみ使用します。 |
|
デフォルトがシーケンスでない限り、列のデフォルトを変更します。
|
✔ |
||
列のデフォルトを追加します。
|
✔ |
||
NULL値の許容度 |
|||
列のNULL値の許容度を変更します(つまり、
SET NOT NULL または DROP NOT NULL)。 |
✔ |
||
データ型 |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
新しい精度が、現在列にある すべて の値を保持するのに十分な場合にのみ許可されます。さらに、精度を下げると、Time Travelに影響する可能性があります(詳細については、 使用上の注意 をご参照ください)。 |
||
✔ |
|||
コメント |
|||
列のコメントを設定または設定解除します。
|
✔ |
||
マスキングポリシー |
|||
列の マスキングポリシー を設定または設定解除します。
|
✔ |
||
投影ポリシー |
|||
列の 投影ポリシー を設定または設定解除します。
|
✔ |
||
オブジェクトのタグ付け |
|||
列の タグ の設定または設定解除。
|
✔ |
列は最大20タグをサポートでき、タグ文字列値の最大文字数は256です。 |
- こちらもご参照ください。
ALTER TABLE、 CREATE TABLE、 DROP TABLE、 SHOW TABLES、 DESCRIBE TABLE
構文¶
使用上の注意¶
単一の ALTER TABLE ステートメントを使用して、テーブル内の複数の列を変更できます。各変更は、変更する列と列のプロパティで構成される句として指定され、コンマで区切られます。
ALTERまたはMODIFYキーワードを使用して、ステートメントの句のリスト(変更する列/プロパティ)を開始します。括弧は句のグループ化に使用できますが、必須ではありません。
COLUMNキーワードは各句で指定できますが、必須ではありません。句は任意の順序で指定できます。
列を
NOT NULLに設定するときに、列に NULL 値が含まれる場合、エラーが返され、列に変更は適用されません。半構造化データ型(ARRAY、 OBJECT、 VARIANT)を使用する列は、テーブルが空の場合を除き、
NOT NULLに設定することはできません。テーブルに行が含まれているときにこれらの列をNOT NULLに設定することはサポートされておらず、エラーになります。列のデフォルトの順序を変更するには、列にデフォルトの順序が存在している必要があります。まだシーケンスを持たない列にシーケンスを追加するために、コマンド
ALTER TABLE ... SET DEFAULT <シーケンス名>を使用することはできません。DEFAULT値の列を追加するようにテーブルを変更した場合は、その列のデフォルト値をドロップすることはできません。たとえば、次の一連のステートメントでは、最後のALTER TABLE ... ALTER COLUMNステートメントによってエラーが発生します。この制限により、列が追加される前に挿入された行と、列が追加された後に挿入された行の値の不一致が防止されます。デフォルトが削除された場合、列には次が含まれます。
列が追加される前に挿入された行のNULL 値。
列が追加された後に挿入された行のデフォルト値。
テーブルのクローンからデフォルトの列値を削除することも禁止されています。
列に
TYPEを設定する場合、指定する型(つまりtype)は NUMBER または テキストデータ型 (VARCHAR、 STRING、 TEXT など)である必要があります。NUMBER データ型の場合は、
TYPEを使用して次を実行できます。指定した数値列の精度を上げる。
新しい精度が現在列にあるすべてのデータ値を保持するのに十分である場合は、指定された数値列の精度を下げる。
テキストデータ型の場合、
TYPEは列の長さを 増やす ためにのみ使用できます。
列の精度がTime Travelに保持されている列データの最大精度を下回った場合は、最初に精度を上げることなくテーブルを復元することはできません。
インタラクティブテーブル の場合、現在 ALTER TABLE MODIFY COLUMN コマンドで使用できる句は COMMENT および UNSET COMMENT のみです。
マスキングポリシーの場合、
USING句とFORCEキーワードはどちらもオプションです。どちらも、列にマスキングポリシーを設定する必要はありません。USING句とFORCEキーワードは、個別にまたは一緒に使用できます。詳細については、以下をご参照ください。テーブルの列構造がポリシーで指定された列と一致する場合は、条件付き列を使用する単一のマスキングポリシーを複数のテーブルに適用できます。
マスキングポリシーを使用して1つ以上のテーブル列を変更する場合、または行アクセスポリシーを使用してテーブル自体を変更する場合は、 POLICY_CONTEXT 関数を使用して、マスキングポリシーによって保護されている列と、行アクセスポリシーによって保護されているテーブルに対するクエリをシミュレートします。
メタデータ(たとえば、
COMMENTフィールド)に関して、注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
設定例:
t1 に次の変更を加えます。
NOTNULL 列
c1を NULL に変更します。列
c2のデフォルトをドロップし、列c3のデフォルトシーケンスを変更します。列
c4の長さを増やし、列のデフォルトをドロップします。列
c5にコメントを追加します。
前の例と同じですが、次の変更によりコマンドの汎用性/柔軟性を示しています。
単一の
ALTER COLUMN句で実行されるすべてのアクション。句内の列の順序は異なります。
SET DATA TYPEはTYPEを単純化するために短縮されました。この例では、同じ結果が生成されます。
列レベルのセキュリティマスキングポリシーをテーブル列に適用します。
テーブル列から列レベルのセキュリティマスキングポリシーを設定解除します。