BigQuery と ClickHouse Cloud: 同等および異なる概念
リソースの組織
ClickHouse Cloud におけるリソースの組織方法は、BigQuery のリソース階層 に似ています。以下の図に基づいて、具体的な違いを説明します。

組織
BigQuery と同様に、組織は ClickHouse cloud リソース階層のルートノードです。ClickHouse Cloud アカウントに設定した最初のユーザーは、自動的にそのユーザーが所有する組織に割り当てられます。そのユーザーは他のユーザーを組織に招待することができます。
BigQuery プロジェクトと ClickHouse Cloud サービス
組織内では、ClickHouse Cloud に保存されたデータがサービスに関連付けられているため、BigQuery プロジェクトに緩やかに相当するサービスを作成できます。ClickHouse Cloud には利用可能な複数のサービスタイプがあります。各 ClickHouse Cloud サービスは特定のリージョンに展開され、以下を含みます。
- コンピュートノードのグループ(現在、Development ティアサービスには 2 ノード、Production ティアサービスには 3 ノードがあります)。これらのノードに対して、ClickHouse Cloud は、手動および自動での垂直および水平スケーリングをサポートします。
- サービスがすべてのデータを保存するオブジェクトストレージフォルダー。
- エンドポイント(または ClickHouse Cloud UI コンソールを介して作成された複数のエンドポイント)– サービスに接続するために使用するサービス URL(例:
https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443
)
BigQuery データセットと ClickHouse Cloud データベース
ClickHouse はテーブルをデータベースに論理的にグループ化します。BigQuery データセットのように、ClickHouse データベースはテーブルデータを整理し、アクセスを制御する論理コンテナです。
BigQuery フォルダー
ClickHouse Cloud には現在、BigQuery フォルダーに相当する概念はありません。
BigQuery スロット予約とクォータ
BigQuery スロット予約と同様に、ClickHouse Cloud では垂直および水平のオートスケーリングを構成できます。垂直オートスケーリングでは、サービスのコンピュートノードのメモリおよび CPU コアの最小サイズと最大サイズを設定できます。サービスはその範囲内で必要に応じてスケールします。これらの設定は初期サービス作成フロー中にも利用可能です。サービス内の各コンピュートノードは同じサイズです。水平スケーリングを使用して、サービス内のコンピュートノードの数を変更できます。
さらに、BigQuery のクォータに似て、ClickHouse Cloud では同時実行制御、メモリ使用量制限、および I/O スケジューリングを提供し、ユーザーがワークロードクラスにクエリを分離することを可能にします。特定のワークロードクラスに対して共有リソース(CPU コア、DRAM、ディスクおよびネットワーク I/O)の制限を設定することで、これらのクエリが他の重要なビジネスクエリに影響を与えないようにします。同時実行制御は、高数の同時実行クエリが存在するシナリオでスレッドのオーバーサブスクリプションを防ぎます。
ClickHouse はサーバー、ユーザー、およびクエリレベルでのメモリアロケーションのバイトサイズを追跡し、柔軟なメモリ使用量制限を可能にします。メモリのオーバーコミットにより、クエリは保証されたメモリを超えた追加の自由なメモリを使用できますが、他のクエリのメモリ制限は保証されます。また、集計、ソート、および結合句のためのメモリ使用量を制限でき、メモリ制限を超えた場合に外部アルゴリズムへのフォールバックが可能です。
最後に、I/O スケジューリングを使用すると、ユーザーは最大帯域幅、フライト中のリクエスト、およびポリシーに基づいてワークロードクラス向けにローカルおよびリモートディスクへのアクセスを制限できます。
権限
ClickHouse Cloud はユーザーアクセスを制御し、クラウドコンソールおよびデータベースを介して管理します。コンソールアクセスはclickhouse.cloud ユーザーインターフェースを介して管理されます。データベースアクセスは、データベースユーザーアカウントとロールを介して管理されます。さらに、コンソールユーザーにはデータベース内でロールを付与することができ、これによりコンソールユーザーは当社のSQLコンソールを介してデータベースと対話できます。
データ型
ClickHouse は、数値に関してより細かな精度を提供します。たとえば、BigQuery は以下の数値型を提供します INT64
, NUMERIC
, BIGNUMERIC
および FLOAT64
。これに対して ClickHouse は、小数点や整数に対して複数の精度タイプを提供します。これらのデータ型を使用することで、ClickHouse ユーザーはストレージとメモリーオーバーヘッドを最適化し、その結果、クエリを高速化しリソース消費を低減できます。以下に、各 BigQuery 型に対する ClickHouse 型の対応を示します。
複数の ClickHouse 型の選択肢が提示された場合は、データの実際の範囲を考慮し、最も小さい要求を選択してください。また、さらなる圧縮のために適切なコーデックを利用することも検討してください。
クエリ加速技術
主キーと外部キーおよび主インデックス
BigQuery では、テーブルは主キーおよび外部キー制約を持つことができます。通常、主キーおよび外部キーはリレーショナルデータベースでデータの整合性を保証するために使用されます。主キーの値は通常、各行ごとに一意で、NULL
ではありません。行内の各外部キーは、主キーを持つテーブルの主キー列に存在するか、NULL
でなければなりません。BigQuery では、これらの制約は強制されませんが、クエリオプティマイザーはこの情報を使用してクエリをより最適化することがあります。
ClickHouse でも、テーブルは主キーを持つことができます。BigQuery と同様に、ClickHouse ではテーブルの主キー列の値の一意性を強制しません。BigQuery とは異なり、テーブルのデータは主キー列が順序付けられてディスクに保存されます。クエリオプティマイザーはこのソート順を利用して、再ソートを防ぎ、結合のメモリ使用量を最小限に抑え、制限句のショートサーキットを可能にします。BigQuery とは異なり、ClickHouse は主キー列の値に基づいてsparse primary indexを自動的に作成します。このインデックスは、主キー列にフィルターを含むすべてのクエリを高速化するために使用されます。ClickHouse は現在、外部キー制約をサポートしていません。
セカンダリインデックス(ClickHouse のみ利用可能)
ClickHouse では、テーブルの主キー列の値から作成された主インデックスの他に、主キー以外のカラムにセカンダリインデックスを作成できます。ClickHouse は、異なる種類のクエリに最適な複数のセカンダリインデックスを提供しています。
- ブルームフィルターインデックス:
- 等価条件(例: =, IN)によるクエリを高速化するために使用されます。
- 確率的データ構造を使用して、データブロック内に特定の値が存在するかどうかを判断します。
- トークンブルームフィルターインデックス:
- ブルームフィルターインデックスに似ていますが、トークン化された文字列に使用され、全文検索クエリに適しています。
- 最小-最大インデックス:
- 各データパーツのカラムの最小値と最大値を保持します。
- 指定された範囲に含まれないデータパーツの読み込みをスキップするのに役立ちます。
検索インデックス
BigQuery の検索インデックスに似て、全テキストインデックスを ClickHouse テーブルの文字列値を持つカラムに対して作成できます。
ベクターインデックス
BigQuery は最近、ベクターインデックスを Pre-GA 機能として導入しました。同様に、ClickHouse はベクター検索ユースケースを加速するためのインデックスに対する実験的なサポートを提供しています。
パーティショニング
BigQuery と同様に、ClickHouse では、テーブルのパーティショニングを利用して、大規模なテーブルのパフォーマンスと管理性を向上させます。テーブルをパーティションと呼ばれる小さく管理しやすい部分に分割することで実現されます。ClickHouse のパーティショニングについてはこちらで詳細に説明しています。
クラスタリング
クラスタリングを用いることで、BigQuery は指定された少数のカラムの値に基づいてテーブルデータを自動的にソートし、最適なサイズのブロックに同時に配置します。クラスタリングはクエリのパフォーマンスを向上させ、BigQuery がクエリの実行コストをより正確に推定できるようにします。クラスタ化されたカラムを用いることで、クエリは不要なデータのスキャンを排除します。
ClickHouse では、データはテーブルの主キー列に基づいて自動的にディスク上でクラスタリングされ、主インデックスデータ構造を利用してクエリによって迅速に検索またはプルーニングできるように論理的に配置されます。
マテリアライズドビュー
BigQuery と ClickHouse の両方が、基盤となるテーブルに対して変換クエリの結果に基づいた事前計算されたマテリアライズドビューをサポートし、パフォーマンスと効率を向上させます。
マテリアライズドビューのクエリ
BigQuery のマテリアライズドビューは直接クエリされるか、最適化プログラムによって基盤となるテーブルへのクエリ処理に使用されます。基盤となるテーブルの変更がマテリアライズドビューを無効にする可能性がある場合、データは基盤となるテーブルから直接読み取られます。基盤となるテーブルの変更がマテリアライズドビューを無効にしない場合、残りのデータはマテリアライズドビューから読み取られ、変更分のみが基盤となるテーブルから読み取られます。
ClickHouse では、マテリアライズドビューは直接クエリすることができますが、BigQuery(マテリアライズドビューが基盤となるテーブルの変更から 5 分以内に自動的に更新されますが、30 分ごと以上には更新されません)に比べて、マテリアライズドビューは常に基盤となるテーブルと同期しています。
マテリアライズドビューの更新
BigQuery は定期的にマテリアライズドビューを完全に更新し、ビューの変換クエリを基盤となるテーブルに対して実行します。更新の合間に、BigQuery はマテリアライズドビューのデータを新しい基盤となるテーブルデータと結合し、マテリアライズドビューを使用しながら一貫したクエリ結果を提供します。
ClickHouse では、マテリアライズドビューはインクリメンタルに更新されます。このインクリメンタル更新機構は、非常に高いスケーラビリティと低い計算コストを提供します。インクリメンタルに更新されたマテリアライズドビューは、基盤となるテーブルが数十億または数兆の行を含むシナリオに特に最適化されています。マテリアライズドビューを更新するために、常に成長する基盤となるテーブルを繰り返しクエリするのではなく、ClickHouse は新しく挿入された基盤となるテーブルの行の値から部分結果を単純に計算します。この部分結果は、以前に計算された部分結果と背景でインクリメンタルにマージされます。これにより、基盤となるテーブル全体からマテリアライズドビューを繰り返し更新するよりも、きわめて低い計算コストが実現されます。
トランザクション
ClickHouse に対して、BigQuery は単一のクエリの中またはセッションを使用して複数のクエリにまたがるマルチステートメントトランザクションをサポートしています。マルチステートメントトランザクションでは、1 つまたは複数のテーブルに対して行を挿入または削除するなどの変更操作を行い、変更をアトミックにコミットまたはロールバックできます。マルチステートメントトランザクションはClickHouse の 2024 年のロードマップに含まれています。
集計関数
BigQuery に比べて、ClickHouse には著しく多くの組み込み集計関数があります。
- BigQuery には 18 の集計関数 と 4 つの近似集計関数 が含まれています。
- ClickHouse は 150 以上のプレビルドの集計関数 と、プレビルドの集計関数の振る舞いを拡張するための強力な集計コンビネータを持っています。たとえば、150 以上のプレビルド集計関数を、テーブルの行ではなく配列に適用することができます。単に-Array サフィックス を付けて呼び出すだけで可能です。-Map サフィックスを使えば、任意の集計関数をマップに適用できます。そして、-ForEach サフィックスを使えば、ネストされた配列に任意の集計関数を適用できます。
データソースとファイルフォーマット
BigQuery に比べて、ClickHouse では大幅に多くのファイルフォーマットとデータソースをサポートしています。
- ClickHouse は、実質的に任意のデータソースから 90 以上のファイルフォーマットでデータをロードするためのネイティブサポートを提供しています。
- BigQuery は 5 つのファイルフォーマットと 19 のデータソースをサポートしています。
SQL 言語機能
ClickHouse では、分析タスクにより適した多くの拡張や改善を伴う標準 SQL を提供しています。たとえば、ClickHouse SQL はラムダ関数や高階関数をサポートしているため、変換を適用する際に配列を展開したり分解したりする必要がありません。これは、BigQuery のような他のシステムに対する大きな利点です。
配列
BigQuery の 8 つの配列関数に対して、ClickHouse には 80 以上の組み込みの配列関数があり、さまざまな問題を優雅かつ簡単にモデル化および解決します。
ClickHouse での一般的なデザインパターンは、groupArray
集計関数を使用して、テーブルの特定の行の値を一時的に配列に変換することです。これを配列関数を介して便利に処理でき、結果をarrayJoin
集計関数を使用して個々のテーブル行に変換できます。
ClickHouse SQL は高階ラムダ関数をサポートしているため、配列をテーブルに一時的に戻すことなく、多くの高度な配列操作を単に高階組み込み配列関数の一つを呼び出すことで達成できます。これは、BigQuery でしばしば必要とされる配列のフィルタリングやジッパリングに関しても同様です。ClickHouse では、これらの操作は単に高階関数 arrayFilter
と arrayZip
を呼び出すだけです。
以下に、BigQuery から ClickHouse への配列操作のマッピングを提供します。
BigQuery | ClickHouse |
---|---|
ARRAY_CONCAT | arrayConcat |
ARRAY_LENGTH | length |
ARRAY_REVERSE | arrayReverse |
ARRAY_TO_STRING | arrayStringConcat |
GENERATE_ARRAY | range |
サブクエリの各行に対して1つの要素を持つ配列を作成する
BigQuery