CREATE TABLE [USING]
Van toepassing op: Databricks SQL 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 deLOCATION
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 bestaanREPLACE
, wat betekentCREATE OR REPLACE TABLE IF NOT EXISTS
dat dit niet is toegestaan.-
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
ofLOCATION
.-
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. -
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:- Statistische functies
- Analytische vensterfuncties
- Classificatievensterfuncties
- Generatorfuncties met tabelwaarde
Mag ook
expr
geen subquery bevatten.GEGENEREERD { ALWAYS | STANDAARD } AS IDENTITY [ ( BEGINNEN MET begin ] [ INCREMENT BY step ] ) ] ]
Van toepassing op: Databricks SQL 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 metstep
. Toegewezen waarden zijn uniek, maar zijn niet gegarandeerd aaneengesloten. Beide parameters zijn optioneel en de standaardwaarde is 1.step
kan niet zijn0
.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 identiteitskolomUPDATE
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: Databricks SQL Databricks Runtime 11.3 LTS en hoger
Hiermee definieert u een
DEFAULT
waarde voor de kolom waarop wordt gebruiktINSERT
UPDATE
enMERGE ... 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:- Statistische functies
- Analytische vensterfuncties
- Classificatievensterfuncties
- Generatorfuncties met tabelwaarde
Mag ook
default_expression
geen subquery bevatten.DEFAULT
wordt ondersteund voorCSV
,JSON
enPARQUET
ORC
bronnen.OPMERKING column_comment
Een letterlijke tekenreeks om de kolom te beschrijven.
-
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.
-
Van toepassing op: Alleen Databricks SQL Databricks Runtime 12.2 LTS en hoger 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.
-
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 eenLOCATION
opgeven, tenzij de tabelcatalogus ishive_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 standaardwaardeDELTA
.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-specifiekefile_format
component opgeven enrow_format
deOPTIONS
component gebruiken. Dit is een niet hoofdlettergevoelige tekenreekstoewijzing. Deoption_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.
-
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 vanPARTITIONED BY
voor Delta-tabellen. -
Van toepassing op: Databricks SQL 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_clause
u .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.
-
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 zijnASC
.
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 eenmanaged 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 tabelpath
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 toepassingTBLPROPERTIES
,table_specification
ofPARTITIONED BY
componenten worden opgegeven voor Delta Lake-tabellen, exact overeenkomen met de locatiegegevens van Delta Lake.-
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.
-
U kunt desgewenst een of meer door de gebruiker gedefinieerde eigenschappen instellen.
WITH ROW FILTER component
Van toepassing op: Alleen Databricks SQL Databricks Runtime 12.2 LTS en hoger 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.
-
-
Met deze optionele component wordt de tabel gevuld met behulp van de gegevens uit
query
. Wanneer u eenquery
opgeeft, moet u niet ook eentable_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;