CREATE TABLE [USING]
S’applique à : Databricks SQL Databricks Runtime
Définit une table managée ou externe, éventuellement à l’aide d’une source de données.
Syntaxe
{ { [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 }
Paramètres
REPLACE
S’il est spécifié, remplace la table et son contenu si elle existe déjà. Cette clause est uniquement prise en charge pour les tables delta Lake.
REPLACE
conserve l’historique de la table.Notes
Azure Databricks recommande vivement d’utiliser
REPLACE
au lieu de supprimer et de recréer des tables delta Lake.EXTERNAL
Si cette option est spécifiée, crée une table externe. Lorsque vous créez une table externe, vous devez également fournir une
LOCATION
clause. Lorsqu’une table externe est supprimée, les fichiers au niveau duLOCATION
ne sont pas supprimés.IF NOT EXISTS
S’il est spécifié et qu’une table portant le même nom existe déjà, l’instruction est ignorée.
IF NOT EXISTS
ne peut pas coexister avecREPLACE
, ce qui signifieCREATE OR REPLACE TABLE IF NOT EXISTS
qu’il n’est pas autorisé.-
Le nom de la table à créer. Le nom ne doit pas inclure de spécification temporelle ou de spécification d’options. Si le nom n’est pas qualifié, la table est créée dans le schéma actuel.
Les tables créées dans
hive_metastore
ne peuvent contenir que des caractères ASCII alphanumériques et des traits de soulignement (INVALID_SCHEMA_OR_RELATION_NAME). spécification_table
Cette clause facultative définit la liste des colonnes, leurs types, leurs propriétés, leurs descriptions et leurs contraintes de colonne.
Si vous ne définissez pas de colonnes dans le schéma de la table, vous devez spécifier
AS query
ouLOCATION
.-
Nom unique de la colonne.
Les identifiants de colonne des tables Delta Lake sans propriété de mappage de colonne (
'delta.columnMapping.mode' = 'name'
) ne doivent pas contenir d’espaces ou les caractères suivants :, ; { } ( ) \n \t =
.Les identifiants de colonne des tables
AVRO
doit commencer par un trait de soulignement (_
) ou une lettre Unicode (y compris des lettres non ASCII) et être suivi d’une combinaison de lettres Unicode, de chiffres et de traits de soulignement. -
Spécifie le type de données de la colonne. Tous les types de données pris en charge par les Azure Databricks ne sont pas pris en charge par toutes les sources de données.
NOT NULL
Si elle est spécifiée, la colonne n’accepte
NULL
pas de valeurs. Cette clause est uniquement prise en charge pour les tables delta Lake.TOUJOURS GÉNÉRÉ EN TANT QUE ( expr )
Lorsque vous spécifiez cette clause, la valeur de cette colonne est déterminée par le spécifié
expr
.expr
peut être composé de littéraux, d’identificateurs de colonnes dans la table, et de fonctions ou d’opérateurs SQL déterministes intégrés, à l’exception de :- Fonctions d’agrégation
- Fonctions de fenêtre analytique
- Les fonctions de classement de fenêtre
- Fonctions du générateur de valeur de table
expr
Ne doit pas non plus contenir de sous-requête.GENERÉ { ALWAYS | BY DEFAULT } COMME IDENTITÉ [ ( [ START WITH start ] [ INCREMENT BY step ] ) ].
S’applique à : Databricks SQL Databricks Runtime 10.4 LTS et ultérieur
Définit une colonne d’identité. Lorsque vous écrivez dans la table et que vous ne fournissez pas de valeurs pour la colonne d’identité, une valeur unique et une valeur d’augmentation statistique (ou diminuant si
step
est négatif) lui est automatiquement affectée. Cette clause est uniquement prise en charge pour les tables delta Lake. Cette clause ne peut être utilisée que pour les colonnes de type de données BIGINT.Les valeurs assignées automatiquement commencent par
start
et s’incrémentent parstep
. Les valeurs attribuées sont uniques, mais leur contiguïté n’est pas garantie. Les deux paramètres sont facultatifs et la valeur par défaut est 1.step
ne peut pas être0
.Si les valeurs affectées automatiquement se trouvent au-delà de la plage du type de colonne d’identité, la requête échoue.
Lorsque
ALWAYS
est utilisé, vous ne pouvez pas fournir vos propres valeurs pour la colonne d’identité.Les opérations suivantes ne sont pas prises en charge :
PARTITIONED BY
une colonne d’identitéUPDATE
une colonne d’identité
Remarque
La déclaration d’une colonne d’identité sur une table Delta désactive les transactions simultanées. Utilisez uniquement des colonnes d’identité dans les cas d’usage où des écritures simultanées dans la table cible ne sont pas requises.
DEFAULT default_expression
S’applique à : Databricks SQL Databricks Runtime 11.3 LTS et ultérieur
Définit une valeur
DEFAULT
pour la colonne qui est utilisée surINSERT
,UPDATE
etMERGE ... INSERT
lorsque la colonne n’est pas spécifiée.Si aucune valeur par défaut n’est spécifiée,
DEFAULT NULL
est appliqué pour les colonnes pouvant accepter la valeur Null.default_expression
peut être composé de littéraux ainsi que de fonctions SQL intégrées ou d’opérateurs, à l’exception de :- Fonctions d’agrégation
- Fonctions de fenêtre analytique
- Les fonctions de classement de fenêtre
- Fonctions du générateur de valeur de table
default_expression
Ne doit pas non plus contenir de sous-requête.DEFAULT
est pris en charge pour les sourcesCSV
,JSON
,PARQUET
etORC
.COMMENTAIRE Column_comment
Littéral de chaîne pour décrire la colonne.
-
Ajoute une contrainte de clé primaire ou de clé étrangère à la colonne d’une table Delta Lake.
Les contraintes ne sont pas prises en charge pour les tables du catalogue
hive_metastore
.Pour ajouter une contrainte de validation à une table Delta Lake, utilisez ALTER TABLE.
-
S’applique à : Databricks SQL Databricks Runtime 12.2 LTS et versions ultérieures Unity Catalog uniquement
Important
Cette fonctionnalité est disponible en préversion publique.
Permet d’ajouter une fonction de masque de colonne pour anonymiser les données sensibles. Toutes les requêtes ultérieures de cette colonne reçoivent le résultat de l’évaluation de cette fonction sur la colonne à la place de la valeur d’origine de la colonne. Cela peut être utile à des fins de contrôle d’accès plus précis, où la fonction peut inspecter l’identité ou l’appartenance à un groupe de l’utilisateur appelant afin de décider s’il convient de modifier la valeur.
-
Ajoute une contrainte de clé primaire ou de clé étrangère informative à la table Delta Lake.
Les contraintes de clé ne sont pas prises en charge pour les tables du catalogue
hive_metastore
.Pour ajouter une contrainte de validation à une table Delta Lake, utilisez ALTER TABLE.
-
USING data_source
data_source
peut être un format de fichier ou une source de données JDBC fédérée.Le format de fichier doit être l’un des éléments suivants :
AVRO
BINARYFILE
CSV
DELTA
JSON
ORC
PARQUET
TEXT
Pour tout format de fichier autre que celui que
DELTA
vous devez également spécifier,LOCATION
sauf si le catalogue de tables esthive_metastore
.Les sources JDBC fédérées suivantes sont prises en charge :
POSTGRESQL
SQLSERVER
MYSQL
BIGQUERY
NETSUITE
ORACLE
REDSHIFT
SNOWFLAKE
SQLDW
SYNAPSE
SALESFORCE
SALESFORCE_DATA_CLOUD
TERADATA
WORKDAY_RAAS
MONGODB
Lorsque vous spécifiez une source JDBC fédérée, vous devez également spécifier la
OPTIONS
clause avec les informations de connexion nécessaires. Pour plus d’informations sur l’interrogation de sources de données fédérées, consultez les bases de données de requête à l’aide de JDBC .Les formats de fichiers supplémentaires suivants à utiliser pour la table sont pris en charge dans Databricks Runtime :
JDBC
LIBSVM
- un nom de classe complet d’une implémentation personnalisée de
org.apache.spark.sql.sources.DataSourceRegister
.
En cas d'omission de
USING
, la valeur par défaut estDELTA
.Les éléments suivants s’appliquent à : Databricks Runtime
HIVE
est pris en charge pour créer une table Hive SerDe dans Databricks Runtime. Vous pouvez spécifier la clause spécifique à Hivefile_format
etrow_format
à l'aide de la clauseOPTIONS
, qui est un mappage de chaînes indépendant de la casse. Lesoption_keys
sont les suivants :FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
table_clauses
Spécifiez éventuellement l’emplacement, le partitionnement, le clustering, les options, les commentaires et les propriétés définies par l’utilisateur pour la nouvelle table. Chaque sous-clause ne peut être spécifiée qu’une seule fois.
-
Clause facultative permettant de partitionner la table par un sous-ensemble de colonnes.
Remarque
Si vous ne définissez pas de table Delta, les colonnes de partitionnement sont placées à la fin de la table, même si elles sont définies plus tôt dans la spécification des colonnes. Pour les tables Delta, il est préférable d’utiliser
CLUSTER BY
au lieu dePARTITIONED BY
. -
S’applique à : Databricks SQL Databricks Runtime 13.3 et ultérieur
Clause facultative permettant de regrouper une table Delta en fonction d’un sous-ensemble de colonnes. Pour grouper d’autres tables, utilisez
clustered_by_clause
.Le clustering liquide Delta Lake ne peut pas être combiné avec
PARTITIONED BY
. clustered_by_clause
Si vous le souhaitez, vous pouvez regrouper la table ou chaque partition en un nombre fixe de compartiments de hachage à l’aide d’un sous-ensemble de colonnes.
Le clustering n’est pas pris en charge pour les tables delta Lake.
MIS EN CLUSTER PAR
Spécifie l’ensemble des colonnes par lesquelles regrouper chaque partition, ou la table si aucun partitionnement n’est spécifié.
-
Identificateur référençant un
column_identifier
dans la table. Si vous spécifiez plusieurs colonnes, il ne doit pas y avoir de doublons. Comme un clustering opère au niveau de la partition, vous ne devez pas nommer une colonne de partition également en tant que colonne de cluster.
-
TRIÉ PAR
Conserve éventuellement un ordre de tri pour les lignes d’un compartiment.
sort_column
Colonne par laquelle trier le compartiment. La colonne ne doit pas être une colonne de partition. Les colonnes de tri doivent être uniques.
ASC ou DESC
Spécifie éventuellement si
sort_column
est trié dans l’ordre croissant (ASC
) ou décroissant (DESC
). Les valeurs par défaut sontASC
.
DANS num_buckets COMPARTIMENTS
Littéral ENTIER spécifiant le nombre de compartiments dans lesquels chaque partition (ou la table si aucun partitionnement n’est spécifié) est divisée.
LOCATION chemin [ WITH ( CREDENTIAL nom_informations_identification ) ]
Chemin d’accès facultatif au répertoire dans lequel les données de table sont stockées, ce qui peut être un chemin d’accès sur le stockage distribué.
path
doit être un littéral STRING. Si vous ne spécifiez aucun emplacement, la table est considérée comme unmanaged table
et Azure Databricks crée un emplacement de table par défaut.La spécification d’un emplacement fait de la table un tableau externe.
Pour les tables qui ne résident pas dans le catalogue
hive_metastore
, la tablepath
doit être protégée par un emplacement externe, sauf si des informations d’identification de stockage valides sont spécifiées.Vous ne pouvez pas créer de tables externes dans des emplacements qui chevauchent l’emplacement des tables managées.
Dans le cas d’une table Delta Lake, la configuration de la table est héritée du
LOCATION
si des données sont présentes. Par conséquent, si des clausesTBLPROPERTIES
,table_specification
ouPARTITIONED BY
sont spécifiées pour les tables du lac Delta, elles doivent correspondre exactement aux données d’emplacement Delta Lake.-
Définit ou redéfinit une ou plusieurs options de table définies par l’utilisateur.
Table_comment de COMMENTAIRES
Littéral de chaîne pour décrire la colonne.
-
(Facultatif) Définit une ou plusieurs propriétés définies par l’utilisateur.
-
S’applique à : Databricks SQL Databricks Runtime 12.2 LTS et versions ultérieures Unity Catalog uniquement
Permet d’ajouter une fonction de filtre de ligne à la table. Toutes les requêtes ultérieures de cette table recevront un sous-ensemble de ses lignes pour lesquelles la fonction prend la valeur booléenne TRUE. Cela peut être utile à des fins de contrôle d’accès plus précis, où la fonction peut inspecter l’identité ou l’appartenance à un groupe de l’utilisateur appelant afin de décider s’il convient de filtrer certaines lignes.
-
COMMERequête
Cette clause facultative remplit la table à l’aide des données de
query
. Lorsque vous spécifiez unquery
, vous ne devez pas spécifier également untable_specification
. Le schéma de table est dérivé de la requête.Notez que Azure Databricks remplace la source de données sous-jacente par les données de la requête d’entrée, pour s’assurer que la table est créée contient exactement les mêmes données que la requête d’entrée.
Exemples
-- 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;