リソースの構成
組織
BigQuery Projects と ClickHouse Cloud Services
- コンピュートノードのグループ (現在、Development tier のサービスは 2 ノード、Production tier のサービスは 3 ノード) 。これらのノードについては、ClickHouse Cloud は垂直・水平両方のスケーリングをサポートしており、手動または自動で実行できます。
- サービスのすべてのデータを保存する object storage のフォルダー。
- endpoint (または ClickHouse Cloud UI Console から作成される複数の endpoint) - サービスへの接続に使用するサービス URL (例:
https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443)
BigQuery のデータセットと ClickHouse Cloud のデータベース
BigQuery フォルダ
BigQuery Slot 予約とクォータ
権限
データ型
INT64、NUMERIC、BIGNUMERIC、FLOAT64 です。これに対して ClickHouse では、小数、浮動小数点数、整数それぞれに対して複数の精度の型が用意されています。これらのデータ型を使うことで、ストレージ容量やメモリのオーバーヘッドを最適化でき、クエリの高速化とリソース消費の削減につながります。以下に、各 BigQuery 型に対応する ClickHouse の同等の型を示します。
クエリ高速化の手法
BigQuery では、テーブルに主キー制約と外部キー制約を設定できます。通常、主キーと外部キーは、リレーショナルデータベースでデータの整合性を確保するために使われます。主キーの値は通常、各行で一意であり、
NULL にはなりません。各行の外部キーの値は、主キーテーブルの主キーカラムに存在するか、NULL である必要があります。BigQuery では、これらの制約は実際には強制されませんが、クエリオプティマイザがこの情報を利用してクエリをより効率的に最適化することがあります。
ClickHouse でも、テーブルに主キーを設定できます。BigQuery と同様に、ClickHouse でもテーブルの主キーカラムの値の一意性は強制されません。BigQuery とは異なり、テーブルデータは主キーカラムに基づいてディスク上に順序付けられて保存されます。クエリオプティマイザはこのソート順を利用して、再ソートを回避し、JOIN のメモリ使用量を最小限に抑え、limit 句の短絡評価を可能にします。また BigQuery とは異なり、ClickHouse は主キーカラムの値に基づく (スパースな) プライマリインデックスを自動的に作成します。このプライマリインデックスは、主キーカラムに対するフィルタを含むすべてのクエリを高速化するために使用されます。現在、ClickHouse は外部キー制約をサポートしていません。
セカンダリ索引 (ClickHouse でのみ利用可能)
- Bloom Filter Index:
- 等価条件 (例:
=,IN) を含むクエリの高速化に使用されます。 - 確率的データ構造を使って、値がデータブロック内に存在する可能性があるかどうかを判定します。
- 等価条件 (例:
- Token Bloom Filter Index:
- Bloom Filter Index に似ていますが、トークン化された文字列に対して使用され、全文検索クエリに適しています。
- Min-Max Index:
- 各データパーツについて、カラムの最小値と最大値を保持します。
- 指定した範囲に含まれないデータパーツの読み取りをスキップするのに役立ちます。
検索索引
ベクトル索引
パーティション化
クラスタリング
materialized view
materialized view へのクエリ
トランザクション
集約関数
- BigQuery には、18 個の集約関数と、4 個の近似集約関数があります。
- ClickHouse には、150 種類を超える、あらかじめ用意された集約関数に加え、それらの動作を拡張できる強力な集約コンビネーターがあります。たとえば、150 種類を超える、あらかじめ用意された集約関数は、単に -Array 接尾辞 を付けて呼び出すだけで、テーブルの行ではなく配列に適用できます。-Map 接尾辞 を使えば、任意の集約関数を Map に適用できます。さらに、-ForEach 接尾辞 を使えば、任意の集約関数をネストされた配列に適用できます。
データソースとファイルフォーマット
- ClickHouseは、90種類以上のファイルフォーマットのデータを、ほぼあらゆるデータソースからネイティブに読み込めます
- BigQueryがサポートしているのは、5種類のファイルフォーマットと19のデータソースです
SQL 言語の機能
Arrays
groupArray 集約関数を使って、テーブル内の特定の行の値を (一時的に) 配列に変換することです。その後、その配列を Array 関数で効率よく処理し、結果を arrayJoin 関数で個々のテーブル行に戻せます。
ClickHouse SQL は 高階ラムダ関数 をサポートしているため、高度な Array 操作の多くは、BigQuery で 必要 になることが多いような、配列を一時的にテーブルへ戻す処理を行わなくても、高階の組み込み Array 関数を呼び出すだけで実現できます。たとえば、配列の フィルタリング や zip がこれに当たります。ClickHouse では、これらの操作はそれぞれ高階関数 arrayFilter と arrayZip を呼び出すだけで実行できます。
以下では、BigQuery の Array 操作と ClickHouse の対応関係を示します。
サブクエリの各行に対して 1 要素ずつ持つ配列を作成する
BigQuery
ARRAY function
UNNEST 演算子
UNNEST operatorを使用して、Arrayを一時的にテーブルに変換し直す必要があります
UNNEST 演算子を使用する必要があります
UNNEST 演算子を使用する必要があります