인코딩 함수
bech32Decode
도입 버전: v25.6
bech32 또는 bech32m 알고리즘으로 생성된 Bech32 주소 문자열을 디코딩합니다.
인코딩 함수와 달리 Bech32Decode는 패딩된 FixedString 값을 자동으로 처리합니다.
구문
인수
address— 디코딩할 Bech32 문자열입니다.String또는FixedString
반환 값
문자열을 인코딩하는 데 사용된 (hrp, data)로 구성된 튜플을 반환합니다. 여기서 data는 바이너리 형식입니다. Tuple(String, String)
예시
주소 디코딩
테스트넷 주소
bech32Encode
도입 버전: v25.6
Bech32 또는 Bech32m 알고리즘을 사용하여 이진 데이터 문자열과 사람이 읽을 수 있는 부분(HRP)을 함께 인코딩합니다.
FixedString 데이터 타입을 사용할 때 값이 행을 완전히 채우지 않으면 NULL 문자로 패딩됩니다.
bech32Encode 함수는 hrp 인수에 대해서는 이를 자동으로 처리하지만, data 인수에 대해서는 값이 패딩되어 있으면 안 됩니다.
이러한 이유로, 모든 데이터 값의 길이가 동일하며 FixedString 컬럼의 길이도 그에 맞게 설정되었음을 확신하지 않는 한
데이터 값에 FixedString 데이터 타입을 사용하는 것은 권장되지 않습니다.
구문
인수
hrp— 코드의 「human-readable part」를 지정하는,1 - 83개의 소문자 문자로 이루어진 String입니다. 일반적으로 'bc' 또는 'tb'입니다.String또는FixedStringdata— 인코딩할 이진 데이터를 담는 String입니다.String또는FixedStringwitver— 선택 사항입니다. witness 버전(기본값 = 1)입니다. 실행할 알고리즘의 버전을 지정하는UInt*입니다. Bech32에는0, Bech32m에는1이상을 사용합니다.UInt*
반환 값
human-readable part, 항상 '1'인 구분 문자, 데이터 부분으로 구성된 Bech32 주소 문자열을 반환합니다. 문자열 길이는 90자를 초과하지 않습니다. 알고리즘이 입력값으로부터 유효한 주소를 생성하지 못하면 빈 문자열을 반환합니다. String
예시
기본 Bech32m
Bech32 알고리즘
사용자 정의 HRP
bin
도입 버전: v21.8
인수의 이진 표현을 포함하는 문자열을 다음의 타입별 규칙에 따라 반환합니다:
| Type | Description |
|---|---|
(U)Int* | 최상위 비트에서 최하위 비트 순서(빅엔디언 또는 「사람이 읽기 쉬운」 순서)로 이진수를 출력합니다. 가장 의미 있는 0이 아닌 바이트부터 시작하며(앞쪽의 0 바이트는 생략됨), 선행 비트가 0이더라도 각 바이트마다 항상 8자리 2진수를 출력합니다. |
Date and DateTime | 해당 정수 값으로 표현됩니다(Date는 epoch 이후 일 수, DateTime은 Unix 타임스탬프 값). |
String and FixedString | 모든 바이트를 단순히 8비트 이진수로 인코딩합니다. 0 바이트도 생략하지 않습니다. |
Float* and Decimal | 메모리상의 표현 그대로 인코딩합니다. 지원 아키텍처가 리틀엔디언이므로 리틀엔디언으로 인코딩합니다. 앞/뒤의 0 바이트도 생략하지 않습니다. |
UUID | 빅엔디언 순서의 문자열로 인코딩됩니다. |
구문
인수
반환 값
인수의 2진 표현을 나타내는 문자열을 반환합니다. String
예시
단순 정수값
Float32 수
Float64 수
UUID 변환
bitPositionsToArray
도입 버전: v21.7
이 함수는 부호 없는 정수의 이진 표현에서 값이 1인 비트의 위치를 (오름차순으로) 반환합니다. 부호 있는 정수 입력은 먼저 부호 없는 정수로 캐스팅됩니다.
구문
인수
arg— 정수형 값.(U)Int*
반환 값
입력 값의 이진 표현에서 1로 설정된 비트의 위치들을 오름차순으로 정렬한 배열을 반환합니다. Array(UInt64)
예시
단일 비트만 설정된 경우
모든 비트가 1로 설정됨
bitmaskToArray
도입 버전: v1.1
이 FUNCTION은 정수를 2의 거듭제곱의 합으로 분해합니다. 2의 거듭제곱은 오름차순으로 정렬된 배열로 반환됩니다.
구문
인수
num— 정수 값.(U)Int*
반환 값
입력 숫자의 합이 되는 2의 거듭제곱들을 오름차순으로 정렬한 배열을 반환합니다. Array(UInt64)
예제
기본 예제
단일 2의 거듭제곱수
bitmaskToList
도입 버전: v1.1
bitmaskToArray와 유사하지만, 2의 거듭제곱 값을 쉼표로 구분된 문자열로 반환합니다.
구문
인수
num— 정수 값.(U)Int*
반환 값
2의 거듭제곱을 콤마로 구분한 문자열을 반환합니다. String
예제
기본 예제
char
도입 버전: v20.1
각 바이트의 값이 해당 인자의 값과 같고, 길이가 전달된 인자 개수와 동일한 문자열을 반환합니다. 숫자형 인자를 여러 개 전달할 수 있습니다.
인자 값이 UInt8 데이터 타입의 범위를 벗어나면, 잠재적인 반올림 및 오버플로와 함께 UInt8로 변환됩니다.
구문
인자
num1[, num2[, num3 ...]]— 정수로 해석되는 숫자형 인자입니다.(U)Int8/16/32/64또는Float*
반환 값
지정된 바이트를 표현하는 문자열을 반환합니다. String
예제
기본 예제
임의 인코딩 생성
hex
도입 시점: v1.1
다음과 같은 타입별 로직에 따라 인수의 16진수 표현을 포함하는 문자열을 반환합니다:
| Type | Description |
|---|---|
(U)Int* | 가장 상위 비트부터 하위 비트까지의 16진수 숫자(「nibbles」)를 출력합니다(빅 엔디언, 즉 사람이 읽기 쉬운 순서). 가장 상위의 0이 아닌 바이트부터 시작하며(선행 0 바이트는 생략), 각 바이트는 선행 숫자가 0이더라도 항상 두 자리 16진수로 출력합니다. |
Date and DateTime | 각각 정수 값으로 포맷됩니다(Date는 epoch 이후 일 수, DateTime은 유닉스 타임스탬프 값). |
String and FixedString | 모든 바이트를 단순히 두 자리 16진수 숫자로 인코딩합니다. 0 바이트도 생략되지 않습니다. |
Float* and Decimal | 메모리 상의 표현 그대로 인코딩됩니다. ClickHouse는 값을 내부적으로 항상 리틀 엔디언으로 표현하므로, 해당 순서대로 인코딩됩니다. 앞이나 뒤에 오는 0 바이트도 생략되지 않습니다. |
UUID | 빅 엔디언 순서의 문자열로 인코딩됩니다. |
이 함수는 대문자 A-F를 사용하며, 접두사(예: 0x)나 접미사(예: h)는 사용하지 않습니다.
Syntax
인수
반환 값
인수의 16진수 표현으로 된 문자열을 반환합니다. String
예시
단순 정수
Float32 부동소수점 수
Float64 부동소수점 수
UUID 변환
hilbertDecode
도입된 버전: v24.6
Hilbert 곡선 인덱스를 다시 부호 없는 정수 튜플로 디코딩하여, 다차원 공간에서의 좌표를 나타냅니다.
hilbertEncode 함수와 마찬가지로, 이 함수도 두 가지 동작 모드를 제공합니다.
- Simple
- Expanded
Simple 모드
최대 2개의 부호 없는 정수를 인자로 받아 UInt64 코드를 생성합니다.
Expanded 모드
첫 번째 인자로 범위 마스크(튜플)를, 그 외 인자로는 최대 2개의 부호 없는 정수를 받습니다. 마스크에 있는 각 숫자는 해당 인자가 왼쪽으로 시프트될 비트 수를 설정하여, 사실상 인자를 해당 범위 내에서 스케일링합니다.
범위 확장은 범위(또는 카디널리티)가 크게 다른 인자들에 대해 비슷한 분포가 필요할 때 유용할 수 있습니다. 예를 들어: 'IP Address' (0...FFFFFFFF)와 'Country code' (0...FF)와 같은 경우입니다. hilbertEncode 함수와 마찬가지로, 최대 8개의 숫자로 제한됩니다.
Syntax
인수
tuple_size—2이하의 정수형 값.UInt8/16/32/64또는Tuple(UInt8/16/32/64)code—UInt64코드.UInt64
반환 값
지정된 크기의 튜플을 반환합니다. Tuple(UInt64)
예제
단순 모드
단일 인수
확장 모드
컬럼 사용법
hilbertEncode
도입된 버전: v24.6
부호 없는 정수 목록에 대해 Hilbert 곡선(Hilbert Curve)의 코드를 계산합니다.
이 FUNCTION은 두 가지 동작 모드를 가집니다.
- 단순 모드(Simple)
- 확장 모드(Expanded)
단순 모드(Simple mode)
최대 2개의 부호 없는 정수를 인수로 받아 UInt64 코드를 생성합니다.
확장 모드(Expanded mode)
범위 마스크(Tuple)를 첫 번째 인수로, 그리고 최대 2개의 부호 없는 정수를 다른 인수로 받습니다.
마스크의 각 숫자는 해당 인수를 왼쪽으로 시프트할 비트 수를 지정하여, 결과적으로 인수를 해당 범위에 맞게 스케일링합니다.
구문
인수(Arguments)
args— 최대 2개의UInt값 또는UInt타입의 컬럼입니다.UInt8/16/32/64range_mask— 확장 모드에서, 최대 2개의UInt값 또는UInt타입의 컬럼입니다.UInt8/16/32/64
반환 값
UInt64 코드를 반환합니다. UInt64
예제
단순 모드
확장 모드
단일 인자
단일 인수 확장형
컬럼 사용 방법
mortonDecode
도입 버전: v24.6
Morton 인코딩(ZCurve)을 해당 부호 없는 정수 튜플로 디코딩합니다.
mortonEncode 함수와 마찬가지로, 이 함수에는 두 가지 동작 모드가 있습니다:
- Simple
- Expanded
Simple 모드
첫 번째 인수로 결과 튜플의 크기를, 두 번째 인수로 코드를 받습니다.
Expanded 모드
첫 번째 인수로 범위 마스크(튜플)를, 두 번째 인수로 코드를 받습니다. 마스크의 각 숫자는 범위 축소 정도를 설정합니다:
1- 축소 없음2- 2배 축소3- 3배 축소 ⋮- 최대 8배 축소.
범위 확장은 범위(또는 카디널리티)가 크게 다른 인수들에 대해 유사한 분포가 필요할 때 유용합니다.
예: 「IP Address」 (0...FFFFFFFF)와 「Country code」 (0...FF). 인코딩 함수와 마찬가지로,
최대 8개의 숫자까지만 허용됩니다.
Syntax
인수
tuple_size— 8을 넘지 않는 정수 값입니다.UInt8/16/32/64range_mask— 확장 모드에서 각 인수에 대한 마스크입니다. 마스크는 부호 없는 정수의 튜플입니다. 마스크의 각 숫자는 범위 축소 수준을 설정합니다.Tuple(UInt8/16/32/64)code— UInt64 코드입니다.UInt64
반환 값
지정된 크기의 튜플을 반환합니다. Tuple(UInt64)
예시
단순 모드
단일 인자
확장 모드: 하나의 인자 축소
컬럼 사용법
mortonEncode
도입된 버전: v24.6
부호 없는 정수 목록에 대해 Morton 인코딩(ZCurve)을 계산합니다.
이 FUNCTION은 두 가지 동작 모드를 지원합니다.
- Simple
- Expanded*
Simple mode
최대 8개의 부호 없는 정수를 인수로 받아 UInt64 코드를 생성합니다.
Expanded mode
범위 마스크(Tuple)를 첫 번째 인수로, 최대 8개의 부호 없는 정수를 나머지 인수로 받습니다.
마스크에 있는 각 숫자는 범위 확장 정도를 설정합니다.
- 1 - 확장 없음
- 2 - 2배 확장
- 3 - 3배 확장 ⋮
- 최대 8배까지 확장.
구문
인자
args— 최대 8개의 부호 없는 정수 또는 앞에서 언급한 타입의 컬럼입니다.UInt8/16/32/64range_mask— 확장 모드에서 각 인자에 대한 마스크입니다. 마스크는1-8범위의 부호 없는 정수로 구성된 튜플입니다. 마스크의 각 숫자는 범위 축소 정도를 설정합니다.Tuple(UInt8/16/32/64)
반환 값
UInt64 코드를 반환합니다. UInt64
예시
단순 모드
확장 모드
단일 인자
단일 인수 확장
컬럼 사용법
sqidDecode
도입된 버전: v24.1
sqid를 다시 숫자 배열로 변환합니다.
구문
인수
sqid— 디코딩할 sqid입니다.String
반환 값
sqid에서 디코딩한 숫자 배열을 반환합니다. Array(UInt64)
예시
사용 예시
sqidEncode
도입된 버전: v24.1
숫자를 sqid 형식의, YouTube와 유사한 ID 문자열로 변환합니다.
구문
별칭: sqid
인수
n1[, n2, ...]— 임의 개수의 숫자.UInt8/16/32/64
반환값
해시 ID를 나타내는 String 값을 반환합니다.
예시
사용 예시
unbin
도입된 버전: v21.8
인수의 이진 숫자를 두 자리씩 묶어 각각을 하나의 숫자로 해석하고, 이 숫자가 나타내는 바이트로 변환합니다. 이 함수는 bin과 반대되는 작업을 수행합니다.
숫자형 인수의 경우 unbin()은 bin()의 역을 반환하지 않습니다. 결과를 숫자로 변환해야 하는 경우 reverse 및 reinterpretAs<Type> 함수를 사용할 수 있습니다.
clickhouse-client 내에서 unbin이 호출되는 경우, 이진 문자열은 UTF-8을 사용하여 표시됩니다.
이진 숫자 0과 1을 지원합니다. 이진 숫자의 개수는 8의 배수일 필요가 없습니다. 인수 문자열에 이진 숫자 이외의 문자가 포함되어 있으면,
결과는 정의되지 않습니다(예외는 발생하지 않습니다).
구문
인수
arg— 임의 개수의 2진 숫자를 포함하는 문자열입니다.String
반환값
바이너리 문자열(BLOB)을 반환합니다. String
예제
기본 사용법
숫자형으로 변환
unhex
도입 버전: v1.1
hex의 반대 연산을 수행합니다. 인수에 있는 16진수 숫자 쌍 각각을 숫자로 해석한 다음, 그 숫자가 나타내는 바이트로 변환합니다. 반환 값은 바이너리 문자열(BLOB)입니다.
결과를 숫자로 변환하려면 reverse 및 reinterpretAs<Type> 함수를 사용할 수 있습니다.
clickhouse-client는 문자열을 UTF-8로 해석합니다.
이로 인해 hex가 반환하는 값이 예상과 다르게 표시될 수 있습니다.
대문자와 소문자 A-F 모두를 지원합니다.
16진수 숫자의 개수는 짝수일 필요가 없습니다.
개수가 홀수인 경우 마지막 숫자는 00-0F 바이트의 하위 절반(4비트)으로 해석됩니다.
인수 문자열에 16진수 숫자가 아닌 다른 문자가 포함된 경우, 구현에 따라 정의된 결과가 반환됩니다(예외는 발생하지 않습니다).
숫자 인수에 대해서는 hex(N)의 역연산이 unhex()에 의해 수행되지 않습니다.
문법
인수
arg— 임의 개수의 16진수 숫자를 포함하는 문자열입니다.String또는FixedString
반환 값
이진 문자열(BLOB)을 반환합니다. String
예제
기본 사용법
숫자로 변환