Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

UUID

Un identificador único universal (UUID) es un valor de 16 bytes que se utiliza para identificar registros. Para obtener información detallada sobre los UUIDs, consulte Wikipedia.

Aunque existen distintas variantes de UUID, por ejemplo UUIDv4 y UUIDv7 (consulte RFC 9562), ClickHouse no valida que los UUIDs insertados se ajusten a una variante concreta. Los UUIDs se tratan internamente como una secuencia de 16 bytes aleatorios con representación 8-4-4-4-12 en SQL.

Valor de UUID de ejemplo:

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

El UUID predeterminado está compuesto íntegramente por ceros. Se utiliza, por ejemplo, cuando se inserta un nuevo registro pero no se especifica ningún valor para una columna UUID:

00000000-0000-0000-0000-000000000000

Ejemplo:

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 │
└──────────────────────────────────────┘

Como solución alternativa, el UUID puede convertirse en una marca temporal extraída de la segunda mitad:

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;

Resultado (suponiendo que se insertan los mismos datos):

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)

Generación de UUIDs

ClickHouse proporciona la función generateUUIDv4 para generar UUID aleatorios de la versión 4.

Ejemplo de uso

Ejemplo 1

Este ejemplo muestra cómo crear una tabla con una columna UUID e insertar un valor en la tabla.

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 │
└──────────────────────────────────────┴───────────┘

Ejemplo 2

En este ejemplo, no se especifica ningún valor para la columna UUID al insertar el registro; es decir, se inserta el valor UUID predeterminado:

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 │
└──────────────────────────────────────┴───────────┘

Restricciones

El tipo de dato UUID solo admite las funciones que también admite el tipo de dato String (por ejemplo, min, max y count).

El tipo de dato UUID no es compatible con operaciones aritméticas (por ejemplo, abs) ni con funciones agregadas, como sum y avg.

Navigation