CREATE TABLE [USING]
Si applica a: Databricks SQL Databricks Runtime
Definisce una tabella gestita o esterna, facoltativamente usando un'origine dati.
Sintassi
{ { [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 }
Parametri
REPLACE
Se specificato sostituisce la tabella e il relativo contenuto, se già esistente. Questa clausola è supportata solo per le tabelle Delta Lake.
REPLACE
mantiene la cronologia delle tabelle.Nota
Azure Databricks consiglia vivamente di usare
REPLACE
invece di eliminare e creare nuovamente tabelle Delta Lake.EXTERNAL
Se specificato, crea una tabella esterna. Quando si crea una tabella esterna, è necessario specificare anche una
LOCATION
clausola . Quando una tabella esterna viene eliminata, i file inLOCATION
corrispondenza di non verranno eliminati.SE NON ESISTE
Se specificato e esiste già una tabella con lo stesso nome, l'istruzione viene ignorata.
IF NOT EXISTS
non può coesistere conREPLACE
, il che significaCREATE OR REPLACE TABLE IF NOT EXISTS
che non è consentito.-
Nome della tabella da creare. Il nome non deve includere una specifica temporale. Se il nome non è qualificato, la tabella viene creata nello schema corrente.
Le tabelle create in
hive_metastore
possono contenere solo caratteri ASCII alfanumerici e caratteri di sottolineatura (INVALID_SCHEMA_OR_RELATION_NAME). table_specification
Questa clausola facoltativa definisce l'elenco di colonne, i relativi tipi, proprietà, descrizioni e vincoli di colonna.
Se non si definiscono colonne dello schema della tabella, è necessario specificare
AS query
oLOCATION
.-
Nome univoco per la colonna.
Gli identificatori di colonna delle tabelle Delta Lake senza proprietà di mapping delle colonne (
'delta.columnMapping.mode' = 'name'
) non devono contenere i caratteri ' (spazio), ',', ';', '{', '}', '(', ')'. 'n', 't' e '='.Gli identificatori di colonna della
AVRO
tabella devono iniziare con '' o una lettera Unicode (incluse lettere non ASCII) e seguire una combinazione di lettere Unicode e cifre. -
Specifica il tipo di dati della colonna. Non tutti i tipi di dati supportati da Azure Databricks sono supportati da tutte le origini dati.
NOT NULL
Se specificata, la colonna non accetterà
NULL
valori. Questa clausola è supportata solo per le tabelle Delta Lake.GENERATED ALWAYS AS ( expr )
Quando si specifica questa clausola, il valore di questa colonna viene determinato dall'oggetto specificato
expr
.expr
può essere composto da valori letterali, identificatori di colonna all'interno della tabella e funzioni SQL predefinite o operatori, ad eccezione di:- Funzioni di aggregazione
- Funzioni della finestra analitica
- Funzioni della finestra di classificazione
- Funzioni generatore con valori di tabella
Inoltre
expr
, non deve contenere alcuna sottoquery.GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ]
Si applica a: Databricks SQL Databricks Runtime 10.4 LTS e versioni successive
Definisce una colonna Identity. Quando si scrive nella tabella e non si specificano valori per la colonna Identity, verrà assegnato automaticamente un valore univoco e statisticamente crescente (o decrescente se
step
è negativo). Questa clausola è supportata solo per le tabelle Delta Lake. Questa clausola può essere usata solo per le colonne con tipo di dati BIGINT.I valori assegnati automaticamente iniziano con
start
e incrementa distep
. I valori assegnati sono univoci, ma non sono garantiti per essere contigui. Entrambi i parametri sono facoltativi e il valore predefinito è 1.step
non può essere0
.Se i valori assegnati automaticamente superano l'intervallo del tipo di colonna Identity, la query avrà esito negativo.
Quando
ALWAYS
viene usato, non è possibile specificare valori personalizzati per la colonna Identity.Le operazioni non supportate sono elencate di seguito:
PARTITIONED BY
una colonna IdentityUPDATE
una colonna Identity
Nota
La dichiarazione di una colonna Identity in una tabella Delta disabilita le transazioni simultanee. Usare solo le colonne Identity nei casi d'uso in cui le scritture simultanee nella tabella di destinazione non sono necessarie.
DEFAULT default_expression
Si applica a: Databricks SQL Databricks Runtime 11.3 LTS e versioni successive
Definisce un
DEFAULT
valore per la colonna utilizzata inINSERT
,UPDATE
eMERGE ... INSERT
quando la colonna non viene specificata.Se non viene specificato
DEFAULT NULL
alcun valore predefinito per le colonne nullable.default_expression
può essere composto da valori letterali e funzioni o operatori SQL predefiniti, ad eccezione di:- Funzioni di aggregazione
- Funzioni della finestra analitica
- Funzioni della finestra di classificazione
- Funzioni generatore con valori di tabella
Inoltre
default_expression
, non deve contenere alcuna sottoquery.DEFAULT
è supportato perCSV
le origini ,JSON
PARQUET
, eORC
.COMMENT column_comment
Valore letterale stringa per descrivere la colonna.
-
Importante
Questa funzionalità è disponibile in anteprima pubblica.
Aggiunge una chiave primaria o un vincolo di chiave esterna alla colonna in una tabella Delta Lake.
I vincoli non sono supportati per le tabelle nel
hive_metastore
catalogo.Per aggiungere un vincolo CHECK a una tabella Delta Lake, utilizzare ALTER TABLE.
-
Si applica a: Solo Databricks SQL Databricks Runtime 12.2 LTS e versioni successive al catalogo Unity
Importante
Questa funzionalità è disponibile in anteprima pubblica.
Aggiunge una funzione maschera di colonna per rendere anonimi i dati sensibili. Tutte le query future da tale colonna riceveranno il risultato della valutazione di tale funzione sulla colonna al posto del valore originale della colonna. Ciò può essere utile per scopi di controllo di accesso con granularità fine, in cui la funzione può esaminare l'identità e/o le appartenenze a gruppi dell'utente che richiama per decidere se redigire il valore.
-
Aggiunge una chiave primaria informativa o vincoli di chiave esterna informativa alla tabella Delta Lake.
I vincoli di chiave non sono supportati per le tabelle nel
hive_metastore
catalogo.Per aggiungere un vincolo CHECK a una tabella Delta Lake, utilizzare ALTER TABLE.
-
USING data_source
Formato di file da utilizzare per la tabella.
data_source
deve essere uno dei seguenti:AVRO
BINARYFILE
CSV
DELTA
JSON
ORC
PARQUET
TEXT
I formati di file aggiuntivi da usare per la tabella sono supportati in Databricks Runtime:
JDBC
LIBSVM
- Nome completo della classe di un'implementazione personalizzata di
org.apache.spark.sql.sources.DataSourceRegister
.
Se
USING
viene omesso, il valore predefinito èDELTA
.Per qualsiasi
data_source
oggetto diversoDELTA
da è necessario specificare anche un oggettoLOCATION
a meno che il catalogo delle tabelle non siahive_metastore
.Il codice seguente si applica a: Databricks Runtime
HIVE
è supportato per creare una tabella SerDe Hive in Databricks Runtime. È possibile specificare hive-specificfile_format
erow_format
usare laOPTIONS
clausola , ovvero una mappa di stringhe senza distinzione tra maiuscole e minuscole. Ioption_keys
sono:FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
table_clauses
Facoltativamente, specificare la posizione, il partizionamento, il clustering, le opzioni, i commenti e le proprietà definite dall'utente per la nuova tabella. Ogni clausola secondaria può essere specificata una sola volta.
-
Clausola facoltativa per partizionare la tabella in base a un subset di colonne.
Nota
Se non si definisce una tabella Delta, le colonne di partizionamento vengono posizionate alla fine della tabella, anche se sono definite in precedenza nella specifica della colonna. È consigliabile usare
CLUSTER BY
anzichéPARTITIONED BY
per le tabelle Delta. -
Si applica a: Databricks SQL Databricks Runtime 13.3 e versioni successive
Clausola facoltativa per raggruppare una tabella Delta in base a un subset di colonne. Per raggruppare altre tabelle, usare
clustered_by_clause
.Il clustering liquido Delta Lake non può essere combinato con
PARTITIONED BY
. clustered_by_clause
Facoltativamente, raggruppare la tabella o ogni partizione in un numero fisso di bucket hash usando un subset delle colonne.
Il clustering non è supportato per le tabelle Delta Lake.
CLUSTERED BY
Specifica il set di colonne in base al quale raggruppare ogni partizione o la tabella se non viene specificato alcun partizionamento.
-
Identificatore che fa riferimento a nella
column_identifier
tabella. Se si specificano più colonne non devono essere presenti duplicati. Poiché un clustering opera a livello di partizione, non è necessario assegnare un nome a una colonna di partizione anche come colonna del cluster.
-
FILTRATE
Facoltativamente, mantiene un ordinamento per le righe in un bucket.
sort_column
Colonna per cui ordinare il bucket. La colonna non deve essere una colonna di partizione. Le colonne di ordinamento devono essere univoce.
ASC o DESC
Facoltativamente, specifica se
sort_column
è ordinato in ordine crescente (ASC
) o decrescente (DESC
). I valori predefiniti sonoASC
.
INTO NUM_BUCKETS BUCKET
Valore letterale INTEGER che specifica il numero di bucket in cui ogni partizione (o la tabella se non è specificato alcun partizionamento) è divisa.
PERCORSO [ WITH ( CREDENTIAL credential_name ) ]
Percorso facoltativo della directory in cui sono archiviati i dati della tabella, che potrebbe essere un percorso nell'archiviazione distribuita.
path
deve essere un valore letterale STRING. Se non si specifica alcuna posizione, la tabella viene considerata emanaged table
Azure Databricks crea una posizione di tabella predefinita.Se si specifica una posizione, la tabella viene creata come tabella esterna.
Per le tabelle che non risiedono nel
hive_metastore
catalogo, la tabellapath
deve essere protetta da una posizione esterna, a meno che non venga specificata una credenziale di archiviazione valida.Non è possibile creare tabelle esterne in posizioni che si sovrappongono alla posizione delle tabelle gestite.
Per una tabella Delta Lake, la configurazione della tabella viene ereditata da
LOCATION
se i dati sono presenti. Pertanto, seTBLPROPERTIES
vengono specificate clausole ,table_specification
oPARTITIONED BY
per le tabelle Delta Lake, devono corrispondere esattamente ai dati della posizione Delta Lake.-
Imposta o reimposta una o più opzioni di tabella definite dall'utente.
COMMENT table_comment
Valore letterale stringa per descrivere la tabella.
-
Facoltativamente, imposta una o più proprietà definite dall'utente.
Clausola WITH ROW FILTER
Si applica a: Solo Databricks SQL Databricks Runtime 12.2 LTS e versioni successive al catalogo Unity
Importante
Questa funzionalità è disponibile in anteprima pubblica.
Aggiunge una funzione di filtro di riga alla tabella. Tutte le query future da tale tabella riceveranno un subset delle relative righe per cui la funzione restituisce TRUE booleano. Ciò può essere utile per scopi di controllo di accesso con granularità fine, in cui la funzione può esaminare l'identità e/o le appartenenze a gruppi dell'utente che richiama per decidere se filtrare determinate righe.
-
-
Questa clausola facoltativa popola la tabella usando i dati di
query
. Quando si specifica un oggettoquery
, non è necessario specificare anche un oggettotable_specification
. Lo schema della tabella è derivato dalla query.Si noti che Azure Databricks sovrascrive l'origine dati sottostante con i dati della query di input, per assicurarsi che la tabella venga creata contenga esattamente gli stessi dati della query di input.
Esempi:
-- 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 '/mnt/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));