UUID 작업을 위한 함수
UUIDv7 생성
생성된 UUID에는 Unix 밀리초 단위의 48비트 타임스탬프가 먼저 오고, 그 뒤에 버전 「7」(4비트), 밀리초 내에서 UUID를 구분하기 위한 카운터(42비트, 변이 필드 「2」(2비트) 포함), 그리고 랜덤 필드(32비트)가 이어집니다.
특정 타임스탬프(unix_ts_ms)에 대해 카운터는 임의의 값에서 시작하여 타임스탬프가 변경될 때까지 새 UUID가 생성될 때마다 1씩 증가합니다. 카운터에 오버플로가 발생하면 타임스탬프 필드가 1 증가하고, 카운터는 새로운 임의의 시작값으로 재설정됩니다.
UUID 생성 함수는 동시에 실행 중인 스레드와 쿼리 전반의 모든 함수 호출에서 동일한 타임스탬프 내의 카운터 필드가 단조 증가하도록 보장합니다.
Snowflake ID 생성
생성된 Snowflake ID는 현재 Unix 타임스탬프(밀리초 단위, 41비트 + 상위 1비트는 0)와 그 뒤를 잇는 머신 ID(10비트), 그리고 동일한 밀리초 내에서 ID를 구분하기 위한 카운터(12비트)로 구성됩니다. 주어진 타임스탬프(unix_ts_ms)에서 카운터는 0에서 시작하며, 타임스탬프가 변경될 때까지 새로운 Snowflake ID가 생성될 때마다 1씩 증가합니다. 카운터가 오버플로우되면 타임스탬프 필드가 1 증가하고 카운터는 0으로 재설정됩니다.
생성된 Snowflake ID는 UNIX epoch인 1970-01-01을 기준으로 합니다. Snowflake ID의 epoch에 대한 표준이나 권고안은 없으며, 다른 시스템 구현에서는 Twitter/X(2010-11-04)나 Mastodon(2015-01-01)처럼 서로 다른 epoch를 사용할 수 있습니다.
UUIDNumToString
도입 버전: v1.1
UUID의 이진 표현을 입력으로 받아, variant(기본값은 Big-endian)로 형식을 선택적으로 지정하고, 텍스트 형식의 길이 36자의 문자열을 반환합니다.
구문
인수
binary— UUID의 이진 표현입니다.FixedString(16)variant— RFC4122에 정의된 variant 값입니다. 1 =Big-endian(기본값), 2 =Microsoft.(U)Int*
반환 값
UUID를 문자열로 반환합니다. String
예시
사용 예
Microsoft 방식
UUIDStringToNum
도입 버전: v1.1
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 형식의 36자 문자열을 받아, 해당 UUID의 이진 표현을 FixedString(16) 형식으로 반환합니다. 이때 이진 표현의 바이트 순서는 선택적으로 variant로 지정할 수 있으며, 기본값은 Big-endian입니다.
구문
인자
string— 길이가 36자인 문자열 또는 고정 길이 문자열.String또는FixedString(36)variant— RFC4122에 정의된 Variant 값입니다. 1 =Big-endian(기본값), 2 =Microsoft.(U)Int*
반환 값
string의 이진 표현을 반환합니다. FixedString(16)
예시
사용 예시
Microsoft 방식
UUIDToNum
도입 버전: v24.5
UUID를 받아 그 이진 표현을 FixedString(16)으로 반환합니다. 이때 형식은 선택적으로 variant로 지정할 수 있으며, 기본값은 Big-endian입니다.
이 함수는 두 개의 개별 함수 호출인 UUIDStringToNum(toString(uuid))을 대체하므로, UUID에서 바이트를 추출할 때 UUID를 문자열로 중간 변환할 필요가 없습니다.
문법
인자
uuid— UUID.String또는FixedStringvariant— RFC4122에 정의된 variant 값. 1 =Big-endian(기본값), 2 =Microsoft.(U)Int*
반환 값
UUID의 이진 표현을 반환합니다. FixedString(16)
예시
사용 예시
Microsoft 방식
UUIDv7ToDateTime
도입: v24.5
UUID 버전 7의 타임스탬프 부분을 반환합니다.
구문
인수
반환 값
밀리초 정밀도를 가진 타임스탬프를 반환합니다. UUID가 올바른 버전 7 UUID가 아니면 1970-01-01 00:00:00.000을 반환합니다. DateTime64(3)
예시
사용 예시
타임존 포함
dateTime64ToSnowflake
도입: v21.10
이 함수는 사용 중단(deprecated)되었으며, allow_deprecated_snowflake_conversion_functions 설정이 활성화된 경우에만 사용할 수 있습니다.
이 함수는 향후 어느 시점에 제거될 예정입니다.
대신 dateTime64ToSnowflakeID 함수를 사용하십시오.
DateTime64를 지정된 시점에서의 첫 번째 Snowflake ID로 변환합니다.
문법
인수
value— 시간 정보를 포함한 날짜.DateTime64
반환 값
해당 시점의 첫 번째 Snowflake ID에 해당하도록 변환한 입력 값을 반환합니다. Int64
예시
사용 예시
dateTime64ToSnowflakeID
도입된 버전: v24.6
DateTime64 값을 지정된 시점의 첫 번째 Snowflake ID로 변환합니다.
구문
인수
value— 시간 정보를 포함한 날짜.DateTime64epoch— 1970-01-01 이후 경과한 밀리초를 기준으로 하는 Snowflake ID의 epoch입니다. 기본값은 0(1970-01-01)입니다. Twitter/X epoch(2015-01-01)을 사용하려면 1288834974657을 지정합니다.UInt*
반환 값
입력 값을 UInt64로 변환한 값입니다.
예제
simple
dateTimeToSnowflake
도입된 버전: v21.10
이 함수는 사용이 중단(deprecated)되었으며, allow_deprecated_snowflake_conversion_functions 설정이 활성화된 경우에만 사용할 수 있습니다.
이 함수는 향후 어느 시점에 제거될 예정입니다.
대신 dateTimeToSnowflakeID 함수를 사용하십시오.
DateTime 값을 지정된 시점의 첫 번째 Snowflake ID로 변환합니다.
구문
인자
value— 시간 정보가 포함된 날짜 값.DateTime
반환 값
해당 시점의 첫 번째 Snowflake ID에 해당하는 값으로 변환하여 반환합니다. Int64
예시
사용 예시
dateTimeToSnowflakeID
도입 버전: v24.6
DateTime 값을 해당 시점의 첫 번째 Snowflake ID로 변환합니다.
구문
인수
value— 시간 정보를 포함한 날짜.DateTimeepoch— 1970-01-01 이후 밀리초 단위의 Snowflake ID epoch입니다. 기본값은 0 (1970-01-01)입니다. Twitter/X epoch(2015-01-01)을 사용하려면 1288834974657 값을 지정합니다.UInt*
반환 값
입력 값을 UInt64로 변환한 값입니다.
예시
간단한 예
dateTimeToUUIDv7
도입된 버전: v25.9
해당 시점의 DateTime 값을 UUIDv7로 변환합니다.
UUID 구조, 카운터 관리, 동시성 보장에 대한 자세한 내용은 「UUIDv7 generation」 섹션을 참고하십시오.
2025년 9월 현재, 버전 7 UUID는 초안 상태이며 향후 레이아웃이 변경될 수 있습니다.
구문
인수
value— 날짜와 시간.DateTime
반환 값
UUIDv7을 반환합니다. UUID
예시
사용 예시
동일한 타임스탬프에서 생성되는 여러 UUID
generateSnowflakeID
도입: v24.6
Snowflake ID를 생성합니다.
함수 generateSnowflakeID는 동시에 실행되는 스레드와 쿼리에서의 모든 함수 호출 간에, 타임스탬프의 카운터 필드가 단조롭게 증가하도록 보장합니다.
구현 세부 내용은 「Snowflake ID 생성」 섹션을 참조하십시오.
구문
인수
expr— 쿼리에서 함수가 여러 번 호출되는 경우 공통 부분식 제거(common subexpression elimination) 최적화를 우회하기 위해 사용하는 임의의 expression입니다. 이 expression의 값은 반환되는 Snowflake ID에 영향을 주지 않습니다. 선택 사항입니다. -machine_id— 머신 ID로, 하위 10비트가 사용됩니다. Int64. 선택 사항입니다.
반환 값
Snowflake ID를 반환합니다. UInt64
예시
사용 예시
행마다 여러 개의 Snowflake ID가 생성됨
식과 머신 ID 함께 사용하기
generateUUIDv4
도입: v1.1
구문
인자
expr— 선택 사항입니다. 쿼리에서 함수가 여러 번 호출되는 경우 공통 부분식 제거를 우회하기 위해 사용되는 임의의 표현식입니다. 이 표현식의 값은 반환되는 UUID에 아무런 영향을 미치지 않습니다.
반환 값
UUIDv4를 반환합니다. UUID
예제
사용 예제
공통 부분식 제거
generateUUIDv7
도입 버전: v24.5
UUID 구조, 카운터 관리, 동시성 보장에 대한 자세한 내용은 "UUIDv7 generation" 섹션을 참조하십시오.
2025년 9월 현재, 버전 7 UUID는 초안 상태이며, 구조가 향후 변경될 수 있습니다.
구문
인수
expr— 선택적입니다. 함수가 하나의 쿼리에서 여러 번 호출될 때 공통 부분식 제거(common subexpression elimination)를 우회하기 위해 사용하는 임의의 표현식입니다. 이 표현식의 값은 반환되는 UUID에 전혀 영향을 미치지 않습니다.Any
반환 값
UUIDv7을 반환합니다. UUID
예제
사용 예제
공통 부분식 제거
snowflakeIDToDateTime
도입된 버전: v24.6
Snowflake ID의 타임스탬프 부분을 DateTime 타입 값으로 반환합니다.
구문
인수
value— Snowflake ID.UInt64epoch— 선택 사항. 1970-01-01 이후 경과한 밀리초 단위의 Snowflake ID epoch입니다. 기본값은 0(1970-01-01)입니다. Twitter/X epoch(2015-01-01)을 사용하려면 1288834974657을 입력합니다.UInt*time_zone— 선택 사항. Timezone. 함수는 해당 시간대를 기준으로time_string을 해석합니다.String
반환 값
value의 타임스탬프 구성 요소를 반환합니다. DateTime
예시
사용 예시
snowflakeIDToDateTime64
도입된 버전: v24.6
Snowflake ID의 타임스탬프 구성 요소를 DateTime64 타입의 값으로 반환합니다.
구문
인자
value— Snowflake ID.UInt64epoch— 선택 사항입니다. 1970-01-01 이후 밀리초 단위로 표현한 Snowflake ID의 epoch입니다. 기본값은 0(1970-01-01)입니다. Twitter/X epoch(2015-01-01)을 사용하려면 1288834974657을 입력합니다.UInt*time_zone— 선택 사항입니다. Timezone. 함수는 해당 시간대에 따라time_string을 파싱합니다.String
반환 값
value의 타임스탬프 구성 요소를 스케일 = 3, 즉 밀리초 정밀도의 DateTime64로 반환합니다. DateTime64
예시
사용 예시
snowflakeToDateTime
도입 버전: v21.10
이 함수는 더 이상 사용되지 않는(deprecated) 함수이며, allow_deprecated_snowflake_conversion_functions 설정이 활성화된 경우에만 사용할 수 있습니다.
이 함수는 향후 어느 시점에 제거될 예정입니다.
대신 snowflakeIDToDateTime 함수를 사용하십시오.
Snowflake ID의 타임스탬프 구성 요소를 DateTime 형식으로 추출합니다.
구문
인수
value— Snowflake ID입니다.Int64time_zone— 옵션입니다. Timezone. 함수는time_string을 해당 시간대에 따라 파싱합니다.String
반환 값
value의 타임스탬프 구성 요소를 반환합니다. DateTime
예시
사용 예시
snowflakeToDateTime64
도입 버전: v21.10
이 함수는 더 이상 사용되지 않는 함수이며, allow_deprecated_snowflake_conversion_functions 설정이 활성화된 경우에만 사용할 수 있습니다.
이 함수는 향후 어느 시점에 제거될 예정입니다.
대신 snowflakeIDToDateTime64 함수를 사용하십시오.
Snowflake ID의 타임스탬프 구성 요소를 DateTime64 형식으로 추출합니다.
구문
인수
value— Snowflake ID.Int64time_zone— 선택적 인수입니다. Timezone. 함수는time_string을 해당 타임존에 따라 파싱합니다.String
반환 값
value의 타임스탬프 구성 요소를 반환합니다. DateTime64(3)
예시
사용 예시
toUUIDOrDefault
도입 버전: v21.1
String 값을 UUID 타입으로 변환합니다. 변환에 실패하면 오류를 발생시키는 대신 기본 UUID 값을 반환합니다.
이 함수는 표준 UUID 형식(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)의 길이 36자의 문자열을 해석하려고 시도합니다.
문자열을 유효한 UUID로 변환할 수 없는 경우, 함수는 지정된 기본 UUID 값을 반환합니다.
구문
인수
string— UUID로 변환할 길이 36자의 String 또는 FixedString(36) 문자열.default— 첫 번째 인수를 UUID 타입으로 변환할 수 없을 때 반환할 UUID 값.
반환 값
변환에 성공하면 변환된 UUID를 반환하고, 실패하면 기본 UUID를 반환합니다. UUID
예시
성공적으로 변환되면 파싱된 UUID를 반환합니다
변환이 실패하면 기본 UUID를 반환합니다
toUUIDOrNull
도입: v20.12
입력 값을 UUID 타입의 값으로 변환하지만, 오류가 발생하는 경우 NULL을 반환합니다.
toUUID와 동일하지만, 변환 오류 시 예외를 발생시키는 대신 NULL을 반환합니다.
지원되는 인수:
- 표준 형식의 UUID 문자열 표현(8-4-4-4-12개의 16진수 숫자).
- 하이픈이 없는 UUID 문자열 표현(32개의 16진수 숫자).
지원되지 않는 인수(다음의 경우 NULL 반환):
- 잘못된 문자열 형식.
- 문자열이 아닌 데이터 타입.
- 올바르지 않은 형식의 UUID.
구문
인수
x— UUID의 문자열 표현.String
반환 값
성공하면 UUID 값을 반환하고, 그렇지 않으면 NULL을 반환합니다. UUID 또는 NULL
예시
사용 예시