Delen via


CREATE TABLE [USING]

Van toepassing op: vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Definieert een beheerde of externe tabel, optioneel met behulp van een gegevensbron.

Syntaxis

{ { [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 }

Parameters

  • VERVANGEN

    Indien opgegeven, vervangt u de tabel en de inhoud ervan als deze al bestaat. Deze component wordt alleen ondersteund voor Delta Lake-tabellen.

    REPLACE behoudt de tabelgeschiedenis.

    Notitie

    Azure Databricks raadt ten zeerste aan om REPLACE Delta Lake-tabellen te verwijderen en opnieuw te maken.

  • EXTERN

    Als dit is opgegeven, maakt u een externe tabel. Bij het maken van een externe tabel moet u ook een LOCATION component opgeven. Wanneer een externe tabel wordt verwijderd, worden de bestanden op de LOCATION tabel niet verwijderd.

  • ALS DEZE NIET BESTAAT

    Als deze is opgegeven en er al een tabel met dezelfde naam bestaat, wordt de instructie genegeerd.

    IF NOT EXISTS kan niet naast elkaar bestaan REPLACE, wat betekent CREATE OR REPLACE TABLE IF NOT EXISTS dat dit niet is toegestaan.

  • table_name

    De naam van de tabel die moet worden gemaakt. De naam mag geen tijdelijke specificatie of optiesspecificatie bevatten. Als de naam niet is gekwalificeerd, wordt de tabel gemaakt in het huidige schema.

    Tabellen die zijn gemaakt in hive_metastore kunnen alleen alfanumerieke ASCII-tekens en onderstrepingstekens (INVALID_SCHEMA_OR_RELATION_NAME) bevatten.

  • table_specification

    Deze optionele component definieert de lijst met kolommen, hun typen, eigenschappen, beschrijvingen en kolombeperkingen.

    Als u geen kolommen definieert, moet u het tabelschema opgeven AS query of LOCATION.

    • column_identifier

      Een unieke naam voor de kolom.

      Kolom-id's van Delta Lake-tabellen zonder eigenschap voor kolomtoewijzing ('delta.columnMapping.mode' = 'name') mogen geen spaties of de volgende tekens bevatten: , ; { } ( ) \n \t =

      Kolom-id's van AVRO tabel moeten beginnen met een onderstrepingsteken (_) of een Unicode-letter (inclusief niet-ASCII-letters) en worden gevolgd door een combinatie van Unicode-letters, cijfers en onderstrepingstekens.

    • column_type

      Hiermee geeft u het gegevenstype van de kolom. Niet alle gegevenstypen die worden ondersteund door Azure Databricks, worden ondersteund door alle gegevensbronnen.

    • NIET NULL

      Als u de kolom opgeeft, worden geen waarden geaccepteerd NULL . Deze component wordt alleen ondersteund voor Delta Lake-tabellen.

    • GEGENEREERD ALWAYS AS ( expr )

      Wanneer u deze component opgeeft, wordt de waarde van deze kolom bepaald door de opgegeven expr.

      expr kan bestaan uit letterlijke waarden, kolom-id's in de tabel en deterministische, ingebouwde SQL-functies of -operators, met uitzondering van:

      Mag ook expr geen subquery bevatten.

    • GEGENEREERD { ALWAYS | STANDAARD } AS IDENTITY [ ( BEGINNEN MET begin ] [ INCREMENT BY step ] ) ] ]

      Van toepassing op: vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 10.4 LTS en hoger

      Definieert een identiteitskolom. Wanneer u naar de tabel schrijft en geen waarden opgeeft voor de identiteitskolom, wordt automatisch een unieke en statistisch stijgende (of afnemende) step waarde toegewezen. Deze component wordt alleen ondersteund voor Delta Lake-tabellen. Deze component kan alleen worden gebruikt voor kolommen met het gegevenstype BIGINT.

      De automatisch toegewezen waarden beginnen met start en verhogen met step. Toegewezen waarden zijn uniek, maar zijn niet gegarandeerd aaneengesloten. Beide parameters zijn optioneel en de standaardwaarde is 1. step kan niet zijn 0.

      Als de automatisch toegewezen waarden buiten het bereik van het type identiteitskolom vallen, mislukt de query.

      Wanneer ALWAYS u deze gebruikt, kunt u uw eigen waarden voor de identiteitskolom niet opgeven.

      De volgende bewerkingen worden niet ondersteund:

      • PARTITIONED BY een identiteitskolom
      • UPDATE een identiteitskolom

      Notitie

      Als u een identiteitskolom in een Delta-tabel declareren, worden gelijktijdige transacties uitgeschakeld. Gebruik alleen identiteitskolommen in gebruiksvoorbeelden waarbij gelijktijdige schrijfbewerkingen naar de doeltabel niet vereist zijn.

    • STANDAARD-default_expression

      Van toepassing op: vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 11.3 LTS en hoger

      Hiermee definieert u een DEFAULT waarde voor de kolom waarop wordt gebruikt INSERTUPDATEen MERGE ... INSERT wanneer de kolom niet is opgegeven.

      Als er geen standaardwaarde is opgegeven DEFAULT NULL , wordt toegepast op null-kolommen.

      default_expression kan bestaan uit letterlijke waarden en ingebouwde SQL-functies of -operators, met uitzondering van:

      Mag ook default_expression geen subquery bevatten.

      DEFAULTwordt ondersteund voor CSV, JSONen PARQUETORC bronnen.

    • OPMERKING column_comment

      Een letterlijke tekenreeks om de kolom te beschrijven.

    • column_constraint

      Hiermee voegt u een primaire sleutel of refererende sleutelbeperking toe aan de kolom in een Delta Lake-tabel.

      Beperkingen worden niet ondersteund voor tabellen in de hive_metastore catalogus.

      Als u een controlebeperking wilt toevoegen aan een Delta Lake-tabel, gebruikt u ALTER TABLE.

    • MASK-component

      Van toepassing op:vinkje als ja aan Alleen Databricks SQL vinkje als ja aan Databricks Runtime 12.2 LTS en hoger vinkje als ja aan dan Unity Catalog

      Belangrijk

      Deze functie is beschikbaar als openbare preview.

      Voegt een kolommaskerfunctie toe om gevoelige gegevens anoniem te maken. Alle volgende query's van die kolom ontvangen het resultaat van het evalueren van die functie ten opzichte van de kolom in plaats van de oorspronkelijke waarde van de kolom. Dit kan handig zijn voor verfijnde toegangsbeheerdoeleinden, waarbij de functie de identiteit of groepslidmaatschappen van de aanroepende gebruiker kan inspecteren om te bepalen of de waarde moet worden bewerkt.

    • table_constraint

      Voegt een informatieve primaire sleutel of informatieve refererende sleutelbeperkingen toe aan de Delta Lake-tabel.

      Sleutelbeperkingen worden niet ondersteund voor tabellen in de hive_metastore catalogus.

      Als u een controlebeperking wilt toevoegen aan een Delta Lake-tabel, gebruikt u ALTER TABLE.

  • DATA_SOURCE gebruiken

    data_source kan een bestandsindeling of een federatieve JDBC-gegevensbron zijn.

    De bestandsindeling moet een van de volgende zijn:

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

    Voor een andere bestandsindeling dan DELTA u moet ook een LOCATION opgeven, tenzij de tabelcatalogus is hive_metastore.

    De volgende federatieve JDBC-bronnen worden ondersteund:

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

    Wanneer u een federatieve JDBC-bron opgeeft, moet u ook de OPTIONS component opgeven met de benodigde verbindingsgegevens. Zie Querydatabases met JDBC voor meer informatie over het uitvoeren van query's op federatieve gegevensbronnen.

    De volgende aanvullende bestandsindelingen die voor de tabel moeten worden gebruikt, worden ondersteund in Databricks Runtime:

    • JDBC
    • LIBSVM
    • een volledig gekwalificeerde klassenaam van een aangepaste implementatie van org.apache.spark.sql.sources.DataSourceRegister.

    Als USING dit wordt weggelaten, is de standaardwaarde DELTA.

    Het volgende is van toepassing op: Databricks Runtime

    HIVE wordt ondersteund voor het maken van een Hive SerDe-tabel in Databricks Runtime. U kunt de Hive-specifieke file_format component opgeven en row_format de OPTIONS component gebruiken. Dit is een niet hoofdlettergevoelige tekenreekstoewijzing. De option_keys volgende zijn:

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

    Geef desgewenst locatie, partitionering, clustering, opties, opmerkingen en door de gebruiker gedefinieerde eigenschappen voor de nieuwe tabel op. Elke subcomponent mag slechts eenmaal worden opgegeven.

    • GEPARTITIONEERD DOOR

      Een optionele component voor het partitioneren van de tabel door een subset van kolommen.

      Notitie

      Als u geen Delta-tabel definieert, worden de partitioneringskolommen aan het einde van de tabel geplaatst, zelfs als ze eerder in de kolomspecificatie zijn gedefinieerd. Overweeg het gebruik CLUSTER BY in plaats van PARTITIONED BY voor Delta-tabellen.

    • CLUSTER OP

      Van toepassing op: vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 13.3 en hoger

      Een optionele component voor het clusteren van een Delta-tabel door een subset van kolommen. Als u andere tabellen wilt clusteren, gebruikt clustered_by_clauseu .

      Delta Lake liquid clustering kan niet worden gecombineerd met PARTITIONED BY.

    • clustered_by_clause

      U kunt de tabel of elke partitie desgewenst in een vast aantal hash-buckets clusteren met behulp van een subset van de kolommen.

      Clustering wordt niet ondersteund voor Delta Lake-tabellen.

      • GECLUSTERD OP

        Hiermee geeft u de set kolommen op waarmee elke partitie moet worden geclusterd of de tabel als er geen partitionering is opgegeven.

        • cluster_column

          Een id die verwijst naar een column_identifier in de tabel. Als u meer dan één kolom opgeeft, mogen er geen duplicaten zijn. Aangezien een clustering op partitieniveau werkt, mag u geen partitiekolom ook een clusterkolom noemen.

      • GESORTEERD OP

        Optioneel onderhoudt u een sorteervolgorde voor rijen in een bucket.

        • sort_column

          Een kolom waarop de bucket moet worden gesorteerd. De kolom mag geen partitiekolom zijn. Sorteerkolommen moeten uniek zijn.

        • ASC of DESC

          Hiermee geeft u optioneel op of sort_column wordt gesorteerd in oplopende (ASC) of aflopende (DESC) volgorde. De standaardwaarden zijn ASC.

      • IN NUM_BUCKETS BUCKETS

        Een letterlijk geheel getal dat het aantal buckets aangeeft waarin elke partitie (of de tabel als er geen partitionering is opgegeven) wordt verdeeld.

    • LOCATIEpad [ WITH ( CREDENTIAL credential_name ) ]

      Een optioneel pad naar de map waarin tabelgegevens worden opgeslagen. Dit kan een pad zijn voor gedistribueerde opslag. path moet een letterlijke tekenreeks zijn. Als u geen locatie opgeeft, wordt de tabel beschouwd als een managed table en maakt Azure Databricks een standaardtabellocatie.

      Als u een locatie opgeeft, wordt de tabel een externe tabel.

      Voor tabellen die zich niet in de hive_metastore catalogus bevinden, moet de tabel path worden beveiligd door een externe locatie , tenzij er een geldige opslagreferentie is opgegeven.

      U kunt geen externe tabellen maken op locaties die overlappen met de locatie van beheerde tabellen.

      Voor een Delta Lake-tabel wordt de tabelconfiguratie overgenomen van de LOCATION gegevens die aanwezig zijn. Daarom moeten ze, indien van toepassing TBLPROPERTIES, table_specificationof PARTITIONED BY componenten worden opgegeven voor Delta Lake-tabellen, exact overeenkomen met de locatiegegevens van Delta Lake.

    • OPTIES

      Hiermee stelt u een of meer door de gebruiker gedefinieerde tabelopties in of stelt u deze opnieuw in.

    • OPMERKING table_comment

      Een letterlijke tekenreeks om de tabel te beschrijven.

    • TBLPROPERTIES

      U kunt desgewenst een of meer door de gebruiker gedefinieerde eigenschappen instellen.

    • WITH ROW FILTER component

      Van toepassing op:vinkje als ja aan Alleen Databricks SQL vinkje als ja aan Databricks Runtime 12.2 LTS en hoger vinkje als ja aan dan Unity Catalog

      Hiermee voegt u een rijfilterfunctie toe aan de tabel. Alle volgende query's uit die tabel ontvangen een subset van de rijen waarin de functie booleaanse WAAR oplevert. Dit kan handig zijn voor verfijnde toegangsbeheerdoeleinden, waarbij de functie de identiteit of groepslidmaatschappen van de aanroepende gebruiker kan inspecteren om te bepalen of bepaalde rijen moeten worden gefilterd.

  • AS-query

    Met deze optionele component wordt de tabel gevuld met behulp van de gegevens uit query. Wanneer u een query opgeeft, moet u niet ook een table_specification. Het tabelschema is afgeleid van de query.

    Houd er rekening mee dat Azure Databricks de onderliggende gegevensbron overschrijft met de gegevens van de invoerquery om ervoor te zorgen dat de tabel precies dezelfde gegevens bevat als de invoerquery.

Voorbeelden

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

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