Apify を ClickHouse に接続する
Apify は、Web スクレイピングと自動化のためのプラットフォームです。Actors と呼ばれるサーバーレスのクラウドプログラムを構築、実行し、スケールできます。Actors は、Web サイトのスクレイピング、Web のクロール、データ処理、ワークフローの自動化を行います。Actor を実行するたびに、構造化された出力データが Datasets (JSON オブジェクトのコレクション) に保存されます。
スクレイピングまたは処理したデータを ClickHouse に取り込み、分析、監視、またはエンリッチメント パイプラインに活用します。
主要な概念
| Apify の概念 | 内容 |
|---|---|
| Actor | Apify プラットフォーム上で実行されるサーバーレスのクラウドプログラムです。Apify Store では、すぐに使える Actor が数多く提供されています。 |
| Dataset | Actor の実行結果です。JSON オブジェクトを表形式で格納したコレクションで、Apify API を介して JSON、CSV、XML などのフォーマットで取得できます。 |
| Webhook | Actor の実行が成功・失敗したときや、その他のライフサイクルイベントに達したときにトリガーされる、イベント駆動型の HTTP 呼び出しです。Webhook を使用すると、Apify から ClickHouse へのパイプラインを自動化できます。 |
セットアップガイド
ClickHouse の接続情報を確認する
HTTP(S) で ClickHouse に接続するには、次の情報が必要です。
| Parameter(s) | Description |
|---|---|
HOST and PORT | 通常、TLS を使用する場合のポートは 8443、TLS を使用しない場合のポートは 8123 です。 |
DATABASE NAME | 既定で default という名前のデータベースが用意されています。接続したいデータベースの名前を使用してください。 |
USERNAME and PASSWORD | 既定のユーザー名は default です。用途に応じて適切なユーザー名を使用してください。 |
ClickHouse Cloud サービスに関する詳細情報は、ClickHouse Cloud コンソールで確認できます。 サービスを選択し、Connect をクリックします。

HTTPS を選択します。接続情報は、サンプルの curl コマンド内に表示されます。

セルフマネージドの ClickHouse を使用している場合、接続情報は ClickHouse 管理者によって設定されます。
Apify の前提条件
以下も必要です。
- Apify アカウント (無料ティアあり) 。
- Apify API トークン。Apify Console の Settings > Integrations で確認できます。
- ローカルにインストールされた Node.js 18 以降 (JavaScript の例に必要) 。
依存関係をインストールする
Apify JavaScript クライアントと ClickHouse JavaScript クライアントをインストールします。
Apify は Python クライアント も提供しています。Python を使用する場合は、apify-client を pip でインストールし、ClickHouse には clickhouse-connect を使用してください。
Apify データセットを取得して ClickHouse に読み込む
次のスクリプトは、Apify Actor の実行結果を取得し、ClickHouse に挿入します。
大型データセットの場合は、List dataset items エンドポイントの limit パラメータと offset パラメータを使って結果をページ分割してください。clean=true を指定すると、空でない重複排除済みの項目のみを取得できます。
Webhook で自動化する
スクリプトを手動で実行する代わりに、Actor が完了するたびにデータが ClickHouse に読み込まれるよう、パイプラインを自動化します。
- Apify Console で対象の Actor を開き、Integrations タブを選択します。
- 次の内容で新しい webhook を追加します。
- Event type:
ACTOR.RUN.SUCCEEDED - Action: ローダー エンドポイントへの HTTP POST、または ClickHouse への挿入を処理する別の Actor のトリガー。
- Event type:
- webhook のペイロードには
defaultDatasetIdが含まれており、これを使って実行結果を取得できます。
ペイロードの詳細と設定オプションについては、Apify webhook documentation を参照してください。
別の方法として、Apify Schedules を使用して cron のようなスケジュールで Actor を実行し、読み込みステップに webhook を組み合わせることもできます。
ベストプラクティス
Apify からデータを取得する
生の HTTP リクエストではなく、Apify のクライアントライブラリ (JavaScript 用の apify-client または Python 用) を使用してください。これにより、ページネーション、再試行、認証を自動で処理できます。大型データセットでは、List dataset items エンドポイントの limit と offset パラメータを使用して、結果をページネーションしながら取得してください。
ClickHouse への読み込み
ClickHouse に挿入する際は、JSONEachRow フォーマットを使用してください。変換は不要で、Apify の JSON 出力にそのまま対応します。
ClickHouse テーブルの schema は、Actor の出力フィールドに合わせてください。Actor の出力 schema は、Apify Store ページ、または実行後の Dataset タブで確認できます。
パフォーマンス
JavaScriptクライアントから高い処理量で INSERT を行う場合は、パフォーマンス最適化のヒントに従ってください。1 行ずつ INSERT するのではなく、複数の行をまとめて、より大きな単位で INSERT してください。クライアント側でのバッチ化が現実的でない場合は、非同期 INSERTも検討してください。
セキュリティ
このページの例では、簡潔にするために default ユーザーとデータベースを使用しています。本番環境では、対象テーブルに挿入するために必要な最小限の特権だけを持つ専用ユーザーを作成し、認証情報は安全に保管してください (たとえば、ソースコードにコミットするのではなく、環境変数やシークレットマネージャーに保存します) 。詳細については、クラウドアクセス管理を参照してください。