> ## 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.

> NiFi のデータパイプラインを使用してデータを ClickHouse にストリーミングする

# Apache NiFi を 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>;
};

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

<CommunityMaintainedBadge />

<a href="https://nifi.apache.org/" target="_blank">Apache NiFi</a> は、ソフトウェアシステム間のデータフローを自動化するために設計されたオープンソースのワークフロー管理ソフトウェアです。ETL データパイプラインを作成でき、300 を超えるデータプロセッサがあらかじめ用意されています。このステップバイステップのチュートリアルでは、Apache NiFi をデータソースおよび宛先の両方として ClickHouse に接続し、サンプルデータセットを読み込む方法を説明します。

<Steps>
  <Step title="接続情報を確認する" 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="Apache NiFi をダウンロードして実行する" id="2-download-and-run-apache-nifi">
    新規セットアップの場合は、[https://nifi.apache.org/download.html](https://nifi.apache.org/download.html) からバイナリをダウンロードし、`./bin/nifi.sh start` を実行して起動します
  </Step>

  <Step title="ClickHouse JDBCドライバーをダウンロードする" id="3-download-the-clickhouse-jdbc-driver">
    1. GitHub の<a href="https://github.com/ClickHouse/clickhouse-java/releases" target="_blank">ClickHouse JDBCドライバーのリリースページ</a>にアクセスし、最新の JDBC リリースを確認します
    2. 該当するリリースで "Show all xx assets" をクリックし、"shaded" または "all" を含む JAR ファイルを探します (例: `clickhouse-jdbc-0.5.0-all.jar`)
    3. その JAR ファイルを Apache NiFi からアクセスできるフォルダーに配置し、絶対パスを控えておきます
  </Step>

  <Step title={<>`DBCPConnectionPool` Controller Service を追加し、そのプロパティを設定する</>} id="4-add-dbcpconnectionpool-controller-service-and-configure-its-properties">
    1. Apache NiFi で Controller Service を設定するには、"gear" ボタンをクリックして NiFi Flow Configuration ページを開きます

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_01.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=3ecb50806baacf0177cdde10d0bea34c" size="sm" border alt="gear ボタンが強調表示された NiFi Flow Configuration ページ" width="564" height="409" data-path="images/integrations/data-ingestion/etl-tools/nifi_01.webp" />

    2. Controller Services タブを選択し、右上の `+` ボタンをクリックして新しい Controller Service を追加します

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_02.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=e49f17a3ccf81855ddf6f33ae71f8b2d" size="lg" border alt="追加ボタンが強調表示された Controller Services タブ" width="1999" height="636" data-path="images/integrations/data-ingestion/etl-tools/nifi_02.webp" />

    3. `DBCPConnectionPool` を検索し、"Add" ボタンをクリックします

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_03.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=a214a72eb65b893a71426c349c6851a4" size="lg" border alt="DBCPConnectionPool が強調表示された Controller Service 選択ダイアログ" width="1999" height="1287" data-path="images/integrations/data-ingestion/etl-tools/nifi_03.webp" />

    4. 新しく追加した `DBCPConnectionPool` は、デフォルトでは Invalid 状態です。設定を開始するには、"gear" ボタンをクリックします

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_04.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=5bc4d67491b1e5958664762878c41a87" size="lg" border alt="gear ボタンが強調表示され、無効な DBCPConnectionPool が表示された Controller Services 一覧" width="1893" height="607" data-path="images/integrations/data-ingestion/etl-tools/nifi_04.webp" />

    5. "Properties" セクションで、以下の値を入力します

    | プロパティ                      | 値                                                                                        | 備考                                   |
    | -------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------ |
    | Database Connection URL    | jdbc[https://HOSTNAME:8443/default?ssl=true](https://HOSTNAME:8443/default?ssl=true)true | 接続 URL 内の HOSTNAME を適宜置き換えてください      |
    | Database Driver Class Name | com.clickhouse.jdbc.ClickHouseDriver                                                     |                                      |
    | Database Driver Locations  | /etc/nifi/nifi-X.XX.X/lib/clickhouse-jdbc-0.X.X-patchXX-shaded.jar                       | ClickHouse JDBCドライバーの JAR ファイルへの絶対パス |
    | Database User              | default                                                                                  | ClickHouse のユーザー名                    |
    | Password                   | password                                                                                 | ClickHouse のパスワード                    |

    6. Settings セクションで、識別しやすいように Controller Service の名前を "ClickHouse JDBC" に変更します

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_05.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=869cce96c0ee8ccd527695c8dea21af7" size="lg" border alt="プロパティが入力された DBCPConnectionPool 設定ダイアログ" width="1586" height="1184" data-path="images/integrations/data-ingestion/etl-tools/nifi_05.webp" />

    7. "lightning" ボタンをクリックし、続けて "Enable" ボタンをクリックして `DBCPConnectionPool` Controller Service を有効にします

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_06.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=2460399dc3113d995786c373f7df4d37" size="lg" border alt="lightning ボタンが強調表示された Controller Services 一覧" width="2878" height="812" data-path="images/integrations/data-ingestion/etl-tools/nifi_06.webp" />

           <br />

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_07.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=485f45409ead4ff9cfb316e8ee2bc8d9" size="lg" border alt="Controller Service を有効にする確認ダイアログ" width="1586" height="1172" data-path="images/integrations/data-ingestion/etl-tools/nifi_07.webp" />

    8. Controller Services タブを確認し、Controller Service が有効になっていることを確認します

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_08.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=b7d9e1ce84d3bbd46d913e940847a610" size="lg" border alt="有効になった ClickHouse JDBC service が表示された Controller Services 一覧" width="1999" height="636" data-path="images/integrations/data-ingestion/etl-tools/nifi_08.webp" />
  </Step>

  <Step title={<><code>ExecuteSQL</code> プロセッサを使用してテーブルから読み取る</>} id="5-read-from-a-table-using-the-executesql-processor">
    1. 適切な上流側および下流側のプロセッサとともに、`ExecuteSQL` プロセッサを追加します

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_09.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=abf11db5bb1dc248a233669a23aef33e" size="md" border alt="ワークフロー内の ExecuteSQL プロセッサを示す NiFi キャンバス" width="768" height="316" data-path="images/integrations/data-ingestion/etl-tools/nifi_09.webp" />

    2. `ExecuteSQL` プロセッサの "Properties" セクションで、次の値を入力します

       | プロパティ                               | 値                             | 備考                                          |
       | ----------------------------------- | ----------------------------- | ------------------------------------------- |
       | Database Connection Pooling Service | ClickHouse JDBC               | ClickHouse 用に設定した Controller Service を選択します |
       | SQL select query                    | SELECT \* FROM system.metrics | ここにクエリを入力します                                |

    3. `ExecuteSQL` プロセッサを開始します

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_10.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=81d02e73ee6ca1d543015bc0667eb442" size="lg" border alt="プロパティが入力された ExecuteSQL プロセッサの設定" width="858" height="220" data-path="images/integrations/data-ingestion/etl-tools/nifi_10.webp" />

    4. クエリが正常に処理されたことを確認するには、出力キュー内の `FlowFile` のいずれか 1 つを確認します

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_11.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=270caae3211e7b81b50d1e309aba8606" size="lg" border alt="確認可能な FlowFile が表示されたキュー一覧ダイアログ" width="1956" height="794" data-path="images/integrations/data-ingestion/etl-tools/nifi_11.webp" />

    5. 出力 `FlowFile` の結果を表示するには、表示を "formatted" に切り替えます

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_12.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=1dc1c90d3bb71ab84465021653fddadf" size="lg" border alt="整形表示でクエリ結果を示す FlowFile コンテンツビューア" width="1762" height="1500" data-path="images/integrations/data-ingestion/etl-tools/nifi_12.webp" />
  </Step>

  <Step title={<>`MergeRecord` と `PutDatabaseRecord` プロセッサを使用してテーブルに書き込む</>} id="6-write-to-a-table-using-mergerecord-and-putdatabaserecord-processor">
    1. 1 回の insert で複数の行を書き込むには、まず複数のレコードを 1 つのレコードにマージする必要があります。これは `MergeRecord` プロセッサを使用して行えます

    2. `MergeRecord` プロセッサの "Properties" セクションで、以下の値を入力します

       | Property                  | Value               | Remark                                                    |
       | ------------------------- | ------------------- | --------------------------------------------------------- |
       | Record Reader             | `JSONTreeReader`    | 適切な record reader を選択します                                  |
       | Record Writer             | `JSONReadSetWriter` | 適切な record writer を選択します                                  |
       | Minimum Number of Records | 1000                | 1 つのレコードにマージする最小行数を増やすため、この値を大きくします。デフォルトは 1 行です          |
       | Maximum Number of Records | 10000               | "Minimum Number of Records" より大きい値に変更します。デフォルトは 1,000 行です |

    3. 複数のレコードが 1 つにマージされていることを確認するには、`MergeRecord` プロセッサの input と output を確認します。output は複数の input レコードからなる配列である点に注意してください

       Input

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_13.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=2ccc4198a02b0b3b7402ee79e5ae12c8" size="sm" border alt="単一レコードを示す MergeRecord processor の input" width="624" height="306" data-path="images/integrations/data-ingestion/etl-tools/nifi_13.webp" />

       Output

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_14.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=0b02a554dceeb6c594fd800d04dcfb89" size="sm" border alt="レコードがマージされた配列を示す MergeRecord processor の output" width="707" height="501" data-path="images/integrations/data-ingestion/etl-tools/nifi_14.webp" />

    4. `PutDatabaseRecord` プロセッサの "Properties" セクションで、以下の値を入力します

       | Property                            | Value            | Remark                                                                                |
       | ----------------------------------- | ---------------- | ------------------------------------------------------------------------------------- |
       | Record Reader                       | `JSONTreeReader` | 適切な record reader を選択します                                                              |
       | Database Type                       | Generic          | デフォルトのままにします                                                                          |
       | Statement Type                      | INSERT           |                                                                                       |
       | Database Connection Pooling Service | ClickHouse JDBC  | ClickHouse の controller service を選択します                                                |
       | Table Name                          | tbl              | ここにテーブル名を入力します                                                                        |
       | Translate Field Names               | false            | 挿入されるフィールド名がカラム名と一致するよう、"false" に設定します                                                |
       | Maximum Batch Size                  | 1000             | insert あたりの最大行数です。この値は、`MergeRecord` プロセッサの "Minimum Number of Records" より小さくしないでください |

    5. 各 insert に複数の行が含まれていることを確認するには、テーブルの行数が `MergeRecord` で定義した "Minimum Number of Records" の値以上ずつ増えていることを確認します。

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_15.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=36b01a981712543038b0c3f5d2f06679" size="sm" border alt="宛先テーブルの行数を示すクエリ結果" width="828" height="1306" data-path="images/integrations/data-ingestion/etl-tools/nifi_15.webp" />

    6. これで、Apache NiFi を使用して ClickHouse にデータを正常にロードできました！
  </Step>
</Steps>
