Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 |
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 }
Vor Databricks Runtime 16.1 muss START WITH
INCREMENT BY
vorausgehen.
Parameter
REPLACE
Falls angegeben, werden die Tabelle und deren Inhalt ersetzt, sofern sie bereits existieren. Diese Klausel wird nur für Delta- und Apache Iceberg-Tabellen unterstützt.
REPLACE
behält den Tabellenverlauf sowie gewährte Berechtigungen bei.Hinweis
Azure Databricks empfiehlt dringend,
REPLACE
statt des Löschens und Neuerstellens von Tabellen zu verwenden.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.WENN NICHT EXISTIERT
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 zeitliche Spezifikation oder Optionsspezifikation 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).Eisbergtabellen müssen im Unity-Katalog erstellt werden. Das Erstellen von Iceberg-Tabellen in der
hive_metastore
wird nicht unterstützt. Tabellenspezifikation
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 von Delta-Tabellen ohne Spaltenzuordnungseigenschaft (
'delta.columnMapping.mode' = 'name'
) dürfen keine Leerzeichen oder die folgenden Zeichen enthalten:, ; { } ( ) \n \t =
Spaltenbezeichner von
AVRO
Tabellen müssen mit einem Unterstrich (_
) oder einem Unicode-Buchstaben (einschließlich Nicht-ASCII-Buchstaben) beginnen und einer Kombination aus Unicode-Buchstaben, Ziffern und Unterstrichen folgen.Spaltenbezeichner von
ICEBERG
-Tabellen müssen eindeutig sein, unabhängig von der Groß-/Kleinschreibung, und die Standardregeln für SQL-Bezeichner befolgen. Vermeiden Sie die Verwendung von Leerzeichen oder Sonderzeichen, da sie möglicherweise nicht von allen Abfragemodulen unterstützt werden. -
Gibt den Datentyp der Spalte an. Nicht alle Datentypen, die von Azure Databricks unterstützt werden, werden von allen Datenquellen unterstützt.
NICHT NULL
Wenn angegeben, akzeptiert
NULL
die Spalte keine Werte. Diese Klausel wird nur für Delta- und Iceberg-Tabellen unterstützt.COLLATE collation_name
Gilt für:
Databricks SQL
Databricks Runtime 16.1 und höher
Für
STRING
column_type
wird optional die Sortierung angegeben, die für Vergleichs- und Sortiervorgänge für diese Spalte angewendet werden soll. Die Standardsortierung ist die Tabelledefault_collation_name
.GENERATED ALWAYS AS ( expr )
Wenn Sie diese Klausel angeben, wird der Wert dieser Spalte durch den angegebenen
expr
bestimmt.Die
DEFAULT COLLATION
der Tabelle mussUTF8_BINARY
sein.expr
kann aus Literalen, Spaltenbezeichnern innerhalb der Tabelle und deterministischen, integrierten SQL-Funktionen oder -Operatoren bestehen, mit Ausnahme von:- Aggregatfunktionen
- Analysefensterfunktionen
- Rangfolgefensterfunktionen
- Tabellenwertgenerator-Funktionen
- Spalten mit einer anderen Kollation als
UTF8_BINARY
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 für Delta-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 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 NULL-fähige Spalten angewendet.default_expression
kann aus Literalen und integrierten SQL-Funktionen oder -Operatoren bestehen, außer:- Aggregatfunktionen
- Analysefensterfunktionen
- Rangfolgefensterfunktionen
- Tabellenwertgenerator-Funktionen
Darüber hinaus darf
default_expression
keine Unterabfrage enthalten.DEFAULT
wird fürCSV
,JSON
,PARQUET
undORC
Quellen unterstützt.ANMERKUNG column_comment
Ein Zeichenfolgenliteral zum Beschreiben der Spalte.
-
Fügt der Spalte in einer Tabelle eine Primärschlüssel- oder Fremdschlüsseleinschränkung hinzu.
Einschränkungen werden nicht für Tabellen im
hive_metastore
-Katalog unterstützt.So fügen Sie einer Tabelle eine Check-Einschränkung mit ALTER TABLE hinzu.
-
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 Daten zu anonymisieren. Alle nachfolgenden Abfragen dieser Spalte erhalten das Ergebnis der Auswertung dieser Funktion anstelle des ursprünglichen Werts 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 Tabelle einen informationsalen Primärschlüssel oder Informationen zu Fremdschlüsseleinschränkungen hinzu.
Schlüsseleinschränkungen werden nicht für Tabellen im
hive_metastore
-Katalog unterstützt.Um einer Tabelle eine Check-Bedingung hinzuzufügen, verwenden Sie ALTER TABLE.
-
VERWENDUNG von data_source
data_source
kann entweder ein Dateiformat oder eine JDBC-Föderationsdatenquelle sein.Das Dateiformat muss eines der folgenden sein:
AVRO
BINARYFILE
CSV
DELTA
ICEBERG
JSON
ORC
PARQUET
TEXT
Für jedes andere Dateiformat als
DELTA
oderICEBERG
müssen Sie auch einLOCATION
angeben, es sei denn, der Tabellenkatalog isthive_metastore
.Die folgenden JDBC-Verbundquellen werden unterstützt:
POSTGRESQL
SQLSERVER
MYSQL
BIGQUERY
NETSUITE
ORACLE
REDSHIFT
SNOWFLAKE
SQLDW
SYNAPSE
SALESFORCE
SALESFORCE_DATA_CLOUD
TERADATA
WORKDAY_RAAS
MONGODB
Wenn Sie eine federierte JDBC-Quelle angeben, müssen Sie auch die
OPTIONS
-Klausel mit den erforderlichen Verbindungsinformationen angeben. Weitere Informationen zum Abfragen von Verbunddatenquellen finden Sie unter Abfragen von Datenbanken mit JDBC.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
.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
Tabellenklauseln
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
Für verwaltete Iceberg-Tabellen wird
PARTITIONED BY
von Azure Databricks nicht unterstützt. Verwenden Sie stattdessen liquid clustering (CLUSTER BY
), um das Datenlayout zu optimieren. Wenn Sie die Tabellendefinition für Delta-Tabellen weglassen, platziert Azure Databricks Partitionierungsspalten am Ende der Tabelle, auch wenn Sie sie weiter oben in der Spaltenspezifikation auflisten. -
Gilt für:
Databricks SQL
Databricks Runtime 13.3 und höher
Eine optionale Klausel zum Clustern einer Delta- oder Iceberg-Tabelle nach einer Teilmenge von Spalten. Siehe Verwenden von Flüssigclustering für Tabellen. Verwenden Sie
clustered_by_clause
zum Gruppieren anderer Tabellen .Bei Iceberg-Tabellen müssen Sie die Löschvektoren und Zeilen-IDs explizit deaktivieren, wenn Sie
CLUSTER BY
verwenden.
Sie können flüssige Clusterbildung nicht mit
PARTITIONED BY
kombinieren.clustered_by_clause
Gruppieren Sie optional die Tabelle oder jede Partition mithilfe einer Teilmenge der Spalten zu einer festen Anzahl von Hashbuckets.
Diese Klausel wird für Delta- oder Iceberg-Tabellen nicht unterstützt. Verwenden Sie stattdessen
CLUSTER BY
.GRUPPIERT NACH
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.
-
SORTIERT NACH
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 Zeichenfolgenliteral 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.
Bei Delta-Tabellen erbt die Tabelle ihre Konfiguration von dem
LOCATION
, wenn daten bereits in diesem Pfad vorhanden sind. Daher müssen alle angegebenenTBLPROPERTIES
,table_specification
oderPARTITIONED BY
Klauseln exakt mit den vorhandenen Daten am Delta-Speicherort übereinstimmen.Bei Iceberg-Tabellen wird die
LOCATION
Klausel nicht unterstützt. Fremde Iceberg-Tabellen werden automatisch registriert, wenn Sie einen fremden Katalog erstellen, und Sie müssen verwaltete Iceberg-Tabellen erstellen, ohne einen Speicherort anzugeben.-
Legt eine oder mehrere benutzerdefinierte Tabellenoptionen fest oder setzt diese zurück.
KOMMENTAR table_comment
Ein Zeichenfolgenliteral zum Beschreiben der Tabelle.
-
Legt optional eine oder mehrere benutzerdefinierte Eigenschaften fest.
DEFAULT COLLATION default_collation_name
Gilt für:
Databricks SQL
Databricks Runtime 16.3 und höher
Definiert die standardmäßige Sortierung, die für Folgendes verwendet werden soll:
STRING
Spalten und Felder der TabelleDEFAULT
-Ausdruck- Der Text von
CREATE TABLE AS query
CHECK
-Einschränkungen und generierte Spaltenausdrücke erfordern eine Standardsortierung vonUTF8_BINARY
.Wenn nicht angegeben, ist
UTF8_BINARY
die Standardsortierung.-
Gilt für:
Databricks SQL
Databricks Runtime 12.2 LTS und höher
Nur Unity Catalog
Fügt der Tabelle eine Zeilenfilterfunktion hinzu. Alle nachfolgenden Abfragen von dieser Tabelle erhalten eine Teilmenge der Zeilen, in denen die Funktion als boolescher Wert TRUE 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.
-
-
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);
-- 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;