適用対象:
Databricks SQL
Databricks Runtime
テーブル内の列、または Delta Lake テーブルの列のフィールドを追加、変更、または削除します。
必要なアクセス許可
Unity カタログを使用する場合、次の MODIFY アクセス許可が必要です。
ALTER COLUMNADD COLUMNDROP COLUMN
その他すべての操作では、テーブルの所有権が必要です。
構文
ALTER TABLE table_name
{ ADD COLUMN clause |
ALTER COLUMN clause |
DROP COLUMN clause |
RENAME COLUMN clause }
COLUMN 文節を追加
この句は、JDBC データ ソースではサポートされていません。
1 つ以上の列をテーブルに追加するか、Delta Lake テーブル内の既存の列にフィールドを追加します。
注
既存の Delta テーブルに列を追加する場合、DEFAULT 値を定義することはできません。 Delta テーブルに追加されたすべての列は、既存の行の NULL として扱われます。 列を追加した後、必要に応じて列の既定値を定義できますが、これはテーブルに挿入される新しい行にのみ適用されます。 次の構文を使用します。
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression
構文
{ ADD [ COLUMN | COLUMNS ]
( { { column_identifier | field_name } data_type
[ COLLATE collation_name ]
[ DEFAULT clause ]
[ COMMENT comment ]
[ FIRST | AFTER identifier ]
[ MASK clause ] } [, ...] ) }
パラメーター
-
追加する列の名前です。 名前はテーブル内で一意にする必要があります。
FIRSTまたはAFTER nameが指定されていない限り、列またはフィールドは末尾に追加されます。 -
既存の列に追加するフィールドの完全修飾名。 入れ子になったフィールドに対するパスのコンポーネントがすべて存在し、フィールド名自体が一意である必要があります。
ARRAY型またはMAP型で入れ子になった構造体にフィールドを追加するには、次の特殊な名前を使用します。-
ELEMENTをクリックして、ARRAY要素に移動します。 -
KEYをクリックして、MAPキーに移動します。 -
VALUEをクリックして、MAP値に移動します。
たとえば、
phonenumbers.element.countrycodecountrycode配列の各要素にフィールドphonenumbersを追加します。 -
DEFAULT default_expression適用対象:
Databricks SQL
Databricks Runtime 11.3 LTS 以上列が指定されていない場合に
DEFAULTとINSERTで使われる列のMERGE ... INSERT値を定義します。 既定の式のSTRINGリテラルとSTRING関数では、照合順序UTF8_BINARY使用されます。既定値が指定されていない場合、Null 許容列には
DEFAULT NULLが暗黙的に使用されます。default_expressionは、リテラル、および組み込みの SQL 関数か演算子で構成することができます。ただし、次のものは除きます。default_expressionには、サブクエリを含めることはできません。DEFAULTはCSV、JSON、PARQUET、とORCソースでサポートされています。-
列かフィールドのデータ型を指定します。 Azure Databricks でサポートされているすべてのデータ型が、すべてのデータ ソースでサポートされているわけではありません。
COLLATEcollation_namedata_typeSTRINGでは、必要に応じて、列またはフィールドで使用する照合順序を指定します。 指定しない場合は、UTF8_BINARY照合順序が適用されます。COMMENT comment追加された列またはフィールドを記述する省略可能な
STRINGリテラル。Unity Catalog で管理されているテーブルまたはテーブル列に AI が生成したコメントを追加する場合は、「AI が生成したコメントを Unity Catalog オブジェクトに追加する」を参照してください。
FIRST指定した場合、列はテーブルの最初の列として追加されます。または、フィールドが、含まれている構造体の最初のフィールドとして追加されます。
AFTER識別子指定した場合、フィールドまたは列
identifierの直後に列またはフィールドが追加されます。-
適用対象:
Databricks SQL
Databricks Runtime 12.2 LTS 以降
Unity Catalog のみ重要
この機能はパブリック プレビュー段階にあります。
列マスク関数を追加して、機密データを匿名化します。 その列の後続のすべてのクエリは、列の元の値の代わりに、その列に対してその関数を評価した結果を受け取ります。 これは、関数が呼び出し元ユーザーの ID またはグループ メンバーシップを検査して、値を編集するかどうかを決定できる、きめ細かいアクセス制御に役立ちます。
ALTER COLUMN 句
適用対象:
Databricks SQL
Databricks Runtime
プロパティまたは列の場所を変更します。
構文
{ ALTER | CHANGE } [ COLUMN ]
{ { column_identifier | field_name }
{ COMMENT comment |
{ FIRST | AFTER column_identifier } |
{ SET | DROP } NOT NULL |
TYPE data_type |
SET DEFAULT clause |
DROP DEFAULT |
SYNC IDENTITY }
[, ... ]
Databricks Runtime 16.3 より前のバージョンでは、この句は 1 つの句内の複数の列の変更をサポートしていません。
{ ALTER | CHANGE } [ COLUMN ]
{ column_identifier | field_name }
{ SET { MASK clause } |
DROP MASK |
SET TAGS clause |
UNSET TAGS clause }
パラメーター
-
変更する列の名前。
列識別子が複数回参照されている場合、Azure Databricks はNOT_SUPPORTED_CHANGE_SAME_COLUMNを報告します。
-
変更するフィールドの完全修飾名。 入れ子になったフィールドへのパスのすべてのコンポーネントが存在する必要があります。
フィールド名が複数回参照されている場合、Azure Databricks によって NOT_SUPPORTED_CHANGE_SAME_COLUMNが発生します。
COMMENT commentcolumn_name列の説明を変更します。commentは、STRINGリテラルを指定する必要があります。FIRSTまたはAFTER識別子列を現在の位置から前 (
FIRST) またはAFTERのすぐidentifierに移動します。 この句は、table_nameが Delta テーブルの場合にのみサポートされます。TYPEデータ型適用対象:
Databricks SQL
Databricks Runtime 15.2 以上column_name列のデータ型を変更します。この句は、
table_nameが Delta テーブルの場合にのみサポートされます。以下の型の変更はすべての Delta テーブルでサポートされています。
-
VARCHAR列のサイズを増加させます。例:VARCHAR(5)からVARCHAR(10) -
CHAR列の型をVARCHARに変更します。例:CHAR(5)からVARCHAR(5) -
CHARまたはVARCHAR列の型をSTRINGに変更します。例:VARCHAR(10)からSTRING。
以下の型の変更は、
delta.enableTypeWideningがtrueに設定されている Delta テーブルでサポートされています。重要
この機能は、Databricks Runtime 15.2 以上でのパブリック プレビュー段階にあります。
変換元の型 サポートされるより拡大された型 BYTESHORT、INT、BIGINT、DECIMAL、DOUBLESHORTINT、BIGINT、DECIMAL、DOUBLEINTBIGINT、DECIMAL、DOUBLEBIGINTDECIMAL、DOUBLEFLOATDOUBLEDECIMALより高い精度とスケールの DECIMALDATETIMESTAMP_NTZ型の拡大の詳細については、「型の拡大」を参照してください。
-
SET NOT NULLまたはDROP NOT NULL有効な列値のドメインを変更して null を除外 (
SET NOT NULL) するか、null を含め (DROP NOT NULL) ます。 このオプションは、Delta Lake テーブルでのみサポートされます。 Delta Lake では、制約が既存のすべてのデータと新しいデータに対して有効になります。SYNC IDENTITY適用対象:
Databricks SQL
Databricks Runtime 10.4 LTS 以上ID 列のメタデータを実際のデータと同期します。 ID 列に独自の値を書き込む場合、メタデータに準拠していない可能性があります。 このオプションでは、状態が評価され、実際のデータと一致するようにメタデータが更新されます。 このコマンドの後、次に自動的に割り当てられる ID 値は
start + (n + 1) * stepから開始されます。ここで、nはstart + n * step >= max()を満たす最小の値です (正の手順の場合)。このオプションは、Delta Lake テーブルの ID 列でのみサポートされます。
DROP DEFAULT適用対象:
Databricks SQL
Databricks Runtime 11.3 LTS 以上列から既定の式を削除します。 Null 許容列の場合、これは
SET DEFAULT NULLと同じになります。NOT NULLで定義された列の場合、今後すべてのINSERT操作で値を指定する必要がありますSET DEFAULT default_expression適用対象:
Databricks SQL
Databricks Runtime 11.3 LTS 以上列が指定されていない場合に
DEFAULTとINSERTで使われる列のMERGE ... INSERT値を定義します。既定値が指定されていない場合、Null 許容列には
DEFAULT NULLが暗黙的に使用されます。default_expressionは、リテラル、組み込みの SQL 関数か演算子で構成することができます。ただし、次のものは除きます。default_expressionには、サブクエリを含めることはできません。DEFAULTはCSV、JSON、ORC、とPARQUETソースでサポートされています。新しく追加された列の既定値を定義すると、その既定値はすべての既存の行に適用されます。 既定値に
randやcurrent_timestampのような非決定論的関数が含まれている場合、その値はALTER TABLEが実行されたときに一度だけ計算され、既存の行に定数として適用されます。 新しく挿入された行では、既定の式は行ごとに 1 回実行されます。ALTER COLUMNを使って既定値を設定した場合、既存の行はその変更の影響を受けません。SETMASK 句適用対象:
Databricks SQL
Databricks Runtime 12.2 LTS 以降
Unity Catalog のみ重要
この機能はパブリック プレビュー段階にあります。
列マスク関数を追加して、機密データを匿名化します。 その列の後続のすべてのクエリは、列の元の値の代わりに、その列に対してその関数を評価した結果を受け取ります。 これは、関数が呼び出し元ユーザーの ID またはグループ メンバーシップを検査して、値を編集するかどうかを決定できる、きめ細かいアクセス制御に役立ちます。
DROP MASK適用対象:
Unity Catalog のみ重要
この機能はパブリック プレビュー段階にあります。
この列の列マスク (存在する場合) を削除します。 この列からの今後のクエリは、列の元の値を受け取ります。
SET TAGS ( { tag_name = tag_value } [, ...] )適用対象:
Databricks SQL
Databricks Runtime 13.3 LTS 以上列にタグを適用します。 列にタグを追加するには、
APPLY TAGアクセス許可が必要です。tag_name
リテラル
STRING。tag_nameはテーブル内または列内で一意にする必要があります。tag_value
リテラル
STRING。
UNSET TAGS ( tag_name [, ...] )適用対象:
Databricks SQL
Databricks Runtime 13.3 LTS 以上列からタグを削除します。 列からタグを削除するには、
APPLY TAGアクセス許可が必要です。tag_name
リテラル
STRING。tag_nameはテーブル内または列内で一意にする必要があります。
DROP COLUMN 句
重要
この機能はパブリック プレビュー段階にあります。
適用対象:
Databricks SQL
Databricks Runtime 11.3 LTS 以上
リレーションシップ内の 1 つ以上の列またはフィールドを削除します。
列またはフィールドを削除する場合は、依存 Check 制約と生成された列を削除する必要があります。
要件については、「Delta Lake の列マッピングを使用して列の名前変更と削除を行う」をご覧ください。
構文
DROP [COLUMN | COLUMNS] [ IF EXISTS ] ( { {column_identifier | field_name} [, ...] )
パラメーター
IF EXISTSIF EXISTSを指定すると、Azure Databricks は、存在しない列を削除しようとしても無視します。 それ以外の場合、存在しない列の削除によってエラーが発生します。-
既存の列の名前。
-
既存のフィールドの完全修飾名。
RENAME COLUMN 句
重要
この機能はパブリック プレビュー段階にあります。
適用対象:
Databricks SQL
Databricks Runtime 10.4 LTS 以上
列マッピングが有効になっている Delta Lake テーブルの列またはフィールドの名前を変更します。
列またはフィールドの名前を変更する場合は、依存 Check 制約と生成された列も変更する必要があります。 当該の列を使用する主キーと外部キーはすべて削除されます。 外部キーの場合は、外部キーが定義されているテーブルを所有している必要があります。
要件と列マッピングを有効にする方法については、「Delta Lake 列マッピングを使用した列の 名前と削除を参照してください。
構文
RENAME COLUMN { column_identifier TO to_column_identifier|
field_name TO to_field_identifier }
パラメーター
-
列の既存の名前。
-
新しい列識別子。 識別子はテーブル内で一意である必要があります。
-
フィールドの既存の完全修飾名。
-
新しいフィールド識別子。 識別子は、ローカル構造体内で一意である必要があります。
例
ALTER TABLE 例を参照してください。