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-a6006ad3dba0El 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-000000000000Ejemplo:
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;┌─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:
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):
┌─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.
CREATE TABLE t_uuid (x UUID, y String) ENGINE=TinyLog
INSERT INTO t_uuid SELECT generateUUIDv4(), 'Example 1'
SELECT * FROM t_uuid┌────────────────────────────────────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.