Partager via


CREATE TABLE [UTILISATION]

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

    REPLACE conserve 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 REPLACE au 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 LOCATION clause. Lorsqu’une table externe est supprimée, les fichiers au niveau du LOCATION ne sont pas supprimés.

  • TEMP ou TEMPORAIRE

    S’applique à :coché oui Databricks SQL coché oui Databricks Runtime 17.3 et versions ultérieures

    Important

    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 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 de spécification temporelle ou de spécification d’options. Si la table temporaire table_name peut être qualifiée par session, ou system.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_metastore ne 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_metastore n’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 query ou LOCATION .

    • column_identifier

      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 AVRO tables 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 ICEBERG doivent ê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.

    • 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 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 à :case cochée oui Databricks SQL coché oui Databricks Runtime 16.1 et versions ultérieures

      Pour 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 table default_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 COLLATION de la table doit être UTF8_BINARY.

      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.

    • GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ [ START WITH start ] [ INCRÉMENT 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. 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 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 à :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é aux colonnes nullables.

      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.

      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.

    • 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

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

    • contrainte_de_table

      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_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
    • ICEBERG
    • JSON
    • ORC
    • PARQUET
    • TEXT

    Pour tout format de fichier autre que DELTA ou ICEBERG, vous devez également spécifier un LOCATION, sauf si le catalogue de tables est hive_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 est DELTA.

    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 les file_format et row_format spécifiques à Hive avec la clause OPTIONS, qui est un mappage de chaînes non sensible à la casse. Les option_keys sont :

    • FILEFORMAT
    • INPUTFORMAT
    • OUTPUTFORMAT
    • SERDE
    • FIELDDELIM
    • ESCAPEDELIM
    • MAPKEYDELIM
    • LINEDELIM
  • 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.

    • PARTITIONNÉ PAR

      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.

    • CLUSTER BY

      S’applique à : case cochée ouiDatabricks SQL case cochée oui Databricks Runtime 13.3 et versions ultérieures

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

        • 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

          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_column est trié dans l’ordre croissant (ASC) ou décroissant (DESC). Les valeurs par défaut sont ASC.

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

      Pour les tables Delta, la table hérite de sa configuration du LOCATION si des données existent déjà à cet emplacement. Par conséquent, les clauses spécifiées TBLPROPERTIES, table_specification ou PARTITIONED BY doivent correspondre exactement aux données existantes à l’emplacement Delta.

      Pour les tables Iceberg, la LOCATION clause 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.

    • OPTIONS

      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.

    • TBLPROPERTIES

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

    • CLASSEMENT PAR DÉFAUT default_collation_name

      S’applique à :coche marquée oui Databricks SQL coche marquée oui Databricks Runtime 16.3 et versions ultérieures

      Définit le classement par défaut à utiliser pour :

      • STRING colonnes et champs de la table
      • Expression DEFAULT
      • Corps de CREATE TABLE AS query

      Les contraintes CHECK et les expressions de colonnes générées nécessitent un classement par défaut de UTF8_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.

    • CLAUSE WITHROW FILTER

      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

      Ajoute 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 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);

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