Dela via


CREATE TABLE [ANVÄNDER]

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime

Definierar en hanterad eller extern tabell, om du vill använda en datakälla.

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 }

Innan Databricks Runtime 16.1 måste START WITH föregå INCREMENT BY.

Parameterar

  • ERSÄTTA

    Om det anges ersätter du tabellen och dess innehåll om den redan finns. Den här satsen stöds endast för Delta- och Apache Iceberg-tabeller.

    REPLACE bevarar tabellhistorik samt beviljade rättigheter.

    Anteckning

    Azure Databricks rekommenderar starkt att du använder REPLACE i stället för att släppa och återskapa tabeller.

  • EXTERN

    Om det anges skapar du en extern tabell. När du skapar en extern tabell måste du också ange en LOCATION sats. När en extern tabell tas bort tas inte filerna LOCATION bort.

  • OM DET INTE FINNS

    Om det anges och det redan finns en tabell med samma namn, ignoreras meningen.

    IF NOT EXISTS kan inte samexistera med REPLACE, vilket innebär att CREATE OR REPLACE TABLE IF NOT EXISTS inte tillåts.

  • table_name

    Namnet på tabellen som ska skapas. Namnet får inte innehålla en temporal specifikation eller alternativspecifikation. Om namnet inte är kvalificerat skapas tabellen i det aktuella schemat.

    Tabeller som skapas i hive_metastore får bara innehålla alfanumeriska ASCII-tecken och understreck (INVALID_SCHEMA_OR_RELATION_NAME).

    Isbergstabeller måste skapas i Unity Catalog. Det är inte möjligt att skapa isbergstabeller i hive_metastore.

  • tabellspecifikation

    Den här valfria satsen definierar listan över kolumner, deras typer, egenskaper, beskrivningar och kolumnbegränsningar.

    Om du inte definierar kolumner i tabellschemat måste du ange antingen AS query eller LOCATION.

    • column_identifier

      Ett unikt namn för kolumnen.

      Kolumnidentifierare för Delta-tabeller utan kolumnmappningsegenskap ('delta.columnMapping.mode' = 'name') får inte innehålla blanksteg eller följande tecken: , ; { } ( ) \n \t = .

      Kolumnidentifierare för AVRO tabeller måste börja med ett understreck (_) eller en Unicode-bokstav (inklusive icke-ASCII-bokstäver) och följas av en kombination av Unicode-bokstäver, siffror och understreck.

      Kolumnidentifierare för ICEBERG tabeller måste vara unika, skiftlägesokänsliga och följa standardreglerna för SQL-identifierare. Undvik att använda blanksteg eller specialtecken eftersom de kanske inte stöds av alla sökmotorer.

    • kolumntyp

      Anger kolumnens datatyp. Alla datatyper som stöds av Azure Databricks stöds inte av alla datakällor.

    • INTE NULL

      Om det anges accepterar NULL kolumnen inte värden. Den här satsen stöds endast för Delta- och Iceberg-tabeller.

    • KOLLATIONERA kollationsnamn

      gäller för:kontrollera markerat ja Databricks SQL kontrollera markerat ja Databricks Runtime 16.1 och senare

      För STRINGcolumn_type kan du välja att namnge sorteringen som ska användas för jämförelse- och sorteringsåtgärder på den här kolumnen. Standardsortering är tabellen default_collation_name.

    • GENERERAS ALLTID SOM ( uttr )

      När du anger den här satsen bestäms värdet för den här kolumnen av den angivna expr.

      Tabellens DEFAULT COLLATION måste vara UTF8_BINARY.

      expr kan bestå av literaler, kolumnidentifierare i tabellen och deterministiska, inbyggda SQL-funktioner eller operatorer förutom:

      Får inte heller expr innehålla någon underfråga.

    • GENERERAD { ALLTID | SOM STANDARDVÄRDE } SOM IDENTIFIERING [ ( [ STARTA MED start ] [ ÖKA MED steg ] ) ]

      Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 10.4 LTS och senare

      Definierar en identitetskolumn. När du skriver till tabellen och inte anger värden för identitetskolumnen, kommer den automatiskt att tilldelas ett unikt och statistiskt ökat värde (eller minskat om step är negativt). Den här satsen stöds endast för Delta-tabeller. Den här satsen kan endast användas för kolumner med BIGINT-datatyp.

      De automatiskt tilldelade värdena börjar med start och ökar med step. Tilldelade värden är unika men garanteras inte vara sammanhängande. Båda parametrarna är valfria och standardvärdet är 1. step kan inte vara 0.

      Om de automatiskt tilldelade värdena ligger utanför intervallet för identitetskolumntypen misslyckas frågan.

      När ALWAYS används kan du inte ange egna värden för identitetskolumnen.

      Följande åtgärder stöds inte:

      • PARTITIONED BY en identitetskolumn
      • UPDATE en identitetskolumn

      Anteckning

      Om du deklarerar en identitetskolumn i en tabell inaktiveras samtidiga transaktioner. Använd endast identitetskolumner i användningsfall där samtidiga skrivningar till måltabellen inte krävs.

    • STANDARD default_expression

      Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 11.3 LTS och senare

      Definierar ett DEFAULT värde för kolumnen som används på INSERT, UPDATEoch MERGE ... INSERT när kolumnen inte har angetts.

      Om inget standardvärde anges DEFAULT NULL tillämpas för nullbara kolumner.

      default_expression kan bestå av literaler och inbyggda SQL-funktioner eller -operatorer förutom:

      Får inte heller default_expression innehålla någon underfråga.

      DEFAULT stöds för CSV, JSON, PARQUEToch ORC källor.

    • KOMMENTAR column_comment

      En textsträng som beskriver kolumnen.

    • column_constraint

      Lägger till en primärnyckelbegränsning eller en utländsk nyckelbegränsning i kolumnen i en tabell.

      Begränsningar stöds inte för tabeller i hive_metastore katalogen.

      Om du vill lägga till en kontrollbegränsning i en tabell använder du ALTER TABLE.

    • MASK-villkor

      gäller för:markerad som ja Databricks SQL markerad som ja Databricks Runtime 12.2 LTS och senare markerad som ja endast Unity Catalog

      Viktigt!

      Den här funktionen finns som allmänt tillgänglig förhandsversion.

      Lägger till en kolumnmaskfunktion för att anonymisera känsliga data. Alla efterföljande frågor från den kolumnen får resultatet av utvärderingen av funktionen över kolumnen i stället för kolumnens ursprungliga värde. Detta kan vara användbart för detaljerad åtkomstkontroll där funktionen kan kontrollera identitets- eller gruppmedlemskapen för den anropande användaren för att avgöra om värdet ska redigeras.

    • tabellbegränsning

      Lägger till antingen en informerande primärnyckel eller en informerande främmande nyckelbegränsning i tabellen.

      Viktiga begränsningar stöds inte för tabeller i hive_metastore katalogen.

      Om du vill lägga till en kontrollbegränsning i en tabell använder du ALTER TABLE.

  • ANVÄNDNING AV data_source

    data_source kan vara antingen ett filformat eller en federerad JDBC-datakälla.

    Filformatet måste vara något av följande:

    • AVRO
    • BINARYFILE
    • CSV
    • DELTA
    • ICEBERG
    • JSON
    • ORC
    • PARQUET
    • TEXT

    För varje annat filformat än DELTA eller ICEBERG måste du ange en LOCATION, såvida inte tabellkatalogen är hive_metastore.

    Följande federerade JDBC-källor stöds:

    • POSTGRESQL
    • SQLSERVER
    • MYSQL
    • BIGQUERY
    • NETSUITE
    • ORACLE
    • REDSHIFT
    • SNOWFLAKE
    • SQLDW
    • SYNAPSE
    • SALESFORCE
    • SALESFORCE_DATA_CLOUD
    • TERADATA
    • WORKDAY_RAAS
    • MONGODB

    När du anger en federerad JDBC-källa måste du också ange OPTIONS satsen med nödvändig anslutningsinformation. Mer information om hur du frågar federerade datakällor finns i Fråga databaser med JDBC .

    Följande ytterligare filformat som ska användas för tabellen stöds i Databricks Runtime:

    • JDBC
    • LIBSVM
    • ett fullständigt kvalificerat klassnamn för en anpassad implementering av org.apache.spark.sql.sources.DataSourceRegister.

    Om USING utelämnas är DELTAstandardvärdet .

    Följande gäller för: Databricks Runtime

    HIVE stöds för att skapa en Hive SerDe-tabell i Databricks Runtime. Du kan ange den Hive-specifika file_format och row_format genom att använda OPTIONS-satsen, som är en skiftlägesokänslig strängkarta. De option_keys är:

    • FILEFORMAT
    • INPUTFORMAT
    • OUTPUTFORMAT
    • SERDE
    • FIELDDELIM
    • ESCAPEDELIM
    • MAPKEYDELIM
    • LINEDELIM
  • tabellklausuler

    Du kan också ange egenskaper för plats, partitionering, klustring, alternativ, kommentarer och användardefinierade egenskaper för den nya tabellen. Varje undersats kan endast anges en gång.

    • PARTITIONERAD MED

      En valfri sats för att partitionera tabellen med en delmängd av kolumner.

      Anteckning

      För hanterade Iceberg-tabeller stöder Azure Databricks inte PARTITIONED BY. Använd flytande klustring (CLUSTER BY) för att optimera datalayouten i stället. Om du utelämnar tabelldefinitionen för Delta-tabeller placerar Azure Databricks partitioneringskolumner i slutet av tabellen, även om du listar dem tidigare i kolumnspecifikationen.

    • CLUSTER BY

      Gäller för: kontrollmarkerad ja Databricks SQL kontrollmarkerad ja Databricks Runtime 13.3 och senare

      Ett valfritt villkor för att klustra en Delta- eller Iceberg-tabell med en delmängd av kolumner. Se Använda flytande klustring för tabeller. Om du vill klustra andra tabeller använder du clustered_by_clause.

      För Isbergstabeller måste du uttryckligen inaktivera borttagningsvektorer och rad-ID:t när du använder CLUSTER BY.

    Du kan inte kombinera flytande klustring med PARTITIONED BY.

    • clustered_by_clause

      Du kan också gruppera tabellen eller varje partition till ett fast antal hash-bucketar med hjälp av en delmängd av kolumnerna.

      Den här satsen stöds inte för Delta- eller Iceberg-tabeller. Använd CLUSTER BY i stället.

      • KLUSTRAD AV

        Anger vilken uppsättning kolumner som varje partition ska klustras med, eller tabellen om ingen partitionering har angetts.

        • cluster_column

          En identifierare som refererar till en column_identifier i tabellen. Om du anger fler än en kolumn får det inte finnas några dubbletter. Eftersom en klustring fungerar på partitionsnivå får du inte namnge en partitionskolumn även som en klusterkolumn.

      • SORTERAT EFTER

        Du kan också behålla en sorteringsordning för rader i en bucket.

        • sort_column

          En kolumn att sortera bucketen efter. Kolumnen får inte vara partitionskolumn. Sorteringskolumner måste vara unika.

        • ASC eller DESC

          Du kan också ange om sort_column sorteras i stigande (ASC) eller fallande (DESC) ordning. Standardvärdena är ASC.

      • IN I NUM_BUCKETS BUCKETS

        En INTEGER-literal som anger antalet bucketar som varje partition (eller tabellen om ingen partitionering anges) delas upp i.

    • PLATS-sökväg [ MED ( CREDENTIAL credential_name ) ]

      En valfri sökväg till katalogen där tabelldata lagras, vilket kan vara en sökväg för distribuerad lagring. path måste vara en STRING-literal. Om du inte anger någon plats betraktas tabellen som en managed table och Azure Databricks skapar en standardtabellplats.

      Om du anger en plats blir tabellen en extern tabell.

      För tabeller som inte finns i hive_metastore katalogen måste tabellen path skyddas av en extern plats om inte en giltig lagringsautentiseringsuppgift har angetts.

      Du kan inte skapa externa tabeller på platser som överlappar platsen för hanterade tabeller.

      För Delta-tabeller ärver tabellen sin konfiguration från LOCATION om data redan finns på den sökvägen. Därför måste alla angivna TBLPROPERTIES, table_specificationeller PARTITIONED BY -satser exakt matcha befintliga data på Delta-platsen.

      För Iceberg-tabeller stöds inte LOCATION-villkoret. Utländska isbergstabeller registreras automatiskt när du skapar en utländsk katalog, och du måste skapa hanterade tabeller utan att ange någon plats.

    • ALTERNATIV

      Anger eller återställer ett eller flera användardefinierade tabellalternativ.

    • KOMMENTAR table_comment

      En textsträng som beskriver tabellen.

    • TBLPROPERTIES

      Du kan också ange en eller flera användardefinierade egenskaper.

    • STANDARDSORTERING default_collation_name

      Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime 16.3 och senare

      Definierar standardsortering som ska användas för:

      • STRING kolumner och fält i tabellen
      • DEFAULT uttryck
      • Kroppen av CREATE TABLE AS query

      CHECK begränsningar och genererade kolumnuttryck kräver en standardsortering av UTF8_BINARY.

      Om det inte anges är standardsortering UTF8_BINARY.

    • MED ROW FILTER-klausul

      gäller för:markerad som ja Databricks SQL markerad som ja Databricks Runtime 12.2 LTS och senare markerad som ja endast Unity Catalog

      Lägger till en radfilterfunktion i tabellen. Alla efterföljande frågor från tabellen får en delmängd av raderna där funktionen utvärderas till boolesk TRUE. Detta kan vara användbart för detaljerad åtkomstkontroll där funktionen kan kontrollera identitets- eller gruppmedlemskapen för den anropande användaren för att avgöra om vissa rader ska filtreras.

  • AS-fråga

    Den här valfria satsen fyller i tabellen med hjälp av data från query. När du anger en query får du inte också ange en table_specification. Tabellschemat härleds från frågan.

    Observera att Azure Databricks skriver över den underliggande datakällan med data i indatafrågan för att se till att tabellen som skapas innehåller exakt samma data som indatafrågan.

Exempel

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