メインコンテンツへスキップ
Universally Unique Identifier (UUID) は、レコードを識別するために使用される 16 バイトの値です。UUID の詳細については、Wikipedia を参照してください。 UUIDv4 や UUIDv7 など、異なる UUID バリアントがありますが (こちらを参照) 、ClickHouse は、挿入された UUID が特定のバリアントに準拠しているかどうかを検証しません。 UUID は内部的には 16 個のランダムなバイト列として扱われ、SQL レベルでは 8-4-4-4-12 の表記形式が使用されます。 UUID 値の例:
デフォルトの UUID は全ゼロです。これは、たとえば新しいレコードが挿入される際に UUID カラムの値が指定されていない場合に使用されます。
歴史的な理由により、UUID は後半部分でソートされます。これは UUIDv4 の値では問題ありませんが、プライマリインデックスの定義に UUIDv7 カラムを使用すると、パフォーマンスが低下する可能性があります (ソートキーやパーティションキーでの使用は問題ありません) 。 より具体的には、UUIDv7 の値は前半にタイムスタンプ、後半にカウンタを持ちます。 そのため、スパースなプライマリインデックスにおける UUIDv7 のソート (つまり各インデックスグラニュールの先頭の値) は、カウンターフィールドに基づいて行われます。 UUID が前半部分 (タイムスタンプ) でソートされると仮定すると、クエリの冒頭にあるプライマリインデックスの索引解析ステップでは、1 つを除くすべてのパーツのすべての mark を絞り込めると期待されます。 しかし、後半部分 (カウンタ) でソートされる場合は、すべてのパーツについて少なくとも 1 つの mark が返されることが見込まれ、その結果、不要なディスクアクセスが発生します。
例:
Query
Response
回避策として、UUID は後半部分から抽出したタイムスタンプに変換できます。
Query
結果 (同じデータが挿入された場合) :
Response
ORDER BY (UUIDv7ToDateTime(uuid), uuid)

UUIDの生成

ClickHouse には、ランダムなバージョン4のUUID値を生成する generateUUIDv4 関数があります。

使用例

例 1 この例では、UUID カラムを持つテーブルを作成し、そのテーブルに値を挿入する方法を説明します。
Query
Response
例 2 この例では、レコードの挿入時に UUID カラムの値を指定していないため、デフォルトの UUID 値が挿入されます。

制限事項

UUID データ型でサポートされているのは、String データ型でもサポートされている関数のみです (たとえば、minmaxcount など) 。 UUID データ型は、算術演算 (たとえば、abs) や、sumavg などの集約関数には対応していません。
最終更新日 2026年6月25日