Delen via


CREATE TABLE [GEBRUIK]

Van toepassing op:aangevinkt ja Databricks SQL aangevinkt ja 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 |
    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 }

Voordat Databricks Runtime 16.1 kan worden gebruikt, moet START WITH aan INCREMENT BYvoorafgaan.

Parameterwaarden

  • VERVANGEN

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

    REPLACE behoudt de tabelgeschiedenis en de verleende bevoegdheden, rijfilters en kolommaskers.

    Notitie

    Azure Databricks raadt ten zeerste aan om REPLACE te gebruiken in plaats van tabellen te verwijderen en opnieuw te maken.

  • EXTERN

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

  • ALS NIET BESTAAT

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

    IF NOT EXISTS kan niet samen bestaan met REPLACE, wat betekent dat CREATE OR REPLACE TABLE IF NOT EXISTS 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.

    Iceberg-tabellen moeten worden gemaakt in Unity Catalog. Het maken van Iceberg-tabellen in de hive_metastore tabel wordt niet ondersteund.

  • tabelspecificatie

    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-tabellen zonder eigenschap voor kolomtoewijzing ('delta.columnMapping.mode' = 'name') mogen geen spaties of de volgende tekens bevatten: , ; { } ( ) \n \t =

      Kolom-id's van AVRO tabellen 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.

      Kolom-id's van ICEBERG tabellen moeten uniek zijn, niet hoofdlettergevoelig zijn en de standaard-SQL-id-regels volgen. Vermijd het gebruik van spaties of speciale tekens, omdat ze mogelijk niet worden ondersteund door alle query-engines.

    • 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

      Indien opgegeven, accepteert NULL de kolom geen waarden. Deze component wordt alleen ondersteund voor Delta- en Iceberg-tabellen.

    • COLLATION_NAME SORTEREN

      Van toepassing op:aangevinkt als ja Databricks SQL aangevinkt als ja Databricks Runtime 16.1 en hoger

      Voor STRINGcolumn_type geeft optioneel een naam op voor de sortering die toegepast moet worden bij vergelijkings- en sorteerbewerkingen op deze kolom. De standaardsortering is de tabel default_collation_name.

    • ALTIJD GEGENEREERD ALS ( expr )

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

      De DEFAULT COLLATION van de tabel moet UTF8_BINARYzijn.

      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 | BIJ DEFAULT } AS IDENTITY [ ( [ STARTEN MET start ] [ VERHOGEN MET stap ] ) ]

      Van toepassing op:aangevinkt als ja Databricks SQL aangevinkt als ja 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 waarde toegewezen (of afnemend als step negatief is). Deze component wordt alleen ondersteund voor Delta-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 wordt 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 tabel declareert, worden gelijktijdige transacties uitgeschakeld. Gebruik alleen identiteitskolommen in gebruiksvoorbeelden waarbij gelijktijdige schrijfbewerkingen naar de doeltabel niet vereist zijn.

    • standaardwaarde default_expression

      Van toepassing op:aangevinkt ja Databricks SQL aangevinkt ja Databricks Runtime 11.3 LTS en hoger

      Definieert een DEFAULT waarde voor de kolom die wordt gebruikt voor INSERT, UPDATEen 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 tabel.

      Beperkingen worden niet ondersteund voor tabellen in de hive_metastore catalogus.

      Een controlebeperking toevoegen aan een tabelgebruik ALTER TABLE.

    • MASK-clausule

      Van toepassing op:aangevinkt ja Databricks SQL aangevinkt ja Databricks Runtime 12.2 LTS en hoger aangevinkt ja alleen Unity Catalog

      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.

      Als u een tabel vervangt en de nieuwe tabel dezelfde kolomnamen bevat als het origineel, blijven bestaande kolommaskers behouden, zelfs als ze niet expliciet opnieuw worden gedefinieerd. Dit voorkomt onbedoeld verlies van beleid voor gegevenstoegang.

    • tabelbeperking

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

      Sleutelbeperkingen worden niet ondersteund voor tabellen in de hive_metastore-catalogus.

      Een controlebeperking toevoegen aan een tabelgebruik 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
    • ICEBERG
    • JSON
    • ORC
    • PARQUET
    • TEXT

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

    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 wordt weggelaten, is de standaard 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 en row_format specificeren met de OPTIONS clausule, wat een hoofdletterongevoelige tekenreeksmap is. De option_keys zijn:

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

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

    • GEPARTITIONEERD OP

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

      Notitie

      Voor beheerde Iceberg-tabellen biedt Azure Databricks geen ondersteuning voor PARTITIONED BY. Gebruik vloeibare clustering (CLUSTER BY) om in plaats daarvan de gegevensindeling te optimaliseren. Als u voor Delta-tabellen de tabeldefinitie weglaat, plaatst Azure Databricks partitioneringskolommen aan het einde van de tabel, zelfs als u deze eerder in de kolomspecificatie opgeeft.

    • CLUSTER BY

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

      Een optionele component voor het clusteren van een Delta- of Iceberg-tabel door een subset van kolommen. Zie Liquid Clustering gebruiken voor tabellen. Als u andere tabellen wilt clusteren, gebruikt u clustered_by_clause.

      Voor Iceberg-tabellen moet u verwijderingsvectoren en rij-id's expliciet uitschakelen wanneer u gebruikt CLUSTER BY.

      Gebruik automatische liquide clustering met CLUSTER BY AUTOen Databricks kiest op intelligente wijze clusteringsleutels om de queryprestaties te optimaliseren.

      U kunt vloeistofclustering niet combineren met PARTITIONED BY.

    • geclusterd_op_clausule

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

      Deze component wordt niet ondersteund voor Delta- of Iceberg-tabellen. Gebruik in plaats daarvan CLUSTER BY.

      • 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 een partitiekolom niet ook als clusterkolom benoemen.

      • GESORTEERD OP

        Optioneel onderhoudt u een sorteervolgorde voor rijen in een bucket.

        • sort_column

          Een kolom om de bucket op te sorteren. 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 Delta-tabellen neemt de tabel de configuratie over van de LOCATION als er al gegevens op dat pad aanwezig zijn. Als gevolg hiervan moeten opgegeven TBLPROPERTIES, table_specificationof PARTITIONED BY componenten exact overeenkomen met de bestaande gegevens op de Delta-locatie.

      Voor Iceberg-tabellen wordt de LOCATION component niet ondersteund. Buitenlandse Iceberg-tabellen worden automatisch geregistreerd wanneer u een buitenlandse catalogus maakt en u moet beheerde Iceberg-tabellen maken zonder een locatie op te geven.

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

    • STANDAARDCOLLATIE default_collation_name

      Van toepassing op:aangevinkt ja Databricks SQL aangevinkt ja Databricks Runtime 16.3 en hoger

      Definieert de standaardsortering die moet worden gebruikt voor:

      • STRING kolommen en velden van de tabel
      • DEFAULT-expressie
      • De hoofdtekst van CREATE TABLE AS query

      CHECK beperkingen en gegenereerde kolomexpressies vereisen een standaardsortering van UTF8_BINARY.

      Als dit niet is opgegeven, wordt de standaardsortering afgeleid van het schema waarin de tabel wordt gemaakt.

    • WITH-componentROW FILTER

      Van toepassing op:aangevinkt ja Databricks SQL aangevinkt ja Databricks Runtime 12.2 LTS en hoger aangevinkt ja alleen Unity Catalog

      Hiermee voegt u een rijfilterfunctie toe aan de tabel. Alle volgende query's uit die tabel ontvangen een subset van de rijen waarbij de functie de booleanwaarde TRUE 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.

      Als u een tabel vervangt, blijven bestaande rijfilters behouden, zelfs als ze niet expliciet opnieuw worden gedefinieerd. Dit voorkomt onbedoeld verlies van beleid voor gegevenstoegang.

  • AS-query

    Met deze optionele component wordt de tabel gevuld met behulp van de gegevens uit query. Wanneer u een query opgeeft, moet u tevens geen table_specification specificeren. 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);

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