メインコンテンツまでスキップ
メインコンテンツまでスキップ

カラムの種類

一般的な参照についてはデータ型を参照してください。

数値型

ヒント

数値型のエンコーディングは、AMD64やARM64のようなリトルエンディアンCPUのメモリレイアウトと一致します。

これにより、非常に効率的なエンコーディングとデコーディングが実現します。

整数

IntおよびUIntの8、16、32、64、128または256ビットの配列で、リトルエンディアンでエンコードされています。

浮動小数点数

IEEE 754バイナリ表現のFloat32およびFloat64です。

文字列

単なるStringの配列、すなわち(len, value)です。

FixedString(N)

Nバイトシーケンスの配列です。

IP

IPv4はUInt32数値型のエイリアスで、UInt32として表現されます。

IPv6はFixedString(16)のエイリアスで、バイナリとして直接表現されます。

タプル

タプルは単なるカラムの配列です。例えば、Tuple(String, UInt8)は連続してエンコードされた2つのカラムです。

マップ

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値はバイナリとして表現されます。

列挙型

Int8またはInt16のエイリアスですが、各整数はあるString値にマッピングされます。

低カーディナリティ

LowCardinality(T)Index T, Keys Kで構成され、 ここでKIndexのサイズに応じて(UInt8, UInt16, UInt32, UInt64)のいずれかです。

// Index(すなわち辞書)カラムはユニークな値を含み、Keysカラムは
// Indexカラムにある実際の値を表すインデックスの配列を含みます。
//
// 例えば、["Eko", "Eko", "Amadela", "Amadela", "Amadela", "Amadela"]は
// 次のようにエンコードできます:
//      Index: ["Eko", "Amadela"] (String)
//      Keys:  [0, 0, 1, 1, 1, 1] (UInt8)
//
// CardinalityKeyはIndexサイズに応じて選択され、すなわち選択された型の最大値は
// Index要素の任意のインデックスを表現できる必要があります。

ブール

UInt8のエイリアスで、0はfalse、1はtrueです。