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