適用対象: 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 Lake のテーブルでのみサポートされます。
REPLACE
では、 テーブル履歴 と付与された特権が保持されます。メモ
Azure Databricks では、Delta Lake のテーブルを削除して再作成するのではなく、
REPLACE
を使用することを強くお勧めします。外部
指定した場合は、 外部テーブルを作成します。 外部テーブルを作成するときは、
LOCATION
句も指定する必要があります。 外部テーブルが削除されても、LOCATION
のファイルは削除されません。存在しない場合
指定した場合、同じ名前のテーブルが既に存在すると、ステートメントは無視されます。
IF NOT EXISTS
はREPLACE
と共存できません。つまり、CREATE OR REPLACE TABLE IF NOT EXISTS
は許可されません。-
作成されるテーブルの名前。 名前には 、テンポラル仕様またはオプション指定を含めてはなりません。 名前が修飾されていない場合、テーブルは現在のスキーマに作成されます。
hive_metastore
で作成されたテーブルには、英数字の ASCII 文字とアンダースコア (INVALID_SCHEMA_OR_RELATION_NAME) のみを含めることができます。 テーブル仕様
この省略可能な句で、列、その型、プロパティ、説明、および列制約の一覧を定義します。
テーブル スキーマで列を定義しない場合は、
AS query
またはLOCATION
のいずれかを指定する必要があります。-
列の一意の名前。
列マッピング プロパティ (
'delta.columnMapping.mode' = 'name'
) がない Delta Lake テーブルの列識別子には、スペースあるいは次の文字 (, ; { } ( ) \n \t =
) を含めてはいけません。AVRO
テーブルの列識別子は、アンダースコア (_
) または Unicode 文字 (非 ASCII 文字を含む) で始まり、その後に Unicode 文字、ディジット、アンダースコアの組み合わせが続く必要があります。 -
列のデータ型を指定します。 Azure Databricks でサポートされているすべての データ型 が、すべてのデータ ソースでサポートされているわけではありません。
NOT NULL
指定した場合、列は
NULL
値を受け入れません。 この句は、Delta Lake のテーブルでのみサポートされます。COLLATE collation_name
適用対象:
Databricks SQL
Databricks Runtime 16.1 以上
STRING
column_type
の場合は、必要に応じて、この列の比較および並べ替え操作に適用する照合順序に名前を付けます。 既定の照合順序は、テーブルdefault_collation_name
です。GENERATED ALWAYS AS ( 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 Lake のテーブルでのみサポートされます。 この句は、BIGINT データ型の列にのみ使用できます。自動的に割り当てられた値は、
start
から始まり、step
ずつ増えます。 割り当てられた値は一意ですが、連続している保証はありません。 どちらのパラメーターも省略可能で、既定値は 1 です。step
に0
は指定できません。自動的に割り当てられた値が ID 列の型の範囲を超える場合、クエリは失敗します。
ALWAYS
を使用する場合は、ID 列に独自の値を指定できません。次の操作はサポートされていません。
- ID 列の
PARTITIONED BY
を行う - ID 列の
UPDATE
を行う
メモ
Delta テーブルで 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
列について説明する文字列リテラル。
-
Delta Lake テーブル内の列に主キーまたは外部キー制約を追加します。
制約は、
hive_metastore
カタログ内のテーブルではサポートされていません。Delta Lake テーブルに check 制約を追加するには、ALTER TABLEを使用します。
-
適用対象:
Databricks SQL
重要
この機能は パブリック プレビュー段階です。
列マスク関数を追加して、機密データを匿名化します。 その列の後続のすべてのクエリは、列の元の値の代わりに、その列に対してその関数を評価した結果を受け取ります。 これは、関数が呼び出し元ユーザーの ID またはグループ メンバーシップを検査して、値を編集するかどうかを決定できる、きめ細かいアクセス制御に役立ちます。
-
情報主キーまたは情報外部キーの制約を Delta Lake テーブルに追加します。
主な制約は、
hive_metastore
カタログ内のテーブルに対してはサポートされません。Delta Lake テーブルに check 制約を追加するには、ALTER TABLEを使用します。
-
data_sourceの使用
data_source
には、ファイル形式またはフェデレーション JDBC データ ソースのいずれかを指定できます。ファイル形式は、次のいずれかである必要があります。
AVRO
BINARYFILE
CSV
DELTA
JSON
ORC
PARQUET
TEXT
DELTA
以外のファイル形式の場合は、テーブル カタログがLOCATION
されていない限り、hive_metastore
も指定する必要があります。次のフェデレーション JDBC ソースがサポートされています。
POSTGRESQL
SQLSERVER
MYSQL
BIGQUERY
NETSUITE
ORACLE
REDSHIFT
SNOWFLAKE
SQLDW
SYNAPSE
SALESFORCE
SALESFORCE_DATA_CLOUD
TERADATA
WORKDAY_RAAS
MONGODB
フェデレーション JDBC ソースを指定する場合は、必要な接続情報を含む
OPTIONS
句も指定する必要があります。 フェデレーション データ ソースのクエリの詳細については、 JDBC を使用したデータベース のクエリを参照してください。テーブルに使用する次の追加のファイル形式が Databricks Runtime でサポートされています。
JDBC
LIBSVM
-
org.apache.spark.sql.sources.DataSourceRegister
のカスタム実装の完全修飾クラス名。
USING
を省略した場合、既定値はDELTA
です。以下の適用対象: Databricks Runtime
HIVE
は Databricks Runtime で Hive SerDe テーブルを作成するためにサポートされています。 Hive 固有のfile_format
やrow_format
を、OPTIONS
句を使用して指定できます。これは、大文字と小文字を区別しない文字列マップです。option_keys
は次のとおりです。FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
テーブル条項
必要に応じて、新しいテーブルの場所、パーティション分割、クラスタリング、オプション、コメント、およびユーザー定義のプロパティを指定します。 各サブ句は、1 回だけ指定できます。
-
列のサブセットによってテーブルをパーティション分割する省略可能な句。
メモ
Delta テーブルを定義しない場合、パーティション分割列は、列の仕様で以前に定義されている場合でも、テーブルの末尾に配置されます。 Delta テーブルの場合は
CLUSTER BY
ではなく、PARTITIONED BY
を使用することを検討してください。 -
適用対象:
Databricks SQL
Databricks Runtime 13.3 以降
列のサブセットによって Delta テーブルをクラスター化するための省略可能な句。 他のテーブルをクラスター化するには、
clustered_by_clause
を使用します。Delta Lake リキッド クラスタリングを
PARTITIONED BY
と組み合わせることはできません。 clustered_by_clause
必要に応じて、列のサブセットを使用して、テーブルまたは各パーティションを固定数のハッシュ バケットにクラスター化します。
クラスタリングは、Delta Lake のテーブルではサポートされていません。
CLUSTERED 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 Lake テーブルのテーブル構成は、データが存在する場合、
LOCATION
から継承されます。 そのため、TBLPROPERTIES
、table_specification
、またはPARTITIONED BY
の句が Delta Lake テーブルに指定されている場合は、それらが Delta Lake 場所データと正確に一致している必要があります。-
1 つ以上のユーザー定義テーブル オプションを設定またはリセットします。
コメント table_comment
テーブルについて説明する文字列リテラル。
-
必要に応じて、1 つ以上のユーザー定義プロパティを設定します。
デフォルトの照合順序 default_collation_name
適用対象:
Databricks SQL
Databricks Runtime 16.3 以降
使用する既定の照合順序を定義します。
-
STRING
テーブルの列と項目 -
DEFAULT
式 -
CREATE TABLE AS query
の本文
CHECK
制約と生成される列式には、UTF8_BINARY
の既定の照合順序が必要です。指定しない場合、既定の照合順序は
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);
-- 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;