適用対象:
Databricks SQL
Databricks Runtime
必要に応じてデータ ソースを使用して、マネージド テーブルまたは外部テーブルを定義します。
構文
{ { [CREATE OR] REPLACE TABLE | CREATE [EXTERNAL] TABLE [ IF NOT EXISTS ] }
table_name
[ table_specification ]
[ USING data_source ]
[ table_clauses ]
[ AS query ] }
table_specification
( { column_identifier column_type [ column_properties ] } [, ...]
[ , table_constraint ] [...] )
column_properties
{ NOT NULL |
COLLATE collation_name |
GENERATED ALWAYS AS ( expr ) |
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start | INCREMENT BY step ] [ ...] ) ] |
DEFAULT default_expression |
COMMENT column_comment |
column_constraint |
MASK clause } [ ... ]
table_clauses
{ OPTIONS clause |
PARTITIONED BY clause |
CLUSTER BY clause |
clustered_by_clause |
LOCATION path [ WITH ( CREDENTIAL credential_name ) ] |
COMMENT table_comment |
TBLPROPERTIES clause |
DEFAULT COLLATION default_collation_name |
WITH { ROW FILTER clause } } [...]
clustered_by_clause
{ CLUSTERED BY ( cluster_column [, ...] )
[ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
INTO num_buckets BUCKETS }
Databricks Runtime 16.1 より前の START WITH は、INCREMENT BYの前に置く必要があります。
パラメーター
取り替える
指定した場合は、テーブルとその内容が既に存在する場合に置き換えられます。 この句は、Delta テーブルと Apache Iceberg テーブルでのみサポートされます。
REPLACEでは、 テーブル履歴 が保持され、権限、行フィルター、列マスクが付与されます。メモ
Azure Databricks では、テーブルを削除して再作成するのではなく、
REPLACEを使用することを強くお勧めします。外部
指定した場合は、 外部テーブルを作成します。 外部テーブルを作成するときは、
LOCATION句も指定する必要があります。 外部テーブルが削除されても、LOCATIONのファイルは削除されません。存在しない場合
指定した場合、同じ名前のテーブルが既に存在すると、ステートメントは無視されます。
IF NOT EXISTSはREPLACEと共存できません。つまり、CREATE OR REPLACE TABLE IF NOT EXISTSは許可されません。-
作成されるテーブルの名前。 名前には 、テンポラル仕様またはオプション指定を含めてはなりません。 名前が修飾されていない場合、テーブルは現在のスキーマに作成されます。
hive_metastoreで作成されたテーブルには、英数字の ASCII 文字とアンダースコア (INVALID_SCHEMA_OR_RELATION_NAME) のみを含めることができます。Iceberg テーブルは Unity カタログで作成する必要があります。
hive_metastoreでの Iceberg テーブルの作成はサポートされていません。 テーブル仕様
この省略可能な句で、列、その型、プロパティ、説明、および列制約の一覧を定義します。
テーブル スキーマで列を定義しない場合は、
AS queryまたはLOCATIONのいずれかを指定する必要があります。-
列の一意の名前。
列マッピング プロパティ (
'delta.columnMapping.mode' = 'name') のない Delta テーブルの列識別子には、スペースまたは次の文字を含めることはできません:, ; { } ( ) \n \t =。AVROテーブルの列識別子は、アンダースコア (_) または Unicode 文字 (非 ASCII 文字を含む) で始まり、その後に Unicode 文字、数字、アンダースコアの組み合わせが続く必要があります。ICEBERGテーブルの列識別子は、一意で大文字と小文字を区別せず、標準の SQL 識別子規則に従う必要があります。 スペースまたは特殊文字は、すべてのクエリ エンジンでサポートされていない可能性があるため、使用しないでください。 -
列のデータ型を指定します。 Azure Databricks でサポートされているすべての データ型 が、すべてのデータ ソースでサポートされているわけではありません。
NOT NULL
指定した場合、列は
NULL値を受け入れられません。 この句は、Delta テーブルと Iceberg テーブルでのみサポートされます。COLLATE collation_name
適用対象:
Databricks SQL
Databricks Runtime 16.1 以上STRINGcolumn_typeの場合は、必要に応じて、この列の比較および並べ替え操作に適用する照合順序に名前を付けます。 既定の照合順序は、テーブルdefault_collation_nameです。常に自動生成 ( expr )
この句を指定すると、この列の値は、指定した
exprによって決定されます。テーブルの
DEFAULT COLLATIONはUTF8_BINARYする必要があります。exprは、以下のものを除く、リテラル、テーブル内の列識別子、および決定論的な組み込みの SQL 関数または演算子で構成される場合があります。- 集計関数
- 分析ウィンドウ関数
- ランク付けウィンドウ関数
- テーブル値ジェネレーター関数
-
UTF8_BINARY以外の照合順序を持つ列
また、
exprにはサブクエリを含めてはなりません。GENERATED { ALWAYS |既定 } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ] ]
適用対象:
Databricks SQL
Databricks Runtime 10.4 LTS 以上ID 列を定義します。 テーブルへの書き込み時に ID 列の値を指定しなかった場合は、統計的に増加する (または
stepが負の場合は減少する) 一意の値が自動的に割り当てられます。 この句は、Delta テーブルでのみサポートされます。 この句は、BIGINT データ型の列にのみ使用できます。自動的に割り当てられた値は、
startから始まり、stepずつ増えます。 割り当てられた値は一意ですが、連続している保証はありません。 どちらのパラメーターも省略可能で、既定値は 1 です。stepに0は指定できません。自動的に割り当てられた値が ID 列の型の範囲を超える場合、クエリは失敗します。
ALWAYSを使用する場合は、ID 列に独自の値を指定できません。次の操作はサポートされていません。
- ID 列の
PARTITIONED BYを行う - ID 列の
UPDATEを行う
メモ
テーブルで ID 列を宣言すると、同時実行トランザクションが無効になります。 ID 列は、ターゲット テーブルへの同時書き込みが不要なユース ケースでのみ使用してください。
- ID 列の
デフォルト デフォルト式
適用対象:
Databricks SQL
Databricks Runtime 11.3 LTS以上列が指定されていない場合に
DEFAULT、INSERT、UPDATEで使われる列のMERGE ... INSERT値を定義します。既定値が指定されていない場合、Null 許容列には
DEFAULT NULLが適用されます。default_expressionは、リテラル、および組み込みの SQL 関数か演算子で構成することができます。ただし、次のものは除きます。- 集計関数
- 分析ウィンドウ関数
- ランク付けウィンドウ関数
- テーブル値ジェネレーター関数
また、
default_expressionにはサブクエリを含めてはなりません。DEFAULTはCSV、JSON、PARQUET、とORCソースでサポートされています。コメント column_comment
列について説明する文字列リテラル。
-
テーブル内の列に主キー制約または外部キー制約を追加します。
制約は、
hive_metastoreカタログ内のテーブルではサポートされていません。テーブルに check 制約を追加するには、 ALTER TABLEを使用します。
-
適用対象:
Databricks SQL 

