Freigeben über


CREATE TABLE [BENUTZEN]

Gilt für:durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert 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 WITHINCREMENT BYvorausgehen.

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 am LOCATION 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 und REPLACE können nicht gleichzeitig vorhanden sein, was bedeutet, dass CREATE OR REPLACE TABLE IF NOT EXISTS nicht zulässig ist.

  • table_name

    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 oder LOCATION angeben.

    • column_identifier

      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.

    • Spaltentyp

      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:Grünes Häkchen für „Ja“ Databricks SQL Grünes Häkchen für „Ja“ Databricks Runtime 16.1 und höher

      Für STRINGcolumn_type wird optional die Sortierung angegeben, die für Vergleichs- und Sortiervorgänge für diese Spalte angewendet werden soll. Die Standardsortierung ist die Tabelle default_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 muss UTF8_BINARY sein.

      expr kann aus Literalen, Spaltenbezeichnern innerhalb der Tabelle und deterministischen, integrierten SQL-Funktionen oder -Operatoren bestehen, mit Ausnahme von:

      Darüber hinaus darf expr keine Unterabfrage enthalten.

    • GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH Start ] [ INCREMENT BY Schritt ] ) ]

      Gilt für:Ja markiert Databricks SQL Ja markiert 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 um step 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 nicht 0 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ätsspalte
      • UPDATE: 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:mit Häkchen versehenes Ja Databricks SQL mit Häkchen versehenes Ja Databricks Runtime 11.3 LTS und höher

      Definiert einen DEFAULT-Wert für die Spalte, der für INSERT, UPDATE und MERGE ... INSERTverwendet 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:

      Darüber hinaus darf default_expression keine Unterabfrage enthalten.

      DEFAULT wird für CSV, JSON, PARQUET und ORC Quellen unterstützt.

    • ANMERKUNG column_comment

      Ein Zeichenfolgenliteral zum Beschreiben der Spalte.

    • column_constraint

      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.

    • MASK-Klausel

      Gilt für:Grünes Häkchen für „Ja“ Databricks SQL Grünes Häkchen für „Ja“ Databricks Runtime 12.2 LTS und höher Grünes Häkchen für „Ja“ 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.

    • Tabellenbeschränkung

      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 oder ICEBERG müssen Sie auch ein LOCATION angeben, es sei denn, der Tabellenkatalog ist hive_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 Standardwert DELTA.

    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-spezifische file_format und row_format mithilfe der OPTIONS-Klausel angeben, einer Zeichenfolgenzuordnung, bei der die Groß-/Kleinschreibung nicht beachtet wird. Die option_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.

    • PARTITIONED BY

      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.

    • CLUSTER BY

      Gilt für: Grünes Häkchen für „Ja“ Databricks SQL Grünes Häkchen für „Ja“ 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_clausezum 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.

        • cluster_column

          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 sind ASC.

      • 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 als managed 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 der path 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 angegebenen TBLPROPERTIES, table_specificationoder PARTITIONED 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.

    • OPTIONEN

      Legt eine oder mehrere benutzerdefinierte Tabellenoptionen fest oder setzt diese zurück.

    • KOMMENTAR table_comment

      Ein Zeichenfolgenliteral zum Beschreiben der Tabelle.

    • TBLPROPERTIES

      Legt optional eine oder mehrere benutzerdefinierte Eigenschaften fest.

    • DEFAULT COLLATION default_collation_name

      Gilt für:ja markiert Databricks SQL ja markiert Databricks Runtime 16.3 und höher

      Definiert die standardmäßige Sortierung, die für Folgendes verwendet werden soll:

      • STRING Spalten und Felder der Tabelle
      • DEFAULT-Ausdruck
      • Der Text von CREATE TABLE AS query

      CHECK-Einschränkungen und generierte Spaltenausdrücke erfordern eine Standardsortierung von UTF8_BINARY.

      Wenn nicht angegeben, ist UTF8_BINARY die Standardsortierung.

    • WITHROW FILTER-Klausel

      Gilt für:Grünes Häkchen für „Ja“ Databricks SQL Grünes Häkchen für „Ja“ Databricks Runtime 12.2 LTS und höher Grünes Häkchen für „Ja“ 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.

  • AS-Abfrage

    Diese optionale Klausel füllt die Tabelle mithilfe der Daten aus query auf. Wenn Sie eine query angeben, dürfen Sie nicht auch eine table_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;