3.0 KiB
slug | sidebar_position |
---|---|
/ja/native-protocol/columns | 4 |
カラムタイプ
一般的な情報については、データタイプを参照してください。
数値タイプ
:::tip
数値タイプのエンコーディングは、AMD64やARM64のようなリトルエンディアンCPUのメモリレイアウトと一致しています。
これにより、非常に効率的なエンコーディングとデコーディングを実現できます。
:::
整数
IntとUIntの8, 16, 32, 64, 128または256ビットの文字列で、リトルエンディアン形式です。
浮動小数点数
IEEE 754のバイナリ表現でのFloat32とFloat64です。
文字列
単なる文字列の配列です。つまり、(len, value)。
FixedString(N)
Nバイトシーケンスの配列です。
IP
IPv4はUInt32
数値型のエイリアスで、UInt32として表現されます。
IPv6はFixedString(16)
のエイリアスで、バイナリで直接表現されます。
Tuple
Tupleは単にカラムの配列です。例えば、Tuple(String, UInt8)は2つのカラムが連続してエンコードされたものです。
Map
Map(K, V)
は3つのカラムから成ります: Offsets ColUInt64, Keys K, Values V
。
Keys
とValues
カラムの行数はOffsets
の最後の値です。
配列
Array(T)
は2つのカラムから成ります: Offsets ColUInt64, Data T
。
Data
の行数はOffsets
の最後の値です。
Nullable
Nullable(T)
はNulls ColUInt8, Values T
という同じ行数を持つ内容で構成されています。
// NullsはValuesカラムに対するnullableの「マスク」です。
// 例えば、[null, "", "hello", null, "world"]をエンコードする場合
// Values: ["", "", "hello", "", "world"] (len: 5)
// Nulls: [ 1, 0, 0, 1, 0] (len: 5)
UUID
FixedString(16)
のエイリアスで、UUID値はバイナリで表現されます。
Enum
Int8
またはInt16
のエイリアスですが、それぞれの整数がいくつかのString
値にマッピングされています。
Low Cardinality
LowCardinality(T)
はIndex T, Keys K
から成り、K
はIndex
のサイズに応じて(UInt8, UInt16, UInt32, UInt64)のいずれかです。
// インデックス(すなわち、Dictionary)カラムはユニークな値を含み、Keysカラムは
// インデックスカラムのインデックスのシーケンスを含み、それが実際の値を表します。
//
// 例えば、["Eko", "Eko", "Amadela", "Amadela", "Amadela", "Amadela"]は
// 以下のようにエンコードできます:
// Index: ["Eko", "Amadela"] (String)
// Keys: [0, 0, 1, 1, 1, 1] (UInt8)
//
// CardinalityKeyはIndexサイズに応じて選択されます。選択されたタイプの最大値は、
// Index要素のインデックスを表現できる必要があります。
Bool
UInt8
のエイリアスであり、0
はfalse、1
はtrueを表します。