ClickHouseでサポートされるデータ型を調べるには、公式ドキュメントまたはシステムテーブルを参照するのが効率的です。
データ型の一覧取得方法
以下のクエリで、現在のインスタンスが認識するすべてのデータ型ファミリーを取得できます:
SELECT name, alias_to
FROM system.data_type_families
WHERE case_insensitive = 1
ORDER BY name;
この結果には、INET4 → IPv4 や TIMESTAMP → DateTime のように、外部SQL方言との互換性のために用意された別名も含まれます。
代表的なデータ型とその特徴
整数型:符号あり/なし
- Int8~Int64:-128〜127(Int8)から -9.2e18〜9.2e18(Int64)まで
- UInt8~UInt64:0〜255(UInt8)から 0〜1.8e19(UInt64)まで
浮動小数点型
Float32:単精度(約7桁)Float64:倍精度(約15桁)
計算誤差や特殊値(inf, -inf, nan)に注意が必要です。可能であれば整数や固定小数点型の利用を推奨します。
固定小数点型:Decimal(P,S)
精度P(最大38桁)、小数部S桁の固定小数点数。内部的には以下のように分類されます:
Decimal32(S):P ≤ 9Decimal64(S):10 ≤ P ≤ 18Decimal128(S):19 ≤ P ≤ 38
例:Decimal32(4) は -99999.9999 〜 99999.9999 の範囲を0.0001刻みで表現可能。
文字列型
String:可変長、NULLバイト含む任意のバイナリデータを格納可能FixedString(N):固定長Nバイト。短い場合は末尾にNULL埋め、長い場合はエラー
FixedStringでの検索時は、末尾のNULLバイトを明示的に指定する必要があります:
SELECT * FROM tbl WHERE fixed_col = 'abc\0\0'; -- N=5の場合
特殊型
- UUID:
generateUUIDv4()で生成。算術演算不可、比較・集計関数(min/max/count)のみ使用可能 - Date:1970-01-01〜2105-12-31を2バイトで表現。タイムゾーン情報なし
- DateTime:Unixエポックからの秒数(4バイト)。タイムゾーンはサーバー起動時の設定に依存
列挙型:Enum8 / Enum16
文字列と整数のマッピングを定義。内部的には整数として処理されるため高速:
CREATE TABLE status_log (
id UInt32,
state Enum8('active'=1, 'inactive'=2, 'pending'=3)
) ENGINE=Log;
配列とタプル
Array(T):同型要素のリスト。[1,2,3]またはarray(1,2,3)で生成Tuple(T1,T2,...):異型要素の組。tuple(42, 'hello', 3.14)のように使用
Nullable型
任意の基本型にNullable()を適用することでNULL値を許容可能。ただし、
- インデックス対象にできない
- 内部的にNULLマスク用の追加ファイルを消費するため、パフォーマンスとストレージ効率が低下
Nested構造
複数の配列列を論理的にグループ化。実体は各フィールドが独立した配列列:
CREATE TABLE user_actions (
user_id UInt32,
actions Nested(
event String,
timestamp DateTime,
value Float32
)
) ENGINE=MergeTree ORDER BY user_id;
クエリ時は actions.event, actions.timestamp のように個別に指定必須。