列マスク関数を追加して、機密データを匿名化します。 その列の後続のすべてのクエリは、列の元の値の代わりに、その列に対してその関数を評価した結果を受け取ります。 これは、関数が呼び出し元ユーザーの ID またはグループ メンバーシップを検査して、値を編集するかどうかを決定できる、きめ細かいアクセス制御に役立ちます。
テーブルを置き換え、新しいテーブルに元の列と同じ列名が含まれている場合、既存の列マスクは明示的に再定義されていなくても保持されます。 これにより、データ アクセス ポリシーが誤って失われるのを防ぐことができます。
-
情報主キー制約または情報外部キー制約をテーブルに追加します。
主な制約は、
hive_metastoreカタログ内のテーブルに対してはサポートされません。テーブルに check 制約を追加するには、 ALTER TABLEを使用します。
-
data_sourceの使用
data_sourceには、ファイル形式またはフェデレーション JDBC データ ソースのいずれかを指定できます。ファイル形式は、次のいずれかである必要があります。
AVROBINARYFILECSVDELTAICEBERGJSONORCPARQUETTEXT
DELTAまたはICEBERG以外のファイル形式の場合は、テーブル カタログがLOCATIONされていない限り、hive_metastoreも指定する必要があります。次のフェデレーション JDBC ソースがサポートされています。
POSTGRESQLSQLSERVERMYSQLBIGQUERYNETSUITEORACLEREDSHIFTSNOWFLAKESQLDWSYNAPSESALESFORCESALESFORCE_DATA_CLOUDTERADATAWORKDAY_RAASMONGODB
フェデレーション JDBC ソースを指定する場合は、必要な接続情報を含む
OPTIONS句も指定する必要があります。 フェデレーション データ ソースのクエリの詳細については、 JDBC を使用したデータベース のクエリを参照してください。テーブルに使用する次の追加のファイル形式が Databricks Runtime でサポートされています。
JDBCLIBSVM-
org.apache.spark.sql.sources.DataSourceRegisterのカスタム実装の完全修飾クラス名。
USINGを省略した場合、既定値はDELTAです。以下の適用対象: Databricks Runtime
HIVEは Databricks Runtime で Hive SerDe テーブルを作成するためにサポートされています。 Hive 固有のfile_formatやrow_formatを、OPTIONS句を使用して指定できます。これは、大文字と小文字を区別しない文字列マップです。option_keysは次のとおりです。FILEFORMATINPUTFORMATOUTPUTFORMATSERDEFIELDDELIMESCAPEDELIMMAPKEYDELIMLINEDELIM
テーブル条項
必要に応じて、新しいテーブルの場所、パーティション分割、クラスタリング、オプション、コメント、およびユーザー定義のプロパティを指定します。 各サブ句は、1 回だけ指定できます。
-
列のサブセットによってテーブルをパーティション分割する省略可能な句。
メモ
管理された Iceberg テーブルの場合、Azure Databricks は
PARTITIONED BYをサポートしていません。 代わりに、液体クラスタリング (CLUSTER BY) を使用してデータ レイアウトを最適化します。 Delta テーブルの場合、テーブル定義を省略すると、Azure Databricks では、列の指定で前に一覧表示した場合でも、テーブルの末尾にパーティション分割列が配置されます。 -
適用対象:
Databricks SQL
Databricks Runtime 13.3 以降列のサブセットによって Delta テーブルまたは Iceberg テーブルをクラスター化する省略可能な句。 表に液体クラスタリングを使用するを参照してください。 他のテーブルをクラスター化するには、
clustered_by_clauseを使用します。Iceberg テーブルの場合、
CLUSTER BYを使用するときは、削除ベクトルと行 ID を明示的に無効にする必要があります。CLUSTER BY AUTOで自動液体クラスタリングを使用し、Databricks はクエリのパフォーマンスを最適化するためにクラスタリング キーをインテリジェントに選択します。液体クラスタリングを
PARTITIONED BYと組み合わせることはできません。 clustered_by_clause
必要に応じて、列のサブセットを使用して、テーブルまたは各パーティションを固定数のハッシュ バケットにクラスター化します。
この句は、Delta テーブルまたは Iceberg テーブルではサポートされていません。
CLUSTER BYを代わりに使用します。クラスタ化基準:
各パーティション (パーティション分割が指定されていない場合は、テーブル) のクラスター化に使用する列のセットを指定します。
-
テーブル内の
column_identifierを参照する識別子。 複数の列を指定する場合は、重複しないようにする必要があります。 クラスタリングはパーティション レベルで動作するため、パーティション列をクラスター列として指定しないでください。
-
ソート順
必要に応じて、バケット内の行の並べ替え順序を維持します。
sort_column
バケットの並べ替えに使用する列。 この列をパーティション列にすることはできません。 並べ替え列は一意である必要があります。
ASC または DESC
必要に応じて、
sort_columnの並べ替えを昇順 (ASC) にするか、降順 (DESC) にするかを指定します。 既定値はASCです。
INTO num_buckets BUCKETS
各パーティション (またはパーティション分割が指定されていない場合はテーブル) が分割される分のバケット数を指定する INTEGER リテラル。
LOCATION パス [ WITH ( CREDENTIAL credential_name ) ]
テーブル データが格納されているディレクトリへの省略可能なパス。これは、分散ストレージ上のパスにすることもできます。
pathは文字列リテラルである必要があります。 場所を指定しない場合、テーブルはmanaged tableと見なされ、Azure Databricks によって既定のテーブルの場所が作成されます。場所を指定すると、テーブルが 外部テーブルになります。
hive_metastoreカタログに存在しないテーブルの場合、有効なpathが指定されていない限り、テーブル は外部の場所で保護する必要があります。マネージド テーブルの場所と重複する場所に外部 テーブルを作成することはできません。
Delta テーブルの場合、データがそのパスに既に存在する場合、テーブルは
LOCATIONからその構成を継承します。 その結果、指定したTBLPROPERTIES、table_specification、またはPARTITIONED BY句は、Delta の場所にある既存のデータと完全に一致する必要があります。Iceberg テーブルの場合、
LOCATION句はサポートされていません。 外部カタログを作成すると、外部 Iceberg テーブルが自動的に登録されるため、場所を指定せずに管理された Iceberg テーブルを作成する必要があります。-
1 つ以上のユーザー定義テーブル オプションを設定またはリセットします。
コメント table_comment
テーブルについて説明する文字列リテラル。
-
必要に応じて、1 つ以上のユーザー定義プロパティを設定します。
デフォルトの照合順序 default_collation_name
適用対象:
Databricks SQL
Databricks Runtime 16.3 以降使用する既定の照合順序を定義します。
-
STRINGテーブルの列と項目 -
DEFAULT式 -
CREATE TABLE AS queryの本文
CHECK制約と生成される列式には、UTF8_BINARYの既定の照合順序が必要です。指定しない場合、既定の照合順序は、テーブルが作成されるスキーマから派生します。
-
WITH ROW FILTER 句
適用対象:
Databricks SQL 

