SKAPA TABELL [ANVÄNDA]
Gäller för: Databricks SQL 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 |
WITH { ROW FILTER clause } } [...]
clustered_by_clause
{ CLUSTERED BY ( cluster_column [, ...] )
[ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
INTO num_buckets BUCKETS }
Parametrar
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 Lake-tabeller.
REPLACE
bevarar tabellhistoriken.Kommentar
Azure Databricks rekommenderar starkt att du använder
REPLACE
i stället för att släppa och återskapa Delta Lake-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 filernaLOCATION
bort.OM INTE FINNS
Om det anges och det redan finns en tabell med samma namn ignoreras -instruktionen.
IF NOT EXISTS
kan inte samexistera medREPLACE
, vilket innebär attCREATE OR REPLACE TABLE IF NOT EXISTS
inte tillåts.-
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). table_specification
Den här valfria satsen definierar listan över kolumner, deras typer, egenskaper, beskrivningar och kolumnbegränsningar.
Om du inte definierar kolumner måste du ange antingen
AS query
ellerLOCATION
.-
Ett unikt namn för kolumnen.
Kolumnidentifierare för Delta Lake-tabeller utan kolumnmappningsegenskap (
'delta.columnMapping.mode' = 'name'
) får inte innehålla blanksteg eller följande tecken:, ; { } ( ) \n \t =
.Kolumnidentifierare för
AVRO
tabellen 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. -
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 Lake-tabeller.KOLLATIONERA kollationsnamn
gäller för: Databricks Runtime 16.1 och senare
För
STRING
column_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. Standardsorteringen ärUTF8_BINARY
.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
.expr
kan bestå av literaler, kolumnidentifierare i tabellen och deterministiska, inbyggda SQL-funktioner eller operatorer förutom:- Mängdfunktioner
- Analysfönsterfunktioner
- Funktioner för rangordningsfönster
- Generatorfunktioner för tabellvärde
Får inte heller
expr
innehålla någon underfråga.GENERERAD { ALWAYS | SOM STANDARD } SOM IDENTITET [ ( [ BÖRJA MED start ] [ STEGVISA STEG ] ) ] ]
Gäller för: Databricks SQL Databricks Runtime 10.4 LTS och senare
Definierar en identitetskolumn. När du skriver till tabellen och inte anger värden för identitetskolumnen tilldelas den automatiskt ett unikt och statistiskt ökande (eller minskande om
step
det är negativt). Den här satsen stöds endast för Delta Lake-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 medstep
. Tilldelade värden är unika men garanteras inte vara sammanhängande. Båda parametrarna är valfria och standardvärdet är 1.step
kan inte vara0
.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
Kommentar
Om du deklarerar en identitetskolumn i en Delta-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: Databricks SQL Databricks Runtime 11.3 LTS och senare
Definierar ett
DEFAULT
värde för kolumnen som används påINSERT
,UPDATE
ochMERGE ... 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:- Mängdfunktioner
- Analysfönsterfunktioner
- Funktioner för rangordningsfönster
- Generatorfunktioner för tabellvärde
Får inte heller
default_expression
innehålla någon underfråga.DEFAULT
stöds förCSV
,JSON
,PARQUET
ochORC
källor.KOMMENTAR column_comment
En strängliteral som beskriver kolumnen.
-
Lägger till en primärnyckel eller sekundärnyckelbegränsning i kolumnen i en Delta Lake-tabell.
Begränsningar stöds inte för tabeller i
hive_metastore
katalogen.Om du vill lägga till en kontrollbegränsning i en Delta Lake-tabell använder du ALTER TABLE.
-
Gäller endast för: Databricks SQL Databricks Runtime 12.2 LTS och senare i 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.
-
Lägger till en informations primärnyckel eller informationsbegränsningar för sekundärnyckel i Delta Lake-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 Delta Lake-tabell använder du ALTER TABLE.
-
ANVÄNDA 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
JSON
ORC
PARQUET
TEXT
För alla andra filformat än
DELTA
måste du också ange ettLOCATION
om inte tabellkatalogen ärhive_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 ärDELTA
standardvä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 Hive-specifikfile_format
ochrow_format
användaOPTIONS
-satsen, som är en skiftlägeskänslig strängkarta. Äroption_keys
:FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
table_clauses
Du kan också ange egenskaper för plats, partitionering, klustring, alternativ, kommentarer och användardefinierade egenskaper för den nya tabellen. Varje undersats kan bara anges en gång.
-
En valfri sats för att partitioneras tabellen med en delmängd kolumner.
Kommentar
Om du inte definierar en Delta-tabell placeras partitioneringskolumner i slutet av tabellen, även om de definieras tidigare i kolumnspecifikationen. Överväg att använda
CLUSTER BY
i ställetPARTITIONED BY
för för Delta-tabeller. -
Gäller för: Databricks SQL Databricks Runtime 13.3 och senare
En valfri sats för att klustra en Delta-tabell med en delmängd kolumner. Om du vill klustra andra tabeller använder du
clustered_by_clause
.Delta Lake liquid clustering kan inte kombineras 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.
Klustring stöds inte för Delta Lake-tabeller.
KLUSTRAD AV
Anger vilken uppsättning kolumner som varje partition ska klustras med, eller tabellen om ingen partitionering har angetts.
-
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 ärASC
.
IN I NUM_BUCKETS BUCKETS
En INTEGER-literal som anger antalet bucketar som varje partition (eller tabellen om ingen partitionering anges) delas upp i.
PLATSsö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 enmanaged 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 tabellenpath
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 en Delta Lake-tabell ärvs tabellkonfigurationen
LOCATION
från om data finns. Om någraTBLPROPERTIES
,table_specification
ellerPARTITIONED BY
-satser anges för Delta Lake-tabeller måste de därför exakt matcha Platsdata för Delta Lake.-
Anger eller återställer ett eller flera användardefinierade tabellalternativ.
KOMMENTAR table_comment
En strängliteral som beskriver tabellen.
-
Du kan också ange en eller flera användardefinierade egenskaper.
MED ROW FILTER-sats
Gäller endast för: Databricks SQL Databricks Runtime 12.2 LTS och senare i 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.
-
-
Den här valfria satsen fyller i tabellen med hjälp av data från
query
. När du anger enquery
får du inte också ange entable_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);
-- 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 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;