Condividi tramite


CREATE TABLE [UTILIZZO]

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì 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.

    REPLACE mantiene la cronologia delle tabelle e i privilegi concessi, i filtri di riga e le maschere di colonna.

    Nota

    Azure Databricks consiglia vivamente di usare REPLACE invece 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 in LOCATION 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 con REPLACE, il che significa che CREATE OR REPLACE TABLE IF NOT EXISTS non è consentito.

  • table_name

    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).

    Le tabelle iceberg devono essere create nel Catalogo Unity. La creazione di tabelle Iceberg in hive_metastore non è 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 query o LOCATION.

    • column_identifier

      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 AVRO tabelle 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 ICEBERG tabelle 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.

    • Tipo_di_colonna

      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 NULL valori. Questa clausola è supportata solo per le tabelle Delta e Iceberg.

    • COLLATE collation_name

      Si applica a:contrassegnato come sì SQL di Databricks contrassegnato come sì Databricks Runtime 16.1 e versioni successive

      Per STRINGcolumn_type indica facoltativamente le regole di confronto da applicare per le operazioni di confronto e ordinamento in questa colonna. La collation predefinita è la tabella default_collation_name.

    • GENERATO SEMPRE COME ( expr )

      Quando si specifica questa clausola, il valore di questa colonna viene determinato dall'oggetto specificato expr.

      Il DEFAULT COLLATION della tabella deve essere UTF8_BINARY.

      expr può essere composto da valori letterali, identificatori di colonna all'interno della tabella e funzioni SQL predefinite o operatori, ad eccezione di:

      Inoltre, expr non deve contenere alcuna sottoquery.

    • GENERATO { SEMPRE | PER DEFAULT } COME IDENTITÀ [ ( [ INIZIARE CON start ] [ INCREMENTARE DI step ] ) ]

      Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime 10.4 LTS e versioni successive

      Definisce 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 start e incrementa di step. 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ò essere 0.

      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 identità
      • UPDATE una 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:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime 11.3 LTS e versioni successive

      Definisce un valore DEFAULT per la colonna utilizzata su INSERT, UPDATE e MERGE ... 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:

      Inoltre, default_expression non deve contenere alcuna sottoquery.

      DEFAULT è supportato per le origini CSV, JSON, PARQUET e ORC.

    • COMMENTO commento_colonna

      Valore letterale di una stringa per descrivere la colonna.

    • column_constraint

      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.

    • Clausola MASK

      Si applica a:segno di spunta sì Solo Databricks SQL segno di spunta sì Databricks Runtime 12.2 LTS e versioni successive segno di spunta sì al catalogo Unity

      Aggiunge 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.

    • vincolo_di_tabella

      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_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
    • ICEBERG
    • JSON
    • ORC
    • PARQUET
    • TEXT

    Per qualsiasi formato di file diverso da DELTA o ICEBERG, è necessario specificare anche un LOCATION, a meno che il catalogo delle tabelle non sia hive_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 specificare file_format e row_format specifici di hive usando la clausola OPTIONS, ovvero una mappa di stringhe senza distinzione tra maiuscole e minuscole. I option_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.

    • PARTIZIONATO PER

      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.

    • CLUSTER BY

      Si applica a: contrassegnato come sì Databricks SQL contrassegnato come sì Databricks Runtime 13.3 e versioni successive

      Clausola 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.

        • cluster_column

          Identificatore che fa riferimento a column_identifier nella 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 sono ASC.

      • 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. path deve essere un valore letterale di tipo stringa. Se non si specifica alcuna posizione, la tabella viene considerata managed 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 tabella path 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 le tabelle Delta, la tabella eredita la configurazione da LOCATION se i dati esistono già in tale percorso. Di conseguenza, le clausole specificate TBLPROPERTIES, table_specification o PARTITIONED BY devono corrispondere esattamente ai dati esistenti nell'ubicazione Delta.

      Per le tabelle Iceberg, la LOCATION clausola 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.

    • OPZIONI

      Imposta o reimposta una o più opzioni di tabella definite dall'utente.

    • COMMENTO table_comment

      Una stringa letterale per descrivere la tabella.

    • TBLPROPERTIES

      Facoltativamente, imposta una o più proprietà definite dall'utente.

    • COLLAZIONE PREDEFINITA nome_collazione_predefinita COLLAZIONE PREDEFINITA

      Si applica a:contrassegnato sì Databricks SQL contrassegnato sì Databricks Runtime 16.3 e versioni successive

      Definisce le regole di confronto predefinite da usare per:

      • STRING colonne e campi della tabella
      • espressione DEFAULT
      • Corpo di CREATE TABLE AS query

      CHECK i vincoli e le espressioni di colonna generate richiedono una collazione predefinita di UTF8_BINARY.

      Se non specificato, le regole di confronto predefinite vengono derivate dallo schema in cui viene creata la tabella.

    • CON clausolaROW FILTER

      Si applica a:segno di spunta sì Solo Databricks SQL segno di spunta sì Databricks Runtime 12.2 LTS e versioni successive segno di spunta sì al catalogo Unity

      Aggiunge 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 oggetto query, non è necessario specificare anche un oggetto table_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;