Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 |
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 }
Prima di Databricks Runtime 16.1 START WITH deve precedere INCREMENT BY.
Parametri
SOSTITUIRE
Se specificato, sostituisce la tabella e il relativo contenuto, se già esistente. Questa clausola è supportata solo per le tabelle Delta e Apache Iceberg.
REPLACEmantiene la cronologia delle tabelle e i privilegi concessi, i filtri di riga e le maschere di colonna.Nota
Azure Databricks consiglia vivamente di usare
REPLACEinvece di eliminare e creare nuovamente tabelle.ESTERNO
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 inLOCATIONnon verranno eliminati.SE NON ESISTE
Se specificato e esiste già una tabella con lo stesso nome, l'istruzione viene ignorata.
IF NOT EXISTSnon può coesistere conREPLACE, il che significa cheCREATE OR REPLACE TABLE IF NOT EXISTSnon è 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_metastorepossono contenere solo caratteri ASCII alfanumerici e caratteri di sottolineatura (INVALID_SCHEMA_OR_RELATION_NAME).Le tabelle iceberg devono essere create nel Catalogo Unity. La creazione di tabelle Iceberg in
hive_metastorenon è supportata. specifica_tavola
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 queryoLOCATION.-
Nome univoco per la colonna.
Gli identificatori di colonna delle tabelle Delta senza proprietà di mapping delle colonne (
'delta.columnMapping.mode' = 'name') non devono contenere spazi o i caratteri seguenti:, ; { } ( ) \n \t =.Gli identificatori di colonna delle
AVROtabelle 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.Gli identificatori di colonna delle
ICEBERGtabelle devono essere univoci, senza distinzione tra maiuscole e minuscole e seguire le regole di identificatore SQL standard. Evitare di usare spazi o caratteri speciali, perché potrebbero non essere supportati da tutti i motori di query. -
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 specificato, la colonna non accetta
NULLvalori. Questa clausola è supportata solo per le tabelle Delta e Iceberg.COLLATE collation_name
Si applica a:
SQL di Databricks
Databricks Runtime 16.1 e versioni successivePer
STRINGcolumn_typeindica facoltativamente le regole di confronto da applicare per le operazioni di confronto e ordinamento in questa colonna. La collation predefinita è la tabelladefault_collation_name.GENERATO SEMPRE COME ( expr )
Quando si specifica questa clausola, il valore di questa colonna viene determinato dall'oggetto specificato
expr.Il
DEFAULT COLLATIONdella tabella deve essereUTF8_BINARY.exprpuò 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
- Colonne con criteri di confronto diversi da
UTF8_BINARY
Inoltre,
exprnon deve contenere alcuna sottoquery.GENERATO { SEMPRE | PER DEFAULT } COME IDENTITÀ [ ( [ INIZIARE CON start ] [ INCREMENTARE DI step ] ) ]
Si applica a:
Databricks SQL
Databricks Runtime 10.4 LTS e versioni successiveDefinisce una colonna identificativa. 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. Questa clausola può essere usata solo per le colonne con tipo di dati BIGINT.I valori assegnati automaticamente iniziano con
starte incrementa distep. I valori assegnati sono univoci, ma non sono garantiti per essere contigui. Entrambi i parametri sono facoltativi e il valore predefinito è 1.stepnon può essere0.Se i valori assegnati automaticamente superano l'intervallo del tipo di colonna Identity, la query avrà esito negativo.
Quando
ALWAYSviene usato, non è possibile specificare valori personalizzati per la colonna Identity.Le operazioni non supportate sono elencate di seguito:
-
PARTITIONED BYuna colonna identità -
UPDATEuna colonna identità
Nota
La dichiarazione di una colonna Identity in una tabella 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 espressione_predefinita
Si applica a:
Databricks SQL
Databricks Runtime 11.3 LTS e versioni successiveDefinisce un valore
DEFAULTper la colonna utilizzata suINSERT,UPDATEeMERGE ... INSERTquando la colonna non viene specificata.Se non viene specificato alcun valore predefinito, viene applicato
DEFAULT NULLper le colonne nullable.default_expressionpuò 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_expressionnon deve contenere alcuna sottoquery.DEFAULTè supportato per le originiCSV,JSON,PARQUETeORC.COMMENTO commento_colonna
Valore letterale di una stringa per descrivere la colonna.
-
Aggiunge una chiave primaria o un vincolo di chiave esterna alla colonna di una tabella.
I vincoli non sono supportati per le tabelle nel catalogo
hive_metastore.Per aggiungere un vincolo CHECK a una tabella, utilizzare ALTER TABLE.
-
Si applica a:
Solo Databricks SQL
Databricks Runtime 12.2 LTS e versioni successive
al catalogo UnityAggiunge una funzione maschera di colonna per rendere anonimi i dati sensibili. Tutte le query successive di tale colonna ricevono il risultato della valutazione della funzione applicata alla 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.
Se si sostituisce una tabella e la nuova tabella include gli stessi nomi di colonna dell'originale, tutte le maschere di colonna esistenti vengono mantenute, anche se non vengono ridefinite in modo esplicito. In questo modo si evita la perdita accidentale dei criteri di accesso ai dati.
-
Aggiunge una chiave primaria informativa o vincoli di chiave esterna informativa alla tabella.
I vincoli di chiave non sono supportati per le tabelle nel catalogo
hive_metastore.Per aggiungere un vincolo CHECK a una tabella, utilizzare ALTER TABLE.
-
UTILIZZO del sorgente_dati
data_sourcepuò essere un formato di file o un'origine dati JDBC federata.Il formato del file deve essere uno dei seguenti:
AVROBINARYFILECSVDELTAICEBERGJSONORCPARQUETTEXT
Per qualsiasi formato di file diverso da
DELTAoICEBERG, è necessario specificare anche unLOCATION, a meno che il catalogo delle tabelle non siahive_metastore.Sono supportate le origini JDBC federate seguenti:
POSTGRESQLSQLSERVERMYSQLBIGQUERYNETSUITEORACLEREDSHIFTSNOWFLAKESQLDWSYNAPSESALESFORCESALESFORCE_DATA_CLOUDTERADATAWORKDAY_RAASMONGODB
Quando si specifica un'origine JDBC federata, è necessario specificare anche la
OPTIONSclausola 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:
JDBCLIBSVM- Nome completo della classe di un'implementazione di
org.apache.spark.sql.sources.DataSourceRegisterpersonalizzata.
Se
USINGviene 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_formaterow_formatspecifici di hive usando la clausolaOPTIONS, ovvero una mappa di stringhe senza distinzione tra maiuscole e minuscole. Ioption_keyssono:FILEFORMATINPUTFORMATOUTPUTFORMATSERDEFIELDDELIMESCAPEDELIMMAPKEYDELIMLINEDELIM
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
Per le tabelle Iceberg gestite, Azure Databricks non supporta
PARTITIONED BY. Usare il clustering liquido (CLUSTER BY) per ottimizzare invece il layout dei dati. Per le tabelle Delta, se si omette la definizione di tabella, Azure Databricks inserisce le colonne di partizionamento alla fine della tabella, anche se vengono elencate in precedenza nella specifica della colonna. -
Si applica a:
Databricks SQL
Databricks Runtime 13.3 e versioni successiveClausola facoltativa per raggruppare una tabella Delta o Iceberg in base a un subset di colonne. Vedere Usare clustering liquido per le tabelle. Per raggruppare altre tabelle, usare
clustered_by_clause.Per le tabelle Iceberg, è necessario disabilitare in modo esplicito i vettori di eliminazione e gli ID di riga quando si usa
CLUSTER BY.Usare il clustering liquido automatico con
CLUSTER BY AUTOe Databricks sceglie in modo intelligente le chiavi di clustering per ottimizzare le prestazioni delle query.Non è possibile combinare clustering liquido con
PARTITIONED BY. clausola_clusterizzata_per
Opzionalmente, raggruppare la tabella o ciascuna partizione in un numero fisso di bucket hash usando un sottoinsieme delle colonne.
Questa clausola non è supportata per le tabelle Delta o Iceberg. Utilizzare invece
CLUSTER BY.RAGGRUPPATO PER
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
column_identifiernella 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
Opzionalmente, mantiene un ordine delle righe in un bucket.
sort_column
Colonna in base alla quale ordinare il bucket. La colonna non deve essere una colonna di partizione. Le colonne di ordinamento devono essere univoche.
ASC o DESC
Specifica facoltativamente 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 [ CON ( CREDENTIAL credential_name ) ]
Percorso facoltativo alla directory dove sono memorizzati i dati della tabella, che potrebbe risiedere in una memoria distribuita.
pathdeve essere un valore letterale di tipo stringa. Se non si specifica alcuna posizione, la tabella viene consideratamanaged tablee 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 tabellapathdeve 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 le tabelle Delta, la tabella eredita la configurazione da
LOCATIONse i dati esistono già in tale percorso. Di conseguenza, le clausole specificateTBLPROPERTIES,table_specificationoPARTITIONED BYdevono corrispondere esattamente ai dati esistenti nell'ubicazione Delta.Per le tabelle Iceberg, la
LOCATIONclausola non è supportata. Le tabelle di Iceberg esterne vengono registrate automaticamente quando si crea un catalogo esterno ed è necessario creare tabelle Iceberg gestite senza specificare una posizione.-
Imposta o reimposta una o più opzioni di tabella definite dall'utente.
COMMENTO table_comment
Una stringa letterale per descrivere la tabella.
-
Facoltativamente, imposta una o più proprietà definite dall'utente.
COLLAZIONE PREDEFINITA nome_collazione_predefinita COLLAZIONE PREDEFINITA
Si applica a:
Databricks SQL
Databricks Runtime 16.3 e versioni successiveDefinisce le regole di confronto predefinite da usare per:
-
STRINGcolonne e campi della tabella - espressione
DEFAULT - Corpo di
CREATE TABLE AS query
CHECKi vincoli e le espressioni di colonna generate richiedono una collazione predefinita diUTF8_BINARY.Se non specificato, le regole di confronto predefinite vengono derivate dallo schema in cui viene creata la tabella.
-
-
Si applica a:
Solo Databricks SQL
Databricks Runtime 12.2 LTS e versioni successive
al catalogo UnityAggiunge una funzione di filtro di riga alla tabella. Tutte le query successive da tale tabella riceveranno un sottoinsieme delle righe in cui la funzione restituisce il valore booleano TRUE. 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.
Se si sostituisce una tabella, tutti i filtri di riga esistenti vengono mantenuti, anche se non vengono ridefiniti in modo esplicito. In questo modo si evita la perdita accidentale dei criteri di accesso ai dati.
-
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 creata contenga esattamente gli stessi dati della query di input.
Esempi
-- 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;