エンコード関数
bech32Decode
導入されたバージョン: v25.6
bech32 または bech32m アルゴリズムによって生成された Bech32 アドレス文字列をデコードします。
エンコード関数とは異なり、Bech32Decode はパディング済みの FixedString を自動的に処理します。
構文
引数
address— デコード対象の Bech32 文字列。StringまたはFixedString
戻り値
文字列のエンコードに使用された (hrp, data) から成るタプルを返します。data はバイナリ形式のデータです。Tuple(String, String)
例
アドレスのデコード
テストネット用アドレス
bech32Encode
導入バージョン: v25.6
バイナリデータ文字列と、人間が判読可能な部分 (HRP) を Bech32 または Bech32m アルゴリズムでエンコードします。
FixedString データ型を使用する場合、値が行を完全に埋めないときはヌル文字でパディングされます。
bech32Encode 関数は hrp 引数についてはこれを自動的に処理しますが、data 引数については値がパディングされていてはなりません。
このため、すべての値が同一の長さであることが確実であり、FixedString カラムもその長さに設定されていることを保証できる場合を除き、
データ値に FixedString データ型を使用することは推奨されません。
構文
引数
hrp— コードの「human-readable part(人間が読める部分)」を指定する、1 - 83文字の小文字英字から成る文字列。通常は 'bc' または 'tb'。StringまたはFixedStringdata— エンコード対象のバイナリデータを表す文字列。StringまたはFixedStringwitver— 任意。witness version(デフォルト = 1)。実行するアルゴリズムのバージョンを指定するUInt*。Bech32 の場合は0、Bech32m の場合は1以上。UInt*
戻り値
human-readable part、常に '1' となるセパレータ文字、およびデータ部から成る Bech32 アドレス文字列を返します。文字列の長さは 90 文字を超えることはありません。入力から有効なアドレスを生成できない場合は、空文字列を返します。String
使用例
デフォルトの Bech32m
Bech32 アルゴリズム
カスタム HRP
bin
導入バージョン: v21.8
引数の値をバイナリ表現に変換した文字列を、型ごとに次のロジックに従って返します:
| Type | Description |
|---|---|
(U)Int* | 最上位ビットから最下位ビットへの順序(ビッグエンディアン、いわゆる「人間が読みやすい」順序)でビット列を出力します。先頭のゼロバイトは省略され、最初に出現する非ゼロバイトから始まりますが、各バイトについては先頭ビットがゼロであっても必ず 8 ビット(8 桁)を出力します。 |
Date and DateTime | 対応する整数としてフォーマットされます(Date はエポックからの日数、DateTime は UNIX タイムスタンプの値)。 |
String and FixedString | すべてのバイトが、各バイトあたり 8 ビット(8 桁)の2進数としてそのままエンコードされます。ゼロバイトも省略されません。 |
Float* and Decimal | メモリ上の表現のままエンコードされます。little-endian アーキテクチャをサポートしているため、little-endian でエンコードされます。先頭および末尾のゼロバイトも省略されません。 |
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 の冪の和として表したときの、各 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 ではないバイトから開始し(先頭の 0 バイトは省略されます)が、各バイトについては先頭の桁が 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 つの動作モードがあります。
- Simple
- Expanded
Simple モード
最大 2 つの符号なし整数を引数として受け取り、UInt64 のコードを生成します。
Expanded モード
最初の引数として範囲マスク(タプル)を受け取り、その他の引数として最大 2 つの符号なし整数を受け取ります。マスク中の各数値は、対応する引数を左シフトするビット数を指定し、その引数をその範囲内でスケーリングします。
範囲の拡張は、範囲(またはカーディナリティ)が大きく異なる引数について、同程度の分布が必要な場合に有用です。例: 「IP Address」(0...FFFFFFFF) と 「Country code」(0...FF)。エンコード関数の場合と同様に、これは最大 8 個の数値に制限されます。
構文
引数
tuple_size— 最大2までの整数値。UInt8/16/32/64またはTuple(UInt8/16/32/64)code—UInt64型のコード。UInt64
返り値
指定したサイズのタプルを返します。Tuple(UInt64)
例
シンプルモード
引数が 1 つの場合
拡張モード
カラムの使い方
hilbertEncode
導入バージョン: v24.6
符号なし整数のリストに対して、ヒルベルト曲線のコード値を計算します。
この関数には 2 つの動作モードがあります:
- シンプル
- 拡張
シンプルモード
最大 2 個の符号なし整数を引数として受け取り、UInt64 のコード値を生成します。
拡張モード
最初の引数として範囲マスク (Tuple) を、 その他の引数として最大 2 個の 符号なし整数 を受け取ります。
マスク内の各数値は、対応する引数を左にシフトするビット数を設定し、その範囲内で引数を事実上スケーリングします。
構文
引数
args— 最大 2 つのUInt値、またはUInt型のカラム。UInt8/16/32/64range_mask— 拡張モード用の、最大 2 つのUInt値、またはUInt型のカラム。UInt8/16/32/64
戻り値
UInt64 のコードを返します。UInt64
例
Simple モード
展開モード
単一引数
展開された単一引数
カラムの使い方
mortonDecode
導入バージョン: v24.6
Morton encoding(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)
使用例
シンプルモード
単一引数
拡張モード(一方の引数を縮小)
カラムの使い方
mortonEncode
導入バージョン: v24.6
符号なし整数のリストに対して Morton エンコード(ZCurve)を計算します。
この関数には 2 つの動作モードがあります:
- Simple
- Expanded*
Simple モード
最大 8 個の符号なし整数を引数として受け取り、UInt64 コードを生成します。
Expanded モード
最初の引数としてレンジマスク(Tuple)を、その他の引数として最大 8 個の符号なし整数を受け取ります。
マスク内の各数値はレンジ拡張の倍率を設定します:
- 1 - 拡張なし
- 2 - 2 倍拡張
- 3 - 3 倍拡張 ⋮
- 最大 8 倍拡張。
構文
引数
args— 最大 8 個までの符号なし整数、または前述の型のカラム。UInt8/16/32/64range_mask— 拡張モードで使用する、各引数に対応したマスク。マスクは1~8の符号なし整数からなるタプルです。マスク内の各数値は、範囲をどの程度縮小するかを指定します。Tuple(UInt8/16/32/64)
戻り値
UInt64 のコードを返します。UInt64
例
シンプルモード
拡張モード
引数が 1 つの場合
単一引数の詳細
カラムの使い方
sqidDecode
導入バージョン: v24.1
sqid を数値の配列に変換します。
構文
引数
sqid— デコード対象の sqid。String
戻り値
sqid から取得した数値の配列を返します。Array(UInt64)
例
使用例
sqidEncode
導入バージョン: v24.1
数値を sqid に変換します。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 進数以外の文字が含まれている場合は、実装依存の結果が返されます (例外はスローされません)。
数値引数に対しては、hex(N) の逆変換は unhex() によっては行われません。
構文
引数
arg— 任意の数の16進数の数字からなる文字列。StringまたはFixedString
戻り値
バイナリ文字列(BLOB)を返します。String
例
基本的な使い方
数値への変換