CREATE TABLE [USING]

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

    REPLACEmantiene 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 in LOCATION 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 con REPLACE, il che significa CREATE OR REPLACE TABLE IF NOT EXISTS che non è consentito.

  • table_name

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

    • column_identifier

      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.

    • 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à 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:

      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 DEFAULT valore per la colonna utilizzata in INSERT, UPDATEe MERGE ... 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:

      Inoltre default_expression , non deve contenere alcuna sottoquery.

      DEFAULTè supportato per CSVle origini , JSONPARQUET, e ORC .

    • COMMENT column_comment

      Valore letterale stringa per descrivere la colonna.

    • column_constraint

      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.

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

    • 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 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 diverso DELTA da è necessario specificare anche un oggetto LOCATION a meno che il catalogo delle tabelle non sia hive_metastore.

    Il codice seguente si applica a: Databricks Runtime

    HIVE è supportato per creare una tabella SerDe Hive in Databricks Runtime. È possibile specificare hive-specific file_format e row_format usare la OPTIONS clausola , 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 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 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 [ 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 e managed 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 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 TBLPROPERTIESvengono specificate clausole , table_specificationo 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.

    • Clausola WITH 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

      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.

  • 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 '/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));