CREATE TABLE [USING]
Gilt für: Databricks SQL Databricks Runtime
Definiert eine verwaltete oder externe Tabelle, optional mithilfe einer Datenquelle.
Syntax
{ { [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 |
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 |
WITH { ROW FILTER clause } } [...]
clustered_by_clause
{ CLUSTERED BY ( cluster_column [, ...] )
[ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
INTO num_buckets BUCKETS }
Parameter
REPLACE
Wenn angegeben, werden die Tabelle und deren Inhalt ersetzt, sofern bereits vorhanden. Diese Klausel wird nur bei Delta Lake-Tabellen unterstützt.
REPLACE
behält den Tabellenverlauf bei.Hinweis
Azure Databricks empfiehlt dringend,
REPLACE
zu verwenden, anstatt Delta Lake-Tabellen zu löschen und neu zu erstellen.EXTERNAL
Wenn angegeben, wird hiermit eine externe Tabelle erstellt. Beim Erstellen einer externen Tabelle müssen Sie außerdem eine
LOCATION
-Klausel angeben. Wenn eine externe Tabelle gelöscht wird, werden die Dateien amLOCATION
nicht gelöscht.IF NOT EXISTS
Wenn dies angegeben wird und bereits eine Tabelle gleichen Namens vorhanden ist, wird die Anweisung ignoriert.
IF NOT EXISTS
undREPLACE
können nicht gleichzeitig vorhanden sein, was bedeutet, dassCREATE OR REPLACE TABLE IF NOT EXISTS
nicht zulässig ist.-
Der Name der zu erstellenden Tabelle. Der Name darf keine temporale Spezifikation enthalten. Wenn der Name ohne Qualifizierung angegeben wird, wird die Tabelle im aktuellen Schema erstellt.
In
hive_metastore
erstellte Tabellen dürfen nur alphanumerische ASCII-Zeichen und Unterstriche enthalten (INVALID_SCHEMA_OR_RELATION_NAME). table_specification
Diese optionale Klausel definiert die Liste der Spalten, deren Typen, Eigenschaften, Beschreibungen und Spalteneinschränkungen.
Wenn Sie keine Spalten für das Tabellenschema definieren, müssen Sie entweder
AS query
oderLOCATION
angeben.-
Ein eindeutiger Name für die Spalte.
Spaltenbezeichner in Delta Lake-Tabellen ohne Spaltenzuordnungseigenschaft (
'delta.columnMapping.mode' = 'name'
) dürfen keine Leerzeichen oder folgende Zeichen enthalten:, ; { } ( ) \n \t =
.Spaltenbezeichner der Tabelle
AVRO
müssen mit einem Unterstrich (_
) oder einem Unicode-Buchstaben (einschließlich Nicht-ASCII-Buchstaben) beginnen, auf den eine Kombination aus Unicode-Buchstaben, Ziffern und Unterstrichen folgt. -
Gibt den Datentyp der Spalte an. Nicht alle Datentypen, die von Azure Databricks unterstützt werden, werden von allen Datenquellen unterstützt.
NOT NULL
Wenn angegeben, akzeptiert die Spalte keine
NULL
-Werte. Diese Klausel wird nur bei Delta Lake-Tabellen unterstützt.GENERATED ALWAYS AS ( expr )
Wenn Sie diese Klausel angeben, wird der Wert dieser Spalte durch den angegebenen
expr
bestimmt.expr
kann aus Literalen, Spaltenbezeichnern innerhalb der Tabelle und deterministischen, integrierten SQL-Funktionen oder -Operatoren bestehen, mit Ausnahme von:- Aggregatfunktionen
- Analysefensterfunktionen
- Fensterrangfunktionen
- Tabellenwertgenerator-Funktionen
Darüber hinaus darf
expr
keine Unterabfrage enthalten.GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH Start ] [ INCREMENT BY Schritt] ) ]
Gilt für: Databricks SQL Databricks Runtime 10.4 LTS und höher
Definiert eine Identitätsspalte. Wenn Sie in die Tabelle schreiben und keine Werte für die Identitätsspalte angeben, wird ihr automatisch ein eindeutiger und statistisch steigender Wert (oder abnehmender Wert, wenn
step
negativ ist) zugewiesen. Diese Klausel wird nur bei Delta Lake-Tabellen unterstützt. Diese Klausel kann nur für Spalten mit dem BIGINT-Datentyp verwendet werden.Die automatisch zugewiesenen Werte beginnen mit
start
und werden umstep
inkrementiert. Zugewiesene Werte sind eindeutig, aber es ist nicht garantiert, dass sie zusammenhängend sind. Beide Parameter sind optional, und der Standardwert ist 1.step
darf nicht0
sein.Wenn die automatisch zugewiesenen Werte außerhalb des Bereichs des Identitätsspaltentyps liegen, hat die Abfrage keinen Erfolg.
Wenn
ALWAYS
verwendet wird, können Sie keine eigenen Werte für die Identitätsspalte angeben.Die folgenden Vorgänge werden nicht unterstützt:
PARTITIONED BY
: eine IdentitätsspalteUPDATE
: eine Identitätsspalte
Hinweis
Durch das Deklarieren einer Identitätsspalte in einer Delta-Tabelle werden gleichzeitige Transaktionen deaktiviert. Verwenden Sie Identitätsspalten nur in Anwendungsfällen, in denen keine gleichzeitigen Schreibvorgänge in die Zieltabelle erforderlich sind.
DEFAULT default_expression
Gilt für: Databricks SQL Databricks Runtime 11.3 LTS und höher
Definiert einen
DEFAULT
-Wert für die Spalte, der fürINSERT
,UPDATE
undMERGE ... INSERT
verwendet wird, wenn die Spalte nicht angegeben ist.Wenn kein Standardwert angegeben ist, wird
DEFAULT NULL
für Nullwerte zulassende Spalten angewendet.default_expression
kann aus Literalen und integrierten SQL-Funktionen oder -Operatoren bestehen, außer:- Aggregatfunktionen
- Analysefensterfunktionen
- Fensterrangfunktionen
- Tabellenwertgenerator-Funktionen
Darüber hinaus darf
default_expression
keine Unterabfrage enthalten.DEFAULT
wird fürCSV
,JSON
,PARQUET
undORC
Quellen unterstützt.COMMENT column_comment
Ein Zeichenfolgenliteral zum Beschreiben der Spalte.
-
Fügt der Spalte in einer Delta Lake-Tabelle eine Primärschlüssel- oder Fremdschlüsseleinschränkung hinzu.
Einschränkungen werden nicht für Tabellen im
hive_metastore
-Katalog unterstützt.Verwenden Sie ALTER TABLE, wenn Sie einer Delta Lake-Tabelle eine CHECK-Einschränkung hinzufügen möchten.
-
Gilt für: Databricks SQL Databricks Runtime 12.2 LTS und höher Nur Unity Catalog
Wichtig
Dieses Feature befindet sich in der Public Preview.
Fügt eine Spaltenmaskierungsfunktion hinzu, um vertrauliche Zeichenfolgenwerte zu anonymisieren. Alle zukünftigen Abfragen von dieser Spalte erhalten das Ergebnis der Auswertung dieser Funktion über die Spalte anstelle des ursprünglichen Wertes der Spalte. Dies kann für eine präzise Zugriffssteuerung nützlich sein, bei der die Funktion die Identität oder Gruppenmitgliedschaft der aufrufenden Benutzer*innen überprüfen kann, um zu entscheiden, ob der Wert zurückgezogen werden soll.
-
Fügt der Delta Lake-Tabelle eine informative Primärschlüssel- oder informative Fremdschlüsseleinschränkung hinzu.
Schlüsseleinschränkungen werden nicht für Tabellen im
hive_metastore
-Katalog unterstützt.Verwenden Sie ALTER TABLE, wenn Sie einer Delta Lake-Tabelle eine CHECK-Einschränkung hinzufügen möchten.
-
USING data_source
Das Dateiformat, das für die Tabelle verwendet werden soll.
data_source
muss eine der folgenden Angaben sein:AVRO
BINARYFILE
CSV
DELTA
JSON
ORC
PARQUET
TEXT
Die folgenden zusätzlichen Dateiformate, die für die Tabelle verwendet werden sollen, werden in Databricks Runtime unterstützt:
JDBC
LIBSVM
- ein vollqualifizierter Klassenname einer benutzerdefinierten Implementierung von
org.apache.spark.sql.sources.DataSourceRegister
.
Wenn
USING
nicht angegeben wird, ist der StandardwertDELTA
.Für andere
data_source
alsDELTA
müssen Sie auch einenLOCATION
angeben, es sei denn, der Tabellenkatalog isthive_metastore
.Folgendes gilt für: Databricks Runtime
HIVE
wird unterstützt, um eine Hive SerDe-Tabelle in Databricks Runtime zu erstellen. Sie können das Hive-spezifischefile_format
undrow_format
mithilfe derOPTIONS
-Klausel angeben, einer Zeichenfolgenzuordnung, bei der die Groß-/Kleinschreibung nicht beachtet wird. Dieoption_keys
sind:FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
table_clauses
Geben Sie optional Speicherort, Partitionierung, Clustering, Optionen, Kommentare und benutzerdefinierte Eigenschaften für die neue Tabelle an. Jede Unterklausel kann nur einmal angegeben werden.
-
Eine optionale Klausel zum Partitionieren der Tabelle nach einer Teilmenge von Spalten.
Hinweis
Wenn Sie keine Delta-Tabelle definieren, werden am Ende der Tabelle Partitionierungsspalten platziert, auch wenn sie bereits zuvor in der Spaltenspezifikation definiert sind. Erwägen Sie für Delta-Tabellen die Verwendung von
CLUSTER BY
anstelle vonPARTITIONED BY
. -
Gilt für: Databricks SQL Databricks Runtime 13.3 und höher
Eine optionale Klausel zum Gruppieren einer Delta-Tabelle durch eine Teilmenge von Spalten. Verwenden Sie zum Gruppieren anderer Tabellen
clustered_by_clause
.Delta Lake Liquid Clustering kann nicht mit
PARTITIONED BY
kombiniert werden. clustered_by_clause
Gruppieren Sie optional die Tabelle oder jede Partition mithilfe einer Teilmenge der Spalten zu einer festen Anzahl von Hashbuckets.
Clustering wird für Delta Lake-Tabellen nicht unterstützt.
CLUSTERED BY
Gibt den Satz von Spalten an, nach denen jede Partition gruppiert werden soll, oder die Tabelle, wenn keine Partitionierung angegeben ist.
-
Ein Bezeichner, der auf einen
column_identifier
in der Tabelle verweist. Wenn Sie mehrere Spalten angeben, dürfen keine Duplikate vorhanden sein. Da ein Clustering auf Partitionsebene funktioniert, dürfen Sie eine Partitionsspalte nicht auch als Clusterspalte benennen.
-
SORTED BY
Behält optional eine Sortierreihenfolge für Zeilen in einem Bucket bei.
sort_column
Eine Spalte, nach der der Bucket sortiert werden soll. Die Spalte darf keine Partitionsspalte sein. Sortierspalten müssen eindeutig sein.
ASC oder DESC
Gibt optional an, ob
sort_column
in aufsteigender (ASC
) oder absteigender Reihenfolge (DESC
) sortiert ist. Die Standardwerte sindASC
.
INTO num_buckets BUCKETS
Ein INTEGER-Literal, das die Anzahl der Buckets angibt, in die jede Partition (oder die Tabelle, wenn keine Partitionierung angegeben ist) aufgeteilt wird.
LOCATION path [ WITH ( CREDENTIAL credential_name ) ]
Ein optionaler Pfad zu dem Verzeichnis, in dem Tabellendaten gespeichert werden. Dabei kann es sich um einen Pfad im verteilten Speicher handeln.
path
muss ein STRING-Literal sein. Wenn Sie keinen Speicherort angeben, wird die Tabelle alsmanaged table
betrachtet, und Azure Databricks erstellt einen Standardspeicherort für die Tabelle.Wenn Sie einen Speicherort angeben, wird die Tabelle zu einer externen Tabelle.
Bei Tabellen, die sich nicht im
hive_metastore
-Katalog befinden, muss derpath
der Tabelle durch einen externen Speicherort geschützt werden, solange keine gültigen Speicheranmeldeinformationen angegeben werden.Sie können keine externen Tabellen an Speicherorten erstellen, die sich mit dem Speicherort verwalteter Tabellen überlappen.
Eine Delta Lake-Tabelle erbt die Tabellenkonfiguration von
LOCATION
, wenn Daten vorhanden sind. Wenn alsoTBLPROPERTIES
-,table_specification
- oderPARTITIONED BY
-Klauseln für Delta Lake-Tabellen angegeben werden, müssen sie genau mit den Delta Lake-Speicherortdaten übereinstimmen.-
Legt eine oder mehrere benutzerdefinierte Tabellenoptionen fest oder setzt diese zurück.
COMMENT table_comment
Ein Zeichenfolgenliteral zum Beschreiben der Tabelle.
-
Legt optional eine oder mehrere benutzerdefinierte Eigenschaften fest.
WITH ROW FILTER-Klausel
Gilt für: Databricks SQL Databricks Runtime 12.2 LTS und höher Nur Unity Catalog
Fügt der Tabelle eine Zeilenfilterfunktion hinzu. Alle zukünftigen Abfragen von dieser Tabelle erhalten eine Teilmenge der Zeilen, in denen die Funktion als boolescher WAHR ausgewertet wird. Dies kann für eine fein abgestufte Zugriffssteuerung nützlich sein, bei der die Funktion die Identität oder Gruppenmitgliedschaften der aufrufenden Benutzer überprüfen kann, um zu entscheiden, ob bestimmte Spalten gefiltert werden sollen.
-
AS query
Diese optionale Klausel füllt die Tabelle mithilfe der Daten aus
query
auf. Wenn Sie einequery
angeben, dürfen Sie nicht auch einetable_specification
angeben. Das Tabellenschema wird aus der Abfrage abgeleitet.Beachten Sie, dass Azure Databricks die zugrunde liegende Datenquelle mit den Daten der Eingabeabfrage überschreibt, um sicherzustellen, dass die erstellte Tabelle genau die gleichen Daten wie die Eingabeabfrage enthält.
Beispiele
-- 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));