エンコード関数
bech32Decode
導入バージョン: v25.6
bech32 または bech32m アルゴリズムのいずれかによって生成された Bech32 アドレス文字列をデコードします。
encode 関数とは異なり、Bech32Decode はパディング済みの FixedString 型を自動的に処理します。
構文
引数
address— デコードする Bech32 形式の文字列。StringまたはFixedString
戻り値
文字列のエンコードに使用された (hrp, data) からなるタプルを返します。data はバイナリ形式です。Tuple(String, String)
例
アドレスのデコード
テストネットアドレス
bech32Encode
導入バージョン: v25.6
バイナリデータ文字列と human-readable part(HRP)を、Bech32 または Bech32m アルゴリズムでエンコードします。
FixedString データ型を使用する場合、値が列の長さを満たさないときはヌル文字でパディングされます。
bech32Encode 関数は hrp 引数についてはこのパディングを自動的に処理しますが、data 引数については値がパディングされていてはいけません。
このため、すべての値が同じ長さであることが確実であり、かつ FixedString 列の長さもそれに合わせて設定している場合を除き、
データ値に FixedString データ型を使用することは推奨されません。
構文
引数
hrp— コードの「human-readable part(人間可読部)」を指定する、小文字のみからなる1〜83文字の文字列。通常は 'bc' または 'tb'。StringまたはFixedStringdata— エンコード対象のバイナリデータを表す文字列。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 の場合でも各バイトについて常に 8 桁のビット列を出力します。 |
Date and DateTime | 対応する整数値としてフォーマットされます(Date はエポックからの日数、DateTime は Unix タイムスタンプ値)。 |
String and FixedString | すべてのバイトは単純に 8 ビットの 2 進数としてエンコードされます。ゼロバイトも省略されません。 |
Float* and Decimal | メモリ上の表現そのものとしてエンコードされます。サポートしているアーキテクチャはリトルエンディアンであるため、リトルエンディアンでエンコードされます。先頭および末尾のゼロバイトも省略されません。 |
UUID | ビッグエンディアン順の文字列としてエンコードされます。 |
構文
引数
戻り値
引数の 2 進数表現を含む文字列を返します。String
例
単純な整数
Float32 型の数値
Float64 数値
UUID 変換
bitPositionsToArray
導入バージョン: v21.7
この関数は、符号なし整数の2進表現における値が1のビットの位置を(昇順で)返します。 符号付き整数の入力は、まず符号なし整数にキャストされます。
構文
引数
arg— 整数値。(U)Int*
戻り値
入力の2進表現において、ビット値が 1 となっている位置を昇順に並べた配列を返します。Array(UInt64)
例
単一ビットのみがセットされている場合
全ビットが 1
bitmaskToArray
導入バージョン: v1.1
この関数は、整数を 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 進数字(「ニブル」)を出力します。最上位の非ゼロバイトから開始し(先頭のゼロバイトは省略されます)が、各バイトについては先頭の桁が 0 であっても必ず 2 桁を出力します。 |
Date および DateTime | 対応する整数としてフォーマットされます(Date の場合はエポックからの日数、DateTime の場合は Unix タイムスタンプの値)。 |
String および FixedString | すべてのバイトが単純に 2 桁の 16 進数としてエンコードされます。0 バイトも省略されません。 |
Float* および Decimal | メモリ上の表現としてエンコードされます。ClickHouse は内部的に値を常にリトルエンディアンで表現するため、その形式でエンコードされます。先頭および末尾の 0 バイトも省略されません。 |
UUID | ビッグエンディアン順の文字列としてエンコードされます。 |
この関数は A-F の大文字を使用し、プレフィックス(0x など)やサフィックス(h など)は使用しません。
構文
引数
戻り値
引数を16進数で表現した文字列を返します。String
例
単純な整数
Float32 型の数値
Float64 型の数値
UUID 変換
hilbertDecode
導入バージョン: v24.6
Hilbert 曲線のインデックスを復号し、多次元空間における座標を表す符号なし整数のタプルに変換します。
hilbertEncode 関数と同様に、この関数には 2 つの動作モードがあります。
- シンプル
- 拡張
シンプルモード
最大 2 個までの符号なし整数を引数として受け取り、UInt64 コードを生成します。
拡張モード
最初の引数として範囲マスク(タプル)を受け取り、他の引数として最大 2 個までの符号なし整数を 受け取ります。マスク内の各数値は、それに対応する引数を左シフトするビット数を指定し、 事実上、その引数をその範囲内でスケーリングします。
範囲の拡張は、範囲(またはカーディナリティ)が大きく異なる引数間で
類似した分布を得たい場合に有用です。例: 「IP アドレス」(0...FFFFFFFF) と
「国コード」(0...FF)。エンコード関数と同様に、最大 8 個の数値までに制限されています。
構文
引数
tuple_size—2以下の整数値。UInt8/16/32/64またはTuple(UInt8/16/32/64)code—UInt64型のコード。UInt64
返り値
指定されたサイズのタプルを返します。Tuple(UInt64)
例
シンプルモード
単一の引数
拡張モード
列の利用
hilbertEncode
導入バージョン: v24.6
符号なし整数のリストに対して、Hilbert 曲線のコードを計算します。
この関数には 2 つの動作モードがあります。
- Simple
- Expanded
Simple モード
最大 2 個の符号なし整数を引数として受け取り、UInt64 のコードを生成します。
Expanded モード
最初の引数として範囲マスク (Tuple) を、 その他の引数として最大 2 個の符号なし整数 を受け取ります。
マスク中のそれぞれの数値は、対応する引数を左シフトするビット数を指定し、 対応する引数をその範囲内でスケーリングします。
構文
引数
args— 最大 2 つのUInt値、またはUInt型のカラム。UInt8/16/32/64range_mask— 拡張モードでは、最大 2 つのUInt値、またはUInt型のカラム。UInt8/16/32/64
戻り値
UInt64 のコードを返します。UInt64
例
シンプルモード
拡張モード
単一引数
展開後の単一引数
列の使用方法
mortonDecode
導入バージョン: v24.6
Morton 符号化 (ZCurve) を対応する符号なし整数タプルにデコードします。
mortonEncode 関数と同様に、この関数には 2 つの動作モードがあります。
- シンプル
- 拡張
シンプルモード
最初の引数として結果タプルのサイズ、2 番目の引数としてコードを受け取ります。
拡張モード
最初の引数として範囲マスク (タプル)、2 番目の引数としてコードを受け取ります。 マスク内の各数値は、範囲縮小の度合いを設定します。
1- 縮小なし2- 2 倍の縮小3- 3 倍の縮小 ⋮- 最大 8 倍の縮小。
引数ごとの範囲 (またはカーディナリティ) が大きく異なる場合に、類似した分布が必要なときは、
範囲の拡張を行うことが有用です。例: 'IP Address' (0...FFFFFFFF) と
'Country code' (0...FF)。エンコード関数と同様に、これは最大 8 個の数値までに制限されます。
構文
引数
tuple_size— 8 以下の整数値。UInt8/16/32/64range_mask— 拡張モードにおいて、各引数に対するマスク。マスクは符号なし整数のタプルで、マスク内の各数値で範囲の縮小量を設定する。Tuple(UInt8/16/32/64)code— UInt64 のコード。UInt64
戻り値
指定したサイズのタプルを返す。 Tuple(UInt64)
例
シンプルモード
単一引数
拡張モード:引数を 1 つにまとめる
カラムの使用
mortonEncode
導入バージョン: v24.6
符号なし整数のリストに対して、Morton 符号化(ZCurve)を計算します。
この関数には 2 つの動作モードがあります:
- シンプル
- 拡張
シンプルモード
最大 8 個の符号なし整数を引数として受け取り、UInt64 のコード値を生成します。
拡張モード
最初の引数として範囲マスク(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 のような ID 文字列)にエンコードします。
構文
エイリアス: sqid
引数
n1[, n2, ...]— 任意の数の数値。UInt8/16/32/64
戻り値
ハッシュ ID を返します。型は String です。
例
使用例
unbin
導入バージョン: v21.8
引数内の各 2 ビットの組を数値として解釈し、その数値で表されるバイトへ変換します。この関数は bin と逆の処理を行います。
数値の引数に対しては、unbin() は bin() の逆変換を返しません。結果を数値に変換したい場合は、reverse および reinterpretAs<Type> 関数を使用できます。
clickhouse-client 内から unbin が呼び出された場合、バイナリ文字列は UTF-8 を用いて表示されます。
2 進数の数字 0 と 1 をサポートします。2 進数の桁数は 8 の倍数である必要はありません。引数の文字列に 2 進数以外の文字が含まれている場合、
結果は未定義です(例外はスローされません)。
構文
引数
arg— 任意長の2進数ビット列を含む文字列。String
戻り値
バイナリ文字列(BLOB)を返します。String
例
基本的な使用例
数値に変換
unhex
導入バージョン: v1.1
hex と逆の操作を行います。引数内の 16 進数の各 2 桁を数値として解釈し、その数値が表すバイトに変換します。戻り値はバイナリ文字列 (BLOB) です。
結果を数値に変換したい場合は、reverse 関数および reinterpretAs<Type> 関数を使用できます。
clickhouse-client は文字列を UTF-8 として解釈します。
そのため、hex が返す値の表示が予期しないものに見える場合があります。
大文字および小文字の A-F の両方をサポートします。
16 進数の桁数は偶数である必要はありません。
奇数の場合、最後の 1 桁は 00-0F バイトの下位 4 ビットとして解釈されます。
引数の文字列に 16 進数字以外の文字が含まれている場合、実装依存の結果が返されます (例外はスローされません)。
数値引数に対しては、unhex() によって hex(N) の逆変換は行われません。
構文
引数
arg— 任意個の 16 進数の数字を含む文字列。StringまたはFixedString
戻り値
バイナリ文字列(BLOB)を返します。String
例
基本的な使用方法
数値に変換