Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

UUID

Un identifiant universellement unique (UUID) est une valeur de 16 octets utilisée pour identifier des enregistrements. Pour plus d’informations sur les UUID, consultez Wikipedia.

Bien qu’il existe différentes variantes d’UUID, par exemple UUIDv4 et UUIDv7 (voir RFC 9562), ClickHouse ne vérifie pas que les UUID insérés sont conformes à une variante particulière. En interne, les UUID sont traités comme une séquence de 16 octets aléatoires, avec une représentation 8-4-4-4-12 au niveau SQL.

Exemple de valeur UUID :

61f0c404-5cb3-11e7-907b-a6006ad3dba0

L’UUID par défaut est entièrement à zéro. Il est utilisé, par exemple, lorsqu’un nouvel enregistrement est inséré mais qu’aucune valeur n’est spécifiée pour une colonne UUID :

00000000-0000-0000-0000-000000000000

Exemple :

Querysql
CREATE TABLE tab (uuid UUID) ENGINE = MergeTree PRIMARY KEY (uuid);

INSERT INTO tab SELECT generateUUIDv7() FROM numbers(2);
INSERT INTO tab SELECT generateUUIDv7() FROM numbers(2);
INSERT INTO tab SELECT generateUUIDv7() FROM numbers(2);
INSERT INTO tab SELECT generateUUIDv7() FROM numbers(2);
INSERT INTO tab SELECT generateUUIDv7() FROM numbers(2);
SELECT * FROM tab;
Responsetext
┌─uuid─────────────────────────────────┐
│ 019d2555-7874-7e9d-a284-9b45a0b2f165 │
│ 019d2555-7874-7e9d-a284-9b46c3353be7 │
│ 019d2555-7878-77fc-a36f-4081aa58ec2b │
│ 019d2555-7878-77fc-a36f-40826555fb9b │
│ 019d2555-7870-7432-ba62-5250ac595328 │
│ 019d2555-7870-7432-ba62-5251da22bd19 │
│ 019d2555-786c-73e9-a031-4a7936df7d56 │
│ 019d2555-786c-73e9-a031-4a7a35a9544f │
│ 019d2555-7868-7333-89d1-2bd1639899c3 │
│ 019d2555-7868-7333-89d1-2bd297eb7d42 │
└──────────────────────────────────────┘

Pour contourner ce problème, l’UUID peut être converti en horodatage extrait de la seconde moitié :

Querysql
CREATE TABLE tab (uuid UUID) ENGINE = MergeTree PRIMARY KEY (UUIDv7ToDateTime(uuid));
-- Or alternatively:                      [...] PRIMARY KEY (toStartOfHour(UUIDv7ToDateTime(uuid)));

INSERT INTO tab SELECT generateUUIDv7() FROM numbers(2);
INSERT INTO tab SELECT generateUUIDv7() FROM numbers(2);
INSERT INTO tab SELECT generateUUIDv7() FROM numbers(2);
INSERT INTO tab SELECT generateUUIDv7() FROM numbers(2);
INSERT INTO tab SELECT generateUUIDv7() FROM numbers(2);
SELECT * FROM tab;

Résultat (en supposant que les mêmes données ont été insérées) :

Responsetext
┌─uuid─────────────────────────────────┐
│ 019d2555-7868-7333-89d1-2bd1639899c3 │
│ 019d2555-7868-7333-89d1-2bd297eb7d42 │
│ 019d2555-786c-73e9-a031-4a7936df7d56 │
│ 019d2555-786c-73e9-a031-4a7a35a9544f │
│ 019d2555-7870-7432-ba62-5250ac595328 │
│ 019d2555-7870-7432-ba62-5251da22bd19 │
│ 019d2555-7874-7e9d-a284-9b45a0b2f165 │
│ 019d2555-7874-7e9d-a284-9b46c3353be7 │
│ 019d2555-7878-77fc-a36f-4081aa58ec2b │
│ 019d2555-7878-77fc-a36f-40826555fb9b │
└──────────────────────────────────────┘

ORDER BY (UUIDv7ToDateTime(uuid), uuid)

Génération d’UUIDs

ClickHouse fournit la fonction generateUUIDv4 pour générer des UUID version 4 aléatoires.

Exemple d’utilisation

Exemple 1

Cet exemple illustre la création d’une table comportant une colonne UUID, ainsi que l’insertion d’une valeur dans cette table.

Querysql
CREATE TABLE t_uuid (x UUID, y String) ENGINE=TinyLog

INSERT INTO t_uuid SELECT generateUUIDv4(), 'Example 1'

SELECT * FROM t_uuid
Responsetext
┌────────────────────────────────────x─┬─y─────────┐
│ 417ddc5d-e556-4d27-95dd-a34d84e46a50 │ Example 1 │
└──────────────────────────────────────┴───────────┘

Exemple 2

Dans cet exemple, aucune valeur de la colonne UUID n’est spécifiée lors de l’insertion de l’enregistrement, c’est-à-dire que la valeur UUID par défaut est insérée :

INSERT INTO t_uuid (y) VALUES ('Example 2')

SELECT * FROM t_uuid
┌────────────────────────────────────x─┬─y─────────┐
│ 417ddc5d-e556-4d27-95dd-a34d84e46a50 │ Example 1 │
│ 00000000-0000-0000-0000-000000000000 │ Example 2 │
└──────────────────────────────────────┴───────────┘

Restrictions

Le type de données UUID ne prend en charge que les fonctions prises en charge par le type de données String (par exemple, min, max et count).

Le type de données UUID ne peut pas être utilisé avec des opérations arithmétiques (par exemple, abs) ni avec des fonctions d’agrégation, telles que sum et avg.

Navigation