CREATE TABLE [USING]

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

    • column_identifier

      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.

    • column_type

      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:

      Darüber hinaus darf expr keine Unterabfrage enthalten.

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

      Gilt für: Häkchen ja Databricks SQL Häkchen 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 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 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: Häkchen ja Databricks SQL Häkchen 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 Nullwerte zulassende 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.

    • COMMENT column_comment

      Ein Zeichenfolgenliteral zum Beschreiben der Spalte.

    • column_constraint

      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.

    • MASK-Klausel

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

    • table_constraint

      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 Standardwert DELTA.

    Für andere data_source als DELTA müssen Sie auch einen LOCATION angeben, es sei denn, der Tabellenkatalog ist hive_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-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
  • 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.

    • PARTITIONED BY

      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 von PARTITIONED BY.

    • CLUSTER BY

      Gilt für: Häkchen ja Databricks SQL Häkchen gesetzt ja 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.

        • 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.

      • 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 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 STRING-Literal 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.

      Eine Delta Lake-Tabelle erbt die Tabellenkonfiguration von LOCATION, wenn Daten vorhanden sind. Wenn also TBLPROPERTIES-, table_specification- oder PARTITIONED BY-Klauseln für Delta Lake-Tabellen angegeben werden, müssen sie genau mit den Delta Lake-Speicherortdaten übereinstimmen.

    • OPTIONS

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

    • COMMENT table_comment

      Ein Zeichenfolgenliteral zum Beschreiben der Tabelle.

    • TBLPROPERTIES

      Legt optional eine oder mehrere benutzerdefinierte Eigenschaften fest.

    • WITH ROW FILTER-Klausel

      Gilt für: Häkchen ja Databricks SQL durch Häkchen mit „Ja“ markiert Databricks Runtime 12.2 LTS und höher Häkchen gesetzt ja 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 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);

-- 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));