Partager via


CREATE TABLE [USING]

S’applique à : case marquée oui Databricks SQL case marquée oui 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 du LOCATION 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 avec REPLACE, ce qui signifie CREATE OR REPLACE TABLE IF NOT EXISTS qu’il n’est pas autorisé.

  • table_name

    Le nom de la table à créer. Le nom ne doit pas inclure une spécification temporelle. 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 ou LOCATION .

    • column_identifier

      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.

    • column_type

      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 :

      exprNe doit pas non plus contenir de sous-requête.

    • GENERÉ { ALWAYS | BY DEFAULT } COMME IDENTITÉ [ ( [ START WITH start ] [ INCREMENT BY step ] ) ].

      S’applique à : coche marquée oui Databricks SQL coche marquée oui 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 par step . 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 être 0.

      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 à : coche marquée oui Databricks SQL coche marquée oui Databricks Runtime 11.3 LTS et ultérieur

      Définit une valeur DEFAULT pour la colonne qui est utilisée sur INSERT, UPDATE et MERGE ... 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 :

      default_expressionNe doit pas non plus contenir de sous-requête.

      DEFAULT est pris en charge pour les sources CSV, JSON, PARQUET et ORC.

    • COMMENTAIRE Column_comment

      Littéral de chaîne pour décrire la colonne.

    • column_constraint

      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.

    • Clause MASK

      S’applique à : coche marquée oui Databricks SQL coche marquée oui Databricks Runtime 12.2 LTS et versions ultérieures case marquée oui 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.

    • table_constraint

      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

    Format de fichier à utiliser pour la table. data_source doit faire partie de :

    • AVRO
    • BINARYFILE
    • CSV
    • DELTA
    • JSON
    • ORC
    • PARQUET
    • TEXT

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

    Pour tout data_source autre chose DELTA, vous devez également spécifier un LOCATION, sauf si le catalogue de tables est hive_metastore .

    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 à Hive file_format et row_format à l'aide de la clause OPTIONS, qui est un mappage de chaînes indépendant de la casse. Les option_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.

    • PARTITIONNÉ PAR

      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 de PARTITIONED BY.

    • CLUSTER BY

      S’applique à : coche marquée ouiDatabricks SQL case marquée oui 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é.

        • cluster_column

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

      • 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 un managed 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 table path 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 clauses TBLPROPERTIES, table_specification ou PARTITIONED BY sont spécifiées pour les tables du lac Delta, elles doivent correspondre exactement aux données d’emplacement Delta Lake.

    • OPTIONS

      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.

    • TBLPROPERTIES

      (Facultatif) Définit une ou plusieurs propriétés définies par l’utilisateur.

    • AVEC Clause FILTRE DE LIGNE

      S’applique à : coche marquée oui Databricks SQL coche marquée oui Databricks Runtime 12.2 LTS et versions ultérieures coche marquée oui 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 un query, vous ne devez pas spécifier également un table_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));