適用対象:
Databricks SQL
Databricks Runtime
マネージド テーブル、一時テーブル、または 外部テーブルを定義し、必要に応じてデータ ソースを使用して非一時テーブルを定義します。
CREATE TEMP TABLE コマンドは、セッション中にデータを一時的に保持するセッション ローカル一時テーブルを作成します。 テーブル名は非修飾にする必要があります (スキーマまたはカタログ プレフィックスはありません)。 一時テーブルは現在のスキーマまたはカタログには存在せず、作成したセッション内でのみアクセスできます。 Databricks は、セッションの終了時に一時テーブルを自動的に削除します。
構文
{ { [CREATE OR] REPLACE { TEMP | TEMPORARY } TABLE | CREATE [EXTERNAL] TABLE [ IF NOT EXISTS ] | CREATE { TEMP | TEMPORARY } TABLE}
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のファイルは削除されません。TEMP または TEMPORARY
適用対象:
Databricks SQLImportant
この機能は パブリック プレビュー段階です。
指定すると、一時テーブルが作成または置換されます。 一時テーブルを作成または置換するときは、
USING句またはLOCATION句でデータ ソースを指定しないでください。 次の句はサポートされていません:PARTITIONED BY、CLUSTER BY、行レベルのフィルター。 次の列プロパティはサポートされていません:GENERATEDと列マスク。REPLACE コマンドの場合、
TEMPORARYキーワードが指定されていない場合、コマンドは永続テーブルのみを置き換えます。 同じ修飾されていない名前の一時テーブルが存在する場合、 TEMP_TABLE_REPLACE_PERMANENT_NAME_CONFLICT エラーが生成されます。存在しない場合
指定した場合、同じ名前のテーブルが既に存在すると、ステートメントは無視されます。
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でサポートされているすべてのdata 型が、すべてのデータ ソースでサポートされているわけではありません。
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です。USING句は、一時テーブルではサポートされていません。以下の適用対象: Databricks Runtime
HIVEは Databricks Runtime で Hive SerDe テーブルを作成するためにサポートされています。 Hive 固有のfile_formatやrow_formatを、OPTIONS句を使用して指定できます。これは、大文字と小文字を区別しない文字列マップです。option_keysは次のとおりです。FILEFORMATINPUTFORMATOUTPUTFORMATSERDEFIELDDELIMESCAPEDELIMMAPKEYDELIMLINEDELIM
テーブル条項
必要に応じて、新しいテーブルの場所、パーティション分割、クラスタリング、オプション、コメント、およびユーザー定義のプロパティを指定します。 各サブ句は、1 回だけ指定できます。
-
列のサブセットによってテーブルをパーティション分割する省略可能な句。
PARTITIONED BY句は、一時テーブルではサポートされていません。メモ
管理された Iceberg テーブルの場合、Azure Databricksは
PARTITIONED BYをサポートしていません。 代わりに、液体クラスタリング (CLUSTER BY) を使用してデータ レイアウトを最適化します。 デルタ テーブルの場合、テーブル定義を省略した場合、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を参照する識別子。 複数の列を指定する場合は、重複しないようにする必要があります。 クラスタリングはパーティション レベルで動作するため、パーティション列をクラスター列として指定しないでください。CLUSTERED BY句は、一時テーブルではサポートされていません。
-
ソート順
必要に応じて、バケット内の行の並べ替え順序を維持します。
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 テーブルを作成する必要があります。LOCATION句は、一時テーブルではサポートされていません。-
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 またはグループ メンバーシップを検査して、特定の行をフィルター処理するかどうかを決定できる、きめ細かいアクセス制御に役立ちます。
テーブルを置き換える場合、既存の行フィルターは、明示的に再定義されていなくても保持されます。 これにより、データ アクセス ポリシーが誤って失われるのを防ぐことができます。
ROW FILTER句は、一時テーブルではサポートされていません。
-
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;
-- Create a temporary table, insert values in it, and display its contents.
> CREATE TEMP TABLE temp_1 (a INT);
> INSERT INTO temp_1 VALUES (1);
> SELECT * FROM temp_1;
a
----
1
> CREATE OR REPLACE TEMP TABLE temp_1 (a VARCHAR(100));
> DESCRIBE TABLE temp_1;
colName dataType
—------ —-------
a varchar(100)