メインコンテンツへスキップ
このチュートリアルでは、CSV フォーマットと Parquet フォーマットの両方から 2,800 万行の Hacker News データを ClickHouse テーブルに挿入し、簡単なクエリをいくつか実行してデータを確認します。

CSV

1

CSV をダウンロード

このデータセットの CSV 版は、公開 S3 bucket からダウンロードするか、次のコマンドを実行して取得できます。
4.6GB、2,800万行のこの圧縮ファイルのダウンロードには、5〜10分かかるはずです。
2

データをサンプリングする

clickhouse-local を使うと、ClickHouse server をデプロイして設定しなくても、 ローカルファイルを高速に処理できます。データを ClickHouse に保存する前に、clickhouse-local を使ってファイルをサンプリングしてみましょう。 コンソールから次を実行します。
次に、データを確認するには、次のコマンドを実行します。
Query
Response
このコマンドには、見逃しがちな便利な機能が数多くあります。 file operator を使うと、CSVWithNames フォーマットを指定するだけで、ローカルディスク上のファイルを読み込めます。 特に重要なのは、ファイルの内容からスキーマが自動的に推論されることです。 また、clickhouse-local は圧縮ファイルも読み込むことができ、拡張子から gzip フォーマットを推論している点にも注目してください。 Vertical フォーマットを使うと、各カラムのデータをより見やすく表示できます。
3

スキーマ推論を使ってデータをロードする

データのロードに最も簡単で強力なツールは、clickhouse-client です。これは、多機能なネイティブのコマンドラインクライアントです。 データをロードする際は、再度スキーマ推論を活用し、ClickHouse にカラムの型の判定を任せることができます。以下のコマンドを実行すると、url 関数を使ってリモートの CSV ファイルの内容にアクセスし、テーブルを作成してデータを直接挿入できます。 スキーマは自動的に推論されます。
これにより、データから推論されたスキーマを使用して空のテーブルが作成されます。 DESCRIBE TABLE コマンドを使うと、これらの型がどのように割り当てられたかを確認できます。
Query
Response
このテーブルにデータを挿入するには、INSERT INTO, SELECT コマンドを使用します。 url 関数と組み合わせると、データは URL から直接ストリーミングされます:
たった1つのコマンドで、2,800万行をClickHouseに正常に挿入できました!
4

データを確認する

以下のクエリを実行して、Hacker News の記事と特定のカラムをサンプルとして表示します。
Query
Response
スキーマ推論は初期段階でデータを調べるには非常に便利な機能ですが、「ベストエフォート」にすぎず、長期的にはデータに最適なスキーマを定義する代わりにはなりません。
5

スキーマを定義する

すぐに効果が見込める最適化として、各フィールドに型を定義することが挙げられます。 time フィールドを DateTime 型として宣言するだけでなく、既存のデータセットを削除したうえで、以下の各フィールドにも適切な型を定義します。 ClickHouse では、データの主キーは ORDER BY 句で定義されます。適切な型を選び、どのカラムを ORDER BY 句に含めるかを決めることで、クエリ速度と圧縮の向上につながります。以下のクエリを実行して、古いスキーマを削除し、改善したスキーマを作成します。
Query
最適化されたスキーマが用意できたので、ローカルファイルシステムからデータを挿入できます。 ここでも clickhouse-client を使用し、INFILE 句と明示的な INSERT INTO を使ってファイル内のデータを挿入します。
Query
6

サンプルクエリを実行する

以下にサンプルクエリをいくつか示します。独自のクエリを作成する際の参考にしてください。

Hacker Newsで「ClickHouse」はどれほど話題になっているか?

scoreフィールドは記事の人気度を示す指標であり、idフィールドと ||連結演算子を使うと元の投稿へのリンクを生成できます。
Query
Response
ClickHouseは時間の経過とともにノイズが増加しているでしょうか?ここでは、time フィールドを DateTime として定義することの有用性がわかります。適切なデータ型を使用することで、toYYYYMM() 関数を活用できます:
Query
Response
「ClickHouse」は時間の経過とともに人気が高まっているようです。

ClickHouse関連記事で最もコメントが多いユーザーは誰ですか?

Query
Response

どのコメントが最も注目を集めているか?

Query
Response

Parquet

ClickHouse の強みの 1 つは、さまざまなフォーマットを扱えることです。 CSV は非常に理想的なユースケースではありますが、データ交換の手段としては最も効率的とはいえません。 次に、効率的な列指向フォーマットである Parquet ファイルからデータを読み込みます。 Parquet の型は最小限に抑えられており、ClickHouse はそれに従う必要があります。この型情報はフォーマット自体にエンコードされています。 Parquet ファイルに対する型推論を行うと、CSV ファイルの場合とはわずかに異なるスキーマになります。
1

データを挿入する

次のクエリを実行し、再度 url 関数を使ってリモートデータを読み込み、同じデータを Parquet フォーマットで読み込みます。
Parquet における NULL キーParquet フォーマットの仕様上、データ内には存在しない場合でも、 キーが NULL になり得ることを受け入れる必要があります。
次のコマンドを実行して、推論されたスキーマを確認します。
Response
CSV ファイルと同様に、選択する型をより細かく制御するためにスキーマを手動で指定し、S3 から直接 データを挿入できます:
2

クエリを高速化するため、スキップ索引を追加する

“ClickHouse” に言及しているコメントの数を調べるには、次のクエリを実行します。
Query
Response
次に、このクエリを高速化するため、“comment” カラムに転置 索引 を作成します。 大文字小文字を区別せずに語句を検索できるよう、comment の値は小文字化して索引付けされる点に注意してください。索引を作成するには、次のコマンドを実行します。
索引のマテリアライズには多少時間がかかります (索引が作成されたかどうかを確認するには、システムテーブル system.data_skipping_indices を使用します) 。索引の作成後に、クエリを再度実行してください:
Query
索引を使用すると、クエリの所要時間が、以前の索引なしの 0.843 秒から 0.248 秒に短縮されていることがわかります。
Response
EXPLAIN 句を使うと、この索引を追加することでクエリが約3.4倍高速化された理由を理解できます。
Response
索引によって多数のグラニュールを読み飛ばせるため、 クエリが高速化されていることに注目してください。また、1 つ、または複数の検索語をすべて効率よく検索できるようになりました。
Query
Response
Query
Response
最終更新日 2026年7月1日