Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 | { TEMP | TEMPORARY } ] 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 }
Avant Databricks Runtime 16.1, START WITH doit précéder INCREMENT BY.
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 et Apache Iceberg.
REPLACEconserve l’historique des tables et les privilèges accordés, les filtres de lignes et les masques de colonne.Remarque
Azure Databricks recommande vivement d’utiliser
REPLACEau lieu de supprimer et de recréer des tables.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
LOCATIONclause. Lorsqu’une table externe est supprimée, les fichiers au niveau duLOCATIONne sont pas supprimés.TEMP ou TEMPORAIRE
S’applique à :
Databricks SQL
Databricks Runtime 17.3 et versions ultérieuresImportant
Cette fonctionnalité est disponible en préversion publique.
Si elle est spécifiée, crée une table temporaire accessible uniquement à la session active.
SI N'EXISTE PAS
S’il est spécifié et qu’une table portant le même nom existe déjà, l’instruction est ignorée.
IF NOT EXISTSne peut pas coexister avecREPLACE, ce qui signifieCREATE OR REPLACE TABLE IF NOT EXISTSqu’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 la table temporaire
table_namepeut être qualifiée parsession, ousystem.session. Sinon, si le nom n’est pas qualifié, la table est créée dans le schéma actuel.Les tables créées dans
hive_metastorene peuvent contenir que des caractères ASCII alphanumériques et des traits de soulignement (INVALID_SCHEMA_OR_RELATION_NAME).Les tables Iceberg doivent être créées dans Unity Catalog. La création de tables Iceberg dans le fichier
hive_metastoren’est pas prise en charge. spécification_de_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 queryouLOCATION.-
Nom unique de la colonne.
Les identificateurs de colonne des tables Delta 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 identificateurs de colonne des
AVROtables doivent commencer par un trait de soulignement (_) ou une lettre Unicode (y compris des lettres non ASCII) et être suivis d’une combinaison de lettres Unicode, de chiffres et de traits de soulignement.Les identificateurs de colonne des tables
ICEBERGdoivent être uniques, insensibles à la casse et suivre les règles standard des identificateurs SQL. Évitez d’utiliser des espaces ou des caractères spéciaux, car ils peuvent ne pas être pris en charge par tous les moteurs de requête. -
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 spécifiée, la colonne n’accepte pas les valeurs
NULL. Cette clause est prise en charge uniquement pour les tables Delta et Iceberg.COLLATE collation_name
S’applique à :
Databricks SQL
Databricks Runtime 16.1 et versions ultérieuresPour
STRINGcolumn_type, nomme éventuellement le classement à appliquer pour les opérations de comparaison et de tri sur cette colonne. La collation par défaut est la tabledefault_collation_name.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.Le
DEFAULT COLLATIONde la table doit êtreUTF8_BINARY.exprpeut ê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 à valeur de table
- Colonnes avec un classement autre que
UTF8_BINARY
exprNe doit pas non plus contenir de sous-requête.GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ [ START WITH start ] [ INCRÉMENT BY STEP ] ) ]
S’applique à :
Databricks SQL
Databricks Runtime 10.4 LTS et ultérieurDé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
stepest négatif) lui est automatiquement affectée. Cette clause est uniquement prise en charge pour les tables Delta. Cette clause ne peut être utilisée que pour les colonnes de type de données BIGINT.Les valeurs assignées automatiquement commencent par
startet 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.stepne 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
ALWAYSest 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 BYune colonne d’identité -
UPDATEune colonne d’identité
Remarque
La déclaration d’une colonne d’identité sur une table 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_EXPRESSION PAR DÉFAUT
S’applique à :
Databricks SQL
Databricks Runtime 11.3 LTS et ultérieurDéfinit une valeur
DEFAULTpour la colonne qui est utilisée surINSERT,UPDATEetMERGE ... INSERTlorsque la colonne n’est pas spécifiée.Si aucune valeur par défaut n’est spécifiée,
DEFAULT NULLest appliqué aux colonnes nullables.default_expressionpeut ê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 à valeur de table
default_expressionNe doit pas non plus contenir de sous-requête.DEFAULTest pris en charge pour les sourcesCSV,JSON,PARQUETetORC.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.
Les contraintes ne sont pas prises en charge pour les tables du catalogue
hive_metastore.Pour ajouter une contrainte de vérification à une table, utilisez ALTER TABLE.
-
S’applique à :
Databricks SQL
Databricks Runtime 12.2 LTS et versions ultérieures
Unity Catalog uniquementPermet d’ajouter une fonction de masque de colonne pour anonymiser les données sensibles. Toutes les requêtes suivantes 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.
Si vous remplacez une table et que la nouvelle table inclut les mêmes noms de colonnes que l’original, tous les masques de colonne existants sont conservés, même s’ils ne sont pas redéfinis explicitement. Cela empêche la perte accidentelle de stratégies d’accès aux données.
-
Ajoute une clé primaire d’information ou des contraintes de clé étrangère d’information à la table.
Les contraintes de clé ne sont pas prises en charge pour les tables du catalogue
hive_metastore.Pour ajouter une contrainte de vérification à une table, utilisez ALTER TABLE.
-
UTILISATION de data_source
data_sourcepeut ê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 :
AVROBINARYFILECSVDELTAICEBERGJSONORCPARQUETTEXT
Pour tout format de fichier autre que
DELTAouICEBERG, vous devez également spécifier unLOCATION, sauf si le catalogue de tables esthive_metastore.Les sources JDBC fédérées suivantes sont prises en charge :
POSTGRESQLSQLSERVERMYSQLBIGQUERYNETSUITEORACLEREDSHIFTSNOWFLAKESQLDWSYNAPSESALESFORCESALESFORCE_DATA_CLOUDTERADATAWORKDAY_RAASMONGODB
Lorsque vous spécifiez une source JDBC fédérée, vous devez également spécifier la
OPTIONSclause 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 :
JDBCLIBSVM- 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
HIVEest pris en charge pour créer une table Hive SerDe dans Databricks Runtime. Vous pouvez spécifier lesfile_formatetrow_formatspécifiques à Hive avec la clauseOPTIONS, qui est un mappage de chaînes non sensible à la casse. Lesoption_keyssont :FILEFORMATINPUTFORMATOUTPUTFORMATSERDEFIELDDELIMESCAPEDELIMMAPKEYDELIMLINEDELIM
table_des_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
Pour les tables Iceberg managées, Azure Databricks ne prend pas en charge
PARTITIONED BY. Utilisez le clustering liquide (CLUSTER BY) pour optimiser la disposition des données à la place. Pour les tables Delta, si vous omettez la définition de table, Azure Databricks place les colonnes de partitionnement à la fin de la table, même si vous les répertoriez précédemment dans la spécification de colonne. -
S’applique à :
Databricks SQL
Databricks Runtime 13.3 et versions ultérieuresClause facultative pour clusterer une table Delta ou Iceberg par un sous-ensemble de colonnes. Consultez Utilisation de Liquid Clustering pour les tables. Pour clusterr d’autres tables, utilisez
clustered_by_clause.Pour les tables Iceberg, vous devez désactiver explicitement les vecteurs de suppression et les ID de ligne lorsque vous utilisez
CLUSTER BY.Utilisez le clustering liquide automatique avec
CLUSTER BY AUTO, et Databricks choisit intelligemment les clés de clustering pour optimiser les performances des requêtes.Vous ne pouvez pas combiner le regroupement liquide 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.
Cette clause n’est pas prise en charge pour les tables Delta ou Iceberg. Utilisez
CLUSTER BYà la place.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_identifierdans 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
Une colonne pour trier le seau. 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_columnest trié dans l’ordre croissant (ASC) ou décroissant (DESC). Les valeurs par défaut sontASC.
INTO num_buckets BUCKETS
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.
CHEMIN LOCATION [ WITH ( CREDENTIAL credential_name ) ]
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é.
pathdoit être un littéral STRING. Si vous ne spécifiez aucun emplacement, la table est considérée comme unmanaged tableet 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 tablepathdoit ê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.
Pour les tables Delta, la table hérite de sa configuration du
LOCATIONsi des données existent déjà à cet emplacement. Par conséquent, les clauses spécifiéesTBLPROPERTIES,table_specificationouPARTITIONED BYdoivent correspondre exactement aux données existantes à l’emplacement Delta.Pour les tables Iceberg, la
LOCATIONclause n’est pas prise en charge. Les tables Iceberg étrangères sont enregistrées automatiquement lorsque vous créez un catalogue étranger et que vous devez créer des tables Iceberg gérées sans spécifier d’emplacement.-
Définit ou redéfinit une ou plusieurs options de table définies par l’utilisateur.
COMMENTAIRE table_comment
Une chaîne littérale pour décrire la table.
-
(Facultatif) Définit une ou plusieurs propriétés définies par l’utilisateur.
CLASSEMENT PAR DÉFAUT default_collation_name
S’applique à :
Databricks SQL
Databricks Runtime 16.3 et versions ultérieuresDéfinit le classement par défaut à utiliser pour :
-
STRINGcolonnes et champs de la table - Expression
DEFAULT - Corps de
CREATE TABLE AS query
Les contraintes
CHECKet les expressions de colonnes générées nécessitent un classement par défaut deUTF8_BINARY.S’il n’est pas spécifié, le classement par défaut est dérivé du schéma dans lequel la table est créée.
-
-
S’applique à :
Databricks SQL
Databricks Runtime 12.2 LTS et versions ultérieures
Unity Catalog uniquementAjoute une fonction de filtre de lignes à 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.
Si vous remplacez une table, tous les filtres de lignes existants sont conservés, même s’ils ne sont pas redéfinis explicitement. Cela empêche la perte accidentelle de stratégies d’accès aux données.
-
AS Requê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);
-- 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;
> CREATE TEMP TABLE temp_1 (a INT);
> INSERT INTO temp_1 VALUES (1);
> SELECT * FROM temp_1;
1