行フィルター関数をテーブルに追加します。 そのテーブルからの後続のすべてのクエリは、関数がブール値 TRUE に評価される行のサブセットを受け取ります。 これは、関数が呼び出したユーザーの ID またはグループ メンバーシップを検査して、特定の行をフィルター処理するかどうかを決定できる、きめ細かいアクセス制御に役立ちます。
テーブルを置き換える場合、既存の行フィルターは、明示的に再定義されていなくても保持されます。 これにより、データ アクセス ポリシーが誤って失われるのを防ぐことができます。
-
AS クエリ
この省略可能な句により、
queryからのデータを使用してテーブルが事前設定されます。queryを指定する場合は、table_specificationも指定することはしないで ください。 テーブル スキーマはクエリから生成されます。Azure Databricks では、作成されたテーブルに入力クエリとまったく同じデータが確実に含まれるように、基になるデータ ソースが入力クエリのデータで上書きされることに注意してください。
例示
-- Creates a Delta table
> CREATE TABLE student (id INT, name STRING, age INT);
-- Creates a managed Iceberg table
> CREATE TABLE edu.enrollment.student (id INT, name STRING, age INT) USING ICEBERG;
-- Use data from another table
> CREATE TABLE student_copy AS SELECT * FROM student;
-- Creates a CSV table from an external directory
> CREATE TABLE student USING CSV LOCATION '/path/to/csv_files';
-- Specify table comment and properties
> CREATE TABLE student (id INT, name STRING, age INT)
COMMENT 'this is a comment'
TBLPROPERTIES ('foo'='bar');
-- Specify table comment and properties with different clauses order
> CREATE TABLE student (id INT, name STRING, age INT)
TBLPROPERTIES ('foo'='bar')
COMMENT 'this is a comment';
-- Create partitioned table
> CREATE TABLE student (id INT, name STRING, age INT)
PARTITIONED BY (age);
-- Create a table with a generated column
> CREATE TABLE rectangles(a INT, b INT,
area INT GENERATED ALWAYS AS (a * b));
-- Create a table with a string column with a case-insensitive collation.
> CREATE TABLE names(name STRING COLLATE UNICODE_CI);
-- Create a table with a default collation and override for a specific column.
> CREATE TABLE names(name STRING, first_name STRING, id STRING COLLATE UTF8_BINARY) DEFAULT COLLATION UNICODE_CI;
-- Create an external table connected to Oracle
> CREATE TABLE IF NOT EXISTS ora_tab
USING ORACLE
OPTIONS (
url '<jdbc-url>',
dbtable '<table-name>',
user '<username>',
password '<password>'
);
> SELECT * FROM ora_tab;