Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

UUID

범용 고유 식별자(UUID)는 레코드를 식별하는 데 사용되는 16바이트 값입니다. UUID에 대한 자세한 내용은 Wikipedia를 참조하십시오.

UUIDv4, UUIDv7 등 다양한 UUID 변형이 존재하지만(RFC 9562 참조), ClickHouse는 삽입된 UUID가 특정 변형을 준수하는지 검증하지 않습니다. UUID는 내부적으로 16개의 임의 바이트로 이루어진 시퀀스로 처리되며, SQL 수준에서는 8-4-4-4-12 표현을 사용합니다.

예시 UUID 값:

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

기본 UUID는 모든 자리가 0입니다. 예를 들어 새 레코드가 삽입되었지만 UUID 컬럼 값이 지정되지 않은 경우에 사용됩니다:

00000000-0000-0000-0000-000000000000

예시:

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

우회 방법으로, UUID를 뒷부분에서 추출한 타임스탬프로 변환할 수 있습니다:

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;

결과(같은 데이터가 삽입되었다고 가정):

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)

UUID 생성

ClickHouse는 무작위 UUID 버전 4 값을 생성하는 generateUUIDv4 함수를 제공합니다.

사용 예시

예시 1

이 예시에서는 UUID 컬럼이 있는 테이블을 생성하고 해당 테이블에 값을 삽입하는 방법을 보여 줍니다.

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

예시 2

이 예시에서는 레코드가 삽입될 때 UUID 컬럼 값이 지정되지 않으므로, 즉 기본 UUID 값이 삽입됩니다:

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

제한 사항

UUID 데이터 타입은 String 데이터 타입에서 지원하는 함수만 지원합니다(예: min, max, count).

UUID 데이터 타입은 산술 연산(예: abs)이나 sum, avg와 같은 집계 함수를 지원하지 않습니다.

Navigation