> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Apify から ClickHouse にウェブスクレイピングと自動化のデータを取り込む

# Apify を ClickHouse に接続する

export const CommunityMaintainedBadge = () => {
  return <div className="CommunityMaintainedBadge">
            <div className="CommunityMaintainedIcon">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 256 256">
                <path d="M244.8,150.4a8,8,0,0,1-11.2-1.6A51.6,51.6,0,0,0,192,128a8,8,0,0,1-7.37-4.89,8,8,0,0,1,0-6.22A8,8,0,0,1,192,112a24,24,0,1,0-23.24-30,8,8,0,1,1-15.5-4A40,40,0,1,1,219,117.51a67.94,67.94,0,0,1,27.43,21.68A8,8,0,0,1,244.8,150.4ZM190.92,212a8,8,0,1,1-13.84,8,57,57,0,0,0-98.16,0,8,8,0,1,1-13.84-8,72.06,72.06,0,0,1,33.74-29.92,48,48,0,1,1,58.36,0A72.06,72.06,0,0,1,190.92,212ZM128,176a32,32,0,1,0-32-32A32,32,0,0,0,128,176ZM72,120a8,8,0,0,0-8-8A24,24,0,1,1,87.24,82a8,8,0,1,0,15.5-4A40,40,0,1,0,37,117.51,67.94,67.94,0,0,0,9.6,139.19a8,8,0,1,0,12.8,9.61A51.6,51.6,0,0,1,64,128,8,8,0,0,0,72,120Z"></path>
            </svg>
        </div>
            コミュニティ管理
        </div>;
};

<CommunityMaintainedBadge />

[Apify](https://apify.com/) は、Webスクレイピングと自動化のためのプラットフォームです。[**Actors**](https://docs.apify.com/platform/actors) と呼ばれるサーバーレスのクラウドプログラムを構築、実行、スケーリングできます。Actor は、Webサイトのスクレイピング、Webクローリング、データ処理、ワークフローの自動化を行います。Actor を実行するたびに、構造化された出力が [**Datasets**](https://docs.apify.com/platform/storage/dataset) (JSON オブジェクト のコレクション) に保存されます。

スクレイピングまたは処理したデータを ClickHouse に取り込み、分析、監視、または enrichment パイプラインに活用できます。

<div id="key-concepts">
  ## 主要な概念
</div>

| Apify の概念                                                            | 概要                                                                                                                                 |
| -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **[Actor](https://docs.apify.com/platform/actors)**                  | Apify プラットフォーム上で実行されるサーバーレスのクラウドプログラムです。[Apify Store](https://apify.com/store) では、何千もの既製の Actor を利用できます。                           |
| **[Dataset](https://docs.apify.com/platform/storage/dataset)**       | Actor の実行結果です。JSON オブジェクトを表形式でまとめたもので、[Apify API](https://docs.apify.com/api/v2) を通じて JSON、CSV、XML などのフォーマットで取得できます。               |
| **[Webhook](https://docs.apify.com/platform/integrations/webhooks)** | Actor の実行が成功したとき、失敗したとき、またはそのほかのライフサイクルイベントが発生したときにトリガーされる、イベント駆動型の HTTP 呼び出しです。Webhook を使うと、Apify から ClickHouse へのパイプラインを自動化できます。 |

<div id="setup-guide">
  ## セットアップガイド
</div>

<Steps>
  <Step title="ClickHouse の接続情報を確認する" id="1-gather-your-connection-details">
    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** をクリックします。

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/cloud-connect-button.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=ec0a298a33ca841e947fa5e8bae47362" alt="ClickHouse Cloud サービスの接続ボタン" width="998" height="932" data-path="images/_snippets/cloud-connect-button.webp" />
      </Frame>
    </div>

    **HTTPS** を選択します。接続情報は `curl` コマンドの例として表示されます。

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/connection-details-https.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=cb0fbd98aa2b5b7ca484c9f53395ee07" alt="ClickHouse Cloud HTTPS 接続情報" width="1320" height="1184" data-path="images/_snippets/connection-details-https.webp" />
      </Frame>
    </div>

    セルフマネージド ClickHouse を使用している場合、接続情報は ClickHouse 管理者によって設定されます。
  </Step>

  <Step title="Apify の前提条件" id="2-apify-prerequisites">
    あわせて、以下が必要です。

    * [Apify アカウント](https://console.apify.com/sign-up) (無料プランあり)。
    * [Apify API トークン](https://docs.apify.com/platform/integrations/api#api-token)、[Apify Console](https://console.apify.com/) の **Settings > Integrations** で確認できます。
    * ローカルにインストールされた Node.js 18 以上 (JavaScript のサンプル用)。
  </Step>

  <Step title="依存関係をインストールする" id="3-install-dependencies">
    Apify JavaScript クライアント と ClickHouse JavaScript クライアント をインストールします。

    ```bash theme={null}
    npm install apify-client @clickhouse/client
    ```

    <Note>
      Apify では [Python クライアント](https://docs.apify.com/api/client/python) も提供しています。Python を使う場合は、pip で `apify-client` をインストールし、ClickHouse には [clickhouse-connect](/docs/ja/integrations/language-clients/python/index) を使用してください。
    </Note>
  </Step>

  <Step title="ClickHouse にターゲットテーブルを作成する" id="4-create-a-target-table">
    スクレイピングしたデータを格納するテーブルを作成します。スキーマは使用する Actor によって異なります。この例では、商品スクレイピング用の Actor に対して [MergeTree](/docs/ja/reference/engines/table-engines/mergetree-family/mergetree) を使用しています。

    ```sql theme={null}
    CREATE TABLE apify_products
    (
        url        String,
        title      String,
        price      Float64,
        currency   String,
        scraped_at DateTime DEFAULT now()
    )
    ENGINE = MergeTree()
    ORDER BY (scraped_at, url);
    ```
  </Step>

  <Step title="Apify Dataset を取得して ClickHouse に読み込む" id="5-fetch-and-load">
    次のスクリプトは、Apify Actor の実行結果を取得して ClickHouse に挿入します。

    ```javascript theme={null}
    import { ApifyClient } from 'apify-client';
    import { createClient } from '@clickhouse/client';

    // クライアントを初期化
    const apify = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });
    const clickhouse = createClient({
        url: 'https://YOUR_CLICKHOUSE_HOST:8443',
        username: 'default',
        password: 'YOUR_CLICKHOUSE_PASSWORD',
        database: 'default',
    });

    // Actor の直近の実行から Dataset 項目を取得
    const run = await apify.actor('YOUR_ACTOR_ID').call();
    const { items } = await apify.dataset(run.defaultDatasetId).listItems();

    console.log(`Fetched ${items.length} items from Apify dataset.`);

    // ClickHouse に挿入
    await clickhouse.insert({
        table: 'apify_products',
        values: items,
        format: 'JSONEachRow',
    });

    console.log(`Inserted ${items.length} rows into ClickHouse.`);
    await clickhouse.close();
    ```

    <Tip>
      大規模な Dataset の場合は、[List dataset items](https://docs.apify.com/api/v2#/reference/datasets/item-collection/list-items) エンドポイントの `limit` パラメータと `offset` パラメータを使って、結果をページ分割して取得してください。また、`clean=true` を指定すると、空でない重複排除済みの項目のみを取得できます。
    </Tip>
  </Step>

  <Step title="webhook で自動化する" id="6-automate-with-webhooks">
    スクリプトを手動で実行する代わりに、Actor の完了時に毎回データが ClickHouse に読み込まれるよう、パイプラインを自動化します。

    1. [Apify Console](https://console.apify.com/) で対象の Actor を開き、**Integrations** タブに移動します。
    2. 次の内容で新しい webhook を追加します。
       * **Event type:** `ACTOR.RUN.SUCCEEDED`
       * **Action:** ローダーのエンドポイントへの HTTP POST、または ClickHouse への挿入を処理する別の Actor をトリガー。
    3. webhook の payload には `defaultDatasetId` が含まれており、これを使ってその実行結果を取得できます。

    payload の詳細と設定オプションについては、[Apify webhook documentation](https://docs.apify.com/platform/integrations/webhooks) を参照してください。

    別の方法として、[Apify Schedules](https://docs.apify.com/platform/schedules) を使って cron のようなスケジュールで Actor を実行し、読み込みステップに webhook を組み合わせることもできます。
  </Step>
</Steps>

<div id="best-practices">
  ## ベストプラクティス
</div>

<div id="fetching-data-from-apify">
  ### Apify からデータを取得する
</div>

HTTP を直接呼び出す代わりに、Apify のクライアントライブラリ ([JavaScript](https://docs.apify.com/api/client/js) 用の `apify-client` または [Python](https://docs.apify.com/api/client/python)) を使用してください。ページネーション、再試行、認証を自動で処理してくれます。大規模な Dataset では、[List dataset items](https://docs.apify.com/api/v2#/reference/datasets/item-collection/list-items) エンドポイントの `limit` パラメータと `offset` パラメータを使って、結果をページ分割しながら取得してください。

<div id="loading-into-clickhouse">
  ### ClickHouse へのロード
</div>

ClickHouse に挿入する際は、[`JSONEachRow`](/docs/ja/reference/formats/JSON/JSONEachRow)フォーマットを使用してください。追加の変換は不要で、Apify の JSON 出力にそのまま対応しています。

ClickHouse のテーブルスキーマは、Actor の出力フィールドに合わせてください。Actor の出力スキーマは、[Apify Store](https://apify.com/store) の該当ページ、または実行後の **Dataset** タブで確認できます。

<div id="performance">
  ### パフォーマンス
</div>

JavaScript クライアント から高スループットで INSERT する場合は、[パフォーマンス最適化のヒント](/docs/ja/integrations/language-clients/js/index#tips-for-performance-optimizations)に従ってください。1 行ずつ INSERT するのではなく、複数の行をまとめてより大きな INSERT にし、クライアント側でバッチ処理を行うのが現実的でない場合は、[非同期 INSERT](/docs/ja/concepts/features/operations/insert/asyncinserts)を検討してください。

<div id="security">
  ### セキュリティ
</div>

このページの例では、わかりやすさを優先して `default` ユーザーとデータベースを使用しています。本番環境では、ターゲットテーブルへの挿入に必要な最小限の権限のみを持つ専用ユーザーを作成し、認証情報は安全に保管してください (たとえば、ソースコードにコミットするのではなく、環境変数やシークレットマネージャーに保存します) 。詳しくは、[クラウドアクセス管理](/docs/ja/products/cloud/guides/security/cloud-access-management/index)を参照してください。

<div id="related-resources">
  ## 関連リソース
</div>

* [Apify Platformのドキュメント](https://docs.apify.com)
* [Apify API リファレンス](https://docs.apify.com/api/v2)
* [Apify JavaScript クライアント](https://docs.apify.com/api/client/js)
* [Apify Python クライアント](https://docs.apify.com/api/client/python)
* [Apify Store (既製の Actor) ](https://apify.com/store)
* [Apify インテグレーションの概要](https://docs.apify.com/platform/integrations)
* [ClickHouse JavaScript クライアント](/docs/ja/integrations/language-clients/js/index)
