CREATE TABLE [USING]
Si applica a: Databricks SQL Databricks Runtime
Definisce una tabella esterna o gestita, 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 clausola
LOCATION
. Quando una tabella esterna viene eliminata, i file inLOCATION
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 significa cheCREATE OR REPLACE TABLE IF NOT EXISTS
non è consentito.-
Il nome della tabella da creare. Il nome non deve includere una specifica temporale o una specifica delle opzioni. 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 la proprietà di mapping delle colonne (
'delta.columnMapping.mode' = 'name'
) non devono contenere spazi o i caratteri seguenti:, ; { } ( ) \n \t =
.Gli identificatori di colonna della tabella
AVRO
devono iniziare con un carattere di sottolineatura (_
) o una lettera Unicode (incluse lettere non ASCII) e seguire una combinazione di lettere Unicode, cifre e caratteri di sottolineatura. -
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à valori
NULL
. 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 di 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 valore
DEFAULT
per la colonna utilizzata suINSERT
,UPDATE
eMERGE ... INSERT
quando la colonna non viene specificata.Se non viene specificato alcun valore predefinito, viene applicato
DEFAULT NULL
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 di finestra analitica
- Funzioni della finestra di classificazione
- Funzioni generatore con valori di tabella
Inoltre,
default_expression
non deve contenere alcuna sottoquery.DEFAULT
è supportato per le originiCSV
,JSON
,PARQUET
eORC
.COMMENT column_comment
Valore letterale stringa per descrivere la colonna.
-
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 catalogo
hive_metastore
.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 successive da tale colonna ricevono il risultato della valutazione della 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à o le appartenenze ai gruppi dell'utente che richiama per decidere se redigere 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 catalogo
hive_metastore
.Per aggiungere un vincolo CHECK a una tabella Delta Lake, utilizzare ALTER TABLE.
-
USING data_source
data_source
può essere un formato di file o un'origine dati JDBC federata.Il formato del file deve essere uno dei seguenti:
AVRO
BINARYFILE
CSV
DELTA
JSON
ORC
PARQUET
TEXT
Per qualsiasi formato di file diverso da
DELTA
è necessario specificare anche un oggettoLOCATION
a meno che il catalogo di tabelle non siahive_metastore
.Sono supportate le origini JDBC federate seguenti:
POSTGRESQL
SQLSERVER
MYSQL
BIGQUERY
NETSUITE
ORACLE
REDSHIFT
SNOWFLAKE
SQLDW
SYNAPSE
SALESFORCE
SALESFORCE_DATA_CLOUD
TERADATA
WORKDAY_RAAS
MONGODB
Quando si specifica un'origine JDBC federata, è necessario specificare anche la
OPTIONS
clausola con le informazioni di connessione necessarie. Per altre informazioni sull'esecuzione di query su origini dati federate, vedere Eseguire query sui database con JDBC .I formati di file aggiuntivi da usare per la tabella sono supportati in Databricks Runtime:
JDBC
LIBSVM
- Nome completo della classe di un'implementazione di
org.apache.spark.sql.sources.DataSourceRegister
personalizzata.
Se
USING
viene omesso, il valore predefinito èDELTA
.Il codice seguente si applica a: Databricks Runtime
HIVE
è supportato per creare una tabella SerDe Hive in Databricks Runtime. È possibile specificarefile_format
erow_format
specifici di hive usando la clausolaOPTIONS
, 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 tabella
column_identifier
. 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.
-
SORTED BY
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 univoche.
ASC o DESC
Facoltativamente specifica se
sort_column
è applicato l'ordine crescente (ASC
) o decrescente (DESC
). I valori predefiniti sonoASC
.
INTO num_buckets BUCKETS
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 consideratamanaged table
e 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 catalogo
hive_metastore
, 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, se vengono specificate clausoleTBLPROPERTIES
,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.
-
Si applica a: Solo Databricks SQL Databricks Runtime 12.2 LTS e versioni successive al catalogo Unity
Aggiunge una funzione di filtro di riga alla tabella. Tutte le query successive da tale tabella riceveranno un subset delle righe in cui la funzione restituisce TRUE booleano. Ciò può essere utile per scopi di controllo di accesso con granularità fine in cui la funzione può controllare l'identità o le appartenenze ai gruppi dell'utente che richiama per decidere se filtrare determinate righe.
-
Query AS
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 '/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;