ClickHouseで利用可能なデータ型の確認方法と主要な型の解説

ClickHouseでサポートされるデータ型を調べるには、公式ドキュメントまたはシステムテーブルを参照するのが効率的です。

データ型の一覧取得方法

以下のクエリで、現在のインスタンスが認識するすべてのデータ型ファミリーを取得できます:

SELECT name, alias_to
FROM system.data_type_families
WHERE case_insensitive = 1
ORDER BY name;

この結果には、INET4IPv4TIMESTAMPDateTime のように、外部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 ≤ 9
  • Decimal64(S):10 ≤ P ≤ 18
  • Decimal128(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の場合

特殊型

  • UUIDgenerateUUIDv4()で生成。算術演算不可、比較・集計関数(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 のように個別に指定必須。

タグ: ClickHouse データ型 SQL データベース設計 スキーマ定義

6月6日 22:47 投稿