Partitions

S’applique à :case marquée oui Databricks SQL case marquée oui Databricks Runtime

Une partition est composée d’un sous-ensemble de lignes d’une table qui partagent la même valeur pour un sous-ensemble prédéfini de colonnes appelées les colonnes de partitionnement. L’utilisation de partitions peut accélérer les requêtes sur la table, ainsi que la manipulation des données.

Pour utiliser des partitions, vous définissez l’ensemble de colonnes de partitionnement lorsque vous créez une table en incluant la clause PARTITIONED BY.

Lors de l’insertion ou de la manipulation de lignes dans une table, Azure Databricks distribue automatiquement les lignes dans les partitions appropriées.

Vous pouvez également spécifier la partition directement à l’aide d’une clause PARTITION.

Cette syntaxe est également disponible pour les tables qui n’utilisent pas le format Delta Lake, pour supprimer (DROP), ajouter (ADD) ou renommer (RENAME) rapidement des partitions à l’aide de l’instruction ALTER TABLE.

PARTITIONNÉ PAR

La clause PARTITIONED BY spécifie une liste de colonnes sur lesquelles la nouvelle table est partitionnée.

Syntaxe

PARTITIONED BY ( { partition_column [ column_type ] } [, ...] )

Paramètres

  • partition_column

    Un identificateur peut référencer un column_identifier dans la table. Si vous spécifiez plusieurs colonnes, il ne doit pas y avoir de doublons. Si vous référencez toutes les colonnes dans le column_specification de la table, une erreur est générée.

  • column_type

    À moins que partition_column ne fasse référence à un column_identifier dans le column_specification de la table, column_type définit le type de données de partition_column.

    Tous les types de données pris en charge par Databricks SQL ne sont pas pris en charge par toutes les sources de données.

Notes

À moins que vous ne définissiez une colonne de partitionnement de table Lake, les colonnes qui référencent les colonnes dans la spécification de colonne sont toujours déplacées à la fin de la table.

PARTITION

Vous utilisez la clause PARTITION pour identifier une partition à interroger ou à manipuler.

Une partition est identifiée en nommant toutes ses colonnes et en associant chacune à une valeur. Vous n’avez pas besoin de les spécifier dans un ordre spécifique.

À moins que vous n’ajoutiez une nouvelle partition à une table existante, vous pouvez omettre des colonnes ou des valeurs pour indiquer que l’opération s’applique à toutes les partitions correspondant au sous-ensemble de colonnes.

PARTITION ( { partition_column  [ = partition_value | LIKE pattern ] } [ , ... ] )

Paramètres

  • partition_column

    Colonne nommée en tant que colonne de partition de la table. Vous ne pouvez pas spécifier deux fois la même colonne.

  • = partition_value

    Littéral d’un type de données correspondant au type de la colonne de partition. Si vous omettez une valeur de partition, la spécification correspond à toutes les valeurs de cette colonne de partition.

  • LIKE pattern

    Cette forme est autorisée uniquement dans ALTER SHARE ADD TABLE.

    Fait correspondre la représentation sous forme de chaîne de partition_column avec pattern. pattern doit être un littéral de chaîne tel qu’il est utilisé dans LIKE.

Exemples

-- Use the PARTTIONED BY clause in a table definition
> CREATE TABLE student(university STRING,
                       major      STRING,
                       name       STRING)
         PARTITIONED BY(university, major)

> CREATE TABLE professor(name STRING)
         PARTITIONED BY(university STRING,
                        department STRING);

-- Use the PARTITION specification to INSERT into a table
> INSERT INTO student
         PARTITION(university= 'TU Kaiserslautern') (major, name)
         SELECT major, name FROM freshmen;

-- Use the partition specification to add and drop a partition
> CREATE TABLE log(date DATE, id INT, event STRING)
     USING CSV LOCATION 'dbfs:/log'
     PARTITIONED BY (date);

> ALTER TABLE log ADD PARTITION(date = DATE'2021-09-10');

> ALTER TABLE log DROP PARTITION(date = DATE'2021-09-10');

-- Drop all partitions from the named university, independent of the major.
> ALTER TABLE student DROP PARTITION(university = 'TU Kaiserslautern');