エンコーディング関数
char
渡された引数の数と同じ長さの文字列を返し、それぞれのバイトは対応する引数の値を持ちます。数値型の引数を複数受け入れます。引数の値がUInt8データ型の範囲外の場合は、丸めやオーバーフローの可能性があるUInt8に変換されます。
構文
引数
返される値
- 指定されたバイトの文字列。String。
例
クエリ:
結果:
対応するバイトを渡すことで任意のエンコーディングの文字列を構築できます。以下はUTF-8の例です:
クエリ:
結果:
クエリ:
結果:
hex
引数の16進数表現を含む文字列を返します。
エイリアス: HEX
.
構文
この関数は大文字の A-F
を使用し、プレフィックス(例えば 0x
)やサフィックス(例えば h
)は使用しません。
整数引数の場合、最上位から最下位まで(ビッグエンディアンまたは「人間が読みやすい」順序)でヘックス数字(「ニブル」)を印刷します。最上位のゼロでないバイトから始まり(リーディングゼロバイトは省略されますが)、常にリーディング数字がゼロでも任意のバイトの両方の数字を印刷します。
Date および DateTime 型の値は対応する整数としてフォーマットされます(Dateの場合、エポックからの日数、DateTimeの場合はUnixタイムスタンプの値)。
String と FixedString の場合、すべてのバイトは単に2つの16進数としてエンコードされます。ゼロバイトは省略されません。
Float および Decimal 型の値は、メモリ内の表現としてエンコードされます。私たちはリトルエンディアンアーキテクチャをサポートしているため、リトルエンディアンでエンコードされます。先頭/末尾のゼロバイトは省略されません。
UUID 型の値は、ビッグエンディアン順の文字列としてエンコードされます。
引数
返される値
- 引数の16進数表現を持つ文字列。String。
例
クエリ:
結果:
クエリ:
結果:
クエリ:
結果:
クエリ:
結果:
unhex
hex の逆の操作を実行します。引数の各ペアの16進数数字を数値として解釈し、その数値によって表されるバイトに変換します。返される値はバイナリ文字列(BLOB)です。
結果を数値に変換したい場合は、reverse および reinterpretAs<Type> 関数を使用できます。
unhex
が clickhouse-client
から呼び出された場合、バイナリ文字列はUTF-8を使用して表示されます。
エイリアス: UNHEX
.
構文
引数
arg
— 任意の数の16進数の数字を含む文字列。String, FixedString。
大文字と小文字の両方の A-F
の文字をサポートします。16進数の数字の数は必ずしも偶数ではなくても構いません。奇数の場合は、最後の数字は 00-0F
バイトの最下位ビットと解釈されます。引数の文字列に16進数の数字以外のものが含まれている場合は、いくつかの実装定義された結果が返されます(例外はスローされません)。数値引数に対しては、hex(N) の逆はunhex() によって実行されません。
返される値
- バイナリ文字列(BLOB)。String。
例
クエリ:
結果:
クエリ:
結果:
bin
引数のバイナリ表現を含む文字列を返します。
構文
エイリアス: BIN
.
整数引数の場合、最上位から最下位まで(ビッグエンディアンまたは「人間が読みやすい」順序)でビン数字を印刷します。最上位のゼロでないバイトから始まり(リーディングゼロバイトは省略されますが)、常にリーディング数字がゼロでも任意のバイトの8桁を印刷します。
Date および DateTime 型の値は、対応する整数としてフォーマットされます(Date
の場合、エポックからの日数、DateTime
の場合はUnixタイムスタンプの値)。
String および FixedString の場合、すべてのバイトは単に8つのバイナリ数としてエンコードされます。ゼロバイトは省略されません。
Float および Decimal 型の値はメモリ内の表現としてエンコードされます。私たちはリトルエンディアンアーキテクチャをサポートしているため、リトルエンディアンでエンコードされます。先頭および末尾のゼロバイトは省略されません。
UUID 型の値は、ビッグエンディアン順の文字列としてエンコードされます。
引数
返される値
- 引数のバイナリ表現を持つ文字列。String。
例
クエリ:
結果:
クエリ:
結果:
クエリ:
結果:
クエリ:
結果:
unbin
引数の各ペアのバイナリ数字を数値として解釈し、その数値によって表されるバイトに変換します。この関数はbinの逆の操作を実行します。
構文
エイリアス: UNBIN
.
数値引数に対して unbin()
は bin()
の逆を返しません。結果を数値に変換したい場合、reverse および reinterpretAs<Type> 関数を使用できます。
unbin
が clickhouse-client
から呼び出された場合、バイナリ文字列はUTF-8で表示されます。
バイナリ数字 0
と 1
をサポートします。バイナリ数字の数は8の倍数である必要はありません。引数の文字列にバイナリ数字以外のものが含まれている場合はいくつかの実装定義された結果が返されます(例外はスローされません)。
引数
arg
— 任意の数のバイナリ数字を含む文字列。String。
返される値
- バイナリ文字列(BLOB)。String。
例
クエリ:
結果:
クエリ:
結果:
bitmaskToList(num)
整数を受け入れます。合計すると元の数に達する2の累乗のリストを含む文字列を返します。テキスト形式でカンマ区切りで、スペースなしで昇順に並べられています。
bitmaskToArray(num)
整数を受け入れます。合計すると元の数に達する2の累乗のリストを含むUInt64の配列を返します。配列内の数値は昇順です。
bitPositionsToArray(num)
整数を受け入れ、符号なし整数に変換します。引数のビットが 1
に等しい位置のリストを含む UInt64
数の配列を返します。
構文
引数
arg
— 整数値。Int/UInt。
返される値
例
クエリ:
結果:
クエリ:
結果:
mortonEncode
符号なし整数のリストに対するモートンエンコーディング(ZCurve)を計算します。
この関数には2つの操作モードがあります:
- シンプル
- 拡張
シンプルモード
最大8つの符号なし整数を引数として受け取り、UInt64コードを生成します。
構文
パラメータ
args
: 最大8つの符号なし整数または前述の型のカラム。
返される値
- UInt64コード。UInt64
例
クエリ:
結果:
拡張モード
最初の引数には範囲マスク(タプル)を受け取り、その他の引数には最大8つの符号なし整数を受け取ります。
マスク内の各数は範囲の拡張量を設定します:
1 - 拡張なし
2 - 2倍の拡張
3 - 3倍の拡張
...
最大8倍の拡張。
構文
パラメータ
range_mask
: 1-8。args
: 最大8つの符号なし整数または前述の型のカラム。
注意: args
のためにカラムを使用する場合でも、提供された range_mask
タプルは定数である必要があります。
返される値
- UInt64コード。UInt64
例
範囲拡張は、範囲(またはカーディナリティ)が大きく異なる引数に類似の分布が必要な場合に有益です。 例えば、「IP アドレス」(0...FFFFFFFF)と「国コード」(0...FF)。
クエリ:
結果:
注意: タプルのサイズは他の引数の数に等しくなければなりません。
例
単一の引数に対するモートンエンコーディングは常にその引数自体です:
クエリ:
結果:
例
単一の引数を拡張することも可能です:
クエリ:
結果:
例
カラム名を関数に使用することもできます。
クエリ:
まずテーブルを作成してデータを挿入します。
定数の代わりにカラム名を mortonEncode
の引数として使用します。
クエリ:
結果:
実装の詳細
モートンコードには、UInt64 が持つ情報ビット数に制限があることに注意してください。2つの引数は最大2^32(64/2)の範囲を持ち、3つの引数は最大2^21(64/3)の範囲を持つなど、すべてのオーバーフローはゼロに制限されます。
mortonDecode
モートンエンコーディング(ZCurve)をデコードして、対応する符号なし整数のタプルに変換します。
mortonEncode
関数と同様に、この関数にも2つの操作モードがあります:
- シンプル
- 拡張
シンプルモード
結果のタプルサイズを最初の引数として受け取り、コードを2番目の引数として受け取ります。
構文
パラメータ
tuple_size
: 8を超えない整数値。code
: UInt64 コード。
返される値
例
クエリ:
結果:
拡張モード
最初の引数には範囲マスク(タプル)を受け取り、2番目の引数にはコードを受け取ります。
マスク内の各数は範囲の縮小量を設定します:
1 - 縮小なし
2 - 2倍の縮小
3 - 3倍の縮小
...
最大8倍の縮小。
範囲拡張は、範囲(またはカーディナリティ)が大きく異なる引数に類似の分布が必要な場合に有益です。IPアドレス(0...FFFFFFFF)と国コード(0...FF)など、最大8の数に制限されています。
例
モートンコードの単一の引数は常にその引数自体(タプルとして)です:
クエリ:
結果:
例
単一の引数にタプルが指定され、ビットシフトが指定された場合、関数は指定された数のビットだけ引数を左にシフトします。
クエリ:
結果:
例
この関数も第二引数としてコードのカラムを受け取ります:
最初にテーブルを作成してデータを挿入します。
クエリ:
定数の代わりにカラム名を mortonDecode
の引数として使用します。
クエリ:
結果:
hilbertEncode
符号なし整数のリストに対するヒルバート曲線のコードを計算します。
この関数には2つの操作モードがあります:
- シンプル
- 拡張
シンプルモード
シンプル: 最大2つの符号なし整数を引数として受け取り、UInt64 コードを生成します。
構文
パラメータ
args
: 最大2つの符号なし整数または前述の型のカラム。
返される値
- UInt64コード
型: UInt64
例
クエリ:
結果:
拡張モード
最初の引数には範囲マスク(タプル)を受け取り、その他の引数には最大2つの符号なし整数を受け取ります。
マスク内の各数は、対応する引数を左にシフトさせるビット数を設定し、範囲内で引数を効果的にスケーリングします。
構文
パラメータ
注意: args
のためにカラムを使用する場合でも、提供された range_mask
タプルは定数である必要があります。
返される値
- UInt64コード
型: UInt64
例
範囲拡張は、範囲(またはカーディナリティ)が大きく異なる引数に類似の分布が必要な場合に有益です。例えば、「IP アドレス」(0...FFFFFFFF)と「国コード」(0...FF)。
クエリ:
結果:
注意: タプルのサイズは他の引数の数に等しくなければなりません。
例
単一の引数がタプルなしで提供されると、関数はヒルバートインデックスとしてその引数自体を返します。次元マッピングは不要です。
クエリ:
結果:
例
タプルが指定された単一の引数を提供すると、関数は指定されたビット数だけ引数を左にシフトします。
クエリ:
結果:
例
この関数はカラムも引数として受け入れます。
クエリ:
最初にテーブルを作成してデータを挿入します。
定数の代わりにカラム名を hilbertEncode
の引数として使用します。
クエリ:
結果:
実装の詳細
ヒルバートコードには、UInt64 が持つ情報ビット数に制限があることに注意してください。2つの引数は最大2^32(64/2)の範囲を持ち、オーバーフローはすべてゼロに制限されます。
hilbertDecode
ヒルバート曲線インデックスをデコードして、多次元空間の座標を表す符号なし整数のタプルに戻します。
hilbertEncode
関数と同様に、この関数にも2つの操作モードがあります:
- シンプル
- 拡張
シンプルモード
最大2つの符号なし整数を引数として受け取り、UInt64コードを生成します。
構文
パラメータ
tuple_size
: 2を超えない整数値。code
: UInt64 コード。
返される値
- 指定されたサイズのタプル。
型: UInt64
例
クエリ:
結果:
拡張モード
最初の引数には範囲マスク(タプル)を受け取り、最大2つの符号なし整数を他の引数として受け取ります。 マスク内の各数は、対応する引数を左にシフトさせるビット数を設定し、範囲内で引数を効果的にスケーリングします。
範囲拡張は、範囲(またはカーディナリティ)が大きく異なる引数に類似の分布が必要な場合に有益です。 最大8の数に制限されています。
例
ヒルバートコードの単一の引数は常にその引数自体(タプルとして)です:
クエリ:
結果:
例
タプルが指定された単一の引数は、対応するビットシフトに従って右シフトされます。
クエリ:
結果:
例
この関数は、コードのカラムを第二引数として受け取ることができます:
最初にテーブルを作成してデータを挿入します。
クエリ:
定数の代わりにカラム名を hilbertDecode
の引数として使用します。
クエリ:
結果: