Condividi tramite


CREATE TABLE [USING]

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

  • 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 o LOCATION.

    • column_identifier

      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.

    • column_type

      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:

      Inoltre, expr non deve contenere alcuna sottoquery.

    • GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY 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 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 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 Identity
      • UPDATE 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: 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.

    • COMMENT column_comment

      Valore letterale stringa per descrivere la colonna.

    • column_constraint

      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.

    • 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

      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.

    • table_constraint

      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 oggetto LOCATION a meno che il catalogo di 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 DA

      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.

    • CLUSTER BY

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

        • cluster_column

          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 sono ASC.

      • 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 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 una tabella Delta Lake, la configurazione della tabella viene ereditata da LOCATION se i dati sono presenti. Pertanto, se vengono specificate clausole TBLPROPERTIES, table_specification o PARTITIONED BY per le tabelle Delta Lake, devono corrispondere esattamente ai dati della posizione Delta Lake.

    • OPTIONS

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

    • COMMENT table_comment

      Valore letterale stringa per descrivere la tabella.

    • TBLPROPERTIES

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

    • CON Clausola ROW 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 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 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 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;