Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Apache NiFi を ClickHouse に接続する

コミュニティ管理

Apache NiFi は、ソフトウェアシステム間のデータフローを自動化するために設計されたオープンソースのワークフロー管理ソフトウェアです。ETL データパイプラインを作成でき、300 を超えるデータプロセッサがあらかじめ用意されています。このステップバイステップのチュートリアルでは、Apache NiFi をデータソースおよび宛先の両方として 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 をクリックします。

ClickHouse Cloud サービスの接続ボタン

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

ClickHouse Cloud HTTPS 接続情報

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

Apache NiFi をダウンロードして実行する

新規セットアップの場合は、https://nifi.apache.org/download.html からバイナリをダウンロードし、./bin/nifi.sh start を実行して起動します

ClickHouse JDBCドライバーをダウンロードする

  1. GitHub のClickHouse JDBCドライバーのリリースページにアクセスし、最新の JDBC リリースを確認します
  2. 該当するリリースで "Show all xx assets" をクリックし、"shaded" または "all" を含む JAR ファイルを探します (例: clickhouse-jdbc-0.5.0-all.jar)
  3. その JAR ファイルを Apache NiFi からアクセスできるフォルダーに配置し、絶対パスを控えておきます

[object Object]

  1. Apache NiFi で Controller Service を設定するには、"gear" ボタンをクリックして NiFi Flow Configuration ページを開きます

    gear ボタンが強調表示された NiFi Flow Configuration ページ
  2. Controller Services タブを選択し、右上の + ボタンをクリックして新しい Controller Service を追加します

    追加ボタンが強調表示された Controller Services タブ
  3. DBCPConnectionPool を検索し、"Add" ボタンをクリックします

    DBCPConnectionPool が強調表示された Controller Service 選択ダイアログ
  4. 新しく追加した DBCPConnectionPool は、デフォルトでは Invalid 状態です。設定を開始するには、"gear" ボタンをクリックします

    gear ボタンが強調表示され、無効な DBCPConnectionPool が表示された Controller Services 一覧
  5. "Properties" セクションで、以下の値を入力します

プロパティ 備考
Database Connection URL jdbchttps://HOSTNAME:8443/default?ssl=truetrue 接続 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 のパスワード
  1. Settings セクションで、識別しやすいように Controller Service の名前を "ClickHouse JDBC" に変更します

    プロパティが入力された DBCPConnectionPool 設定ダイアログ
  2. "lightning" ボタンをクリックし、続けて "Enable" ボタンをクリックして DBCPConnectionPool Controller Service を有効にします

    lightning ボタンが強調表示された Controller Services 一覧

    Controller Service を有効にする確認ダイアログ
  3. Controller Services タブを確認し、Controller Service が有効になっていることを確認します

    有効になった ClickHouse JDBC service が表示された Controller Services 一覧

[object Object]

  1. 適切な上流側および下流側のプロセッサとともに、ExecuteSQL プロセッサを追加します

    ワークフロー内の ExecuteSQL プロセッサを示す NiFi キャンバス
  2. ExecuteSQL プロセッサの "Properties" セクションで、次の値を入力します

    プロパティ 備考
    Database Connection Pooling Service ClickHouse JDBC ClickHouse 用に設定した Controller Service を選択します
    SQL select query SELECT * FROM system.metrics ここにクエリを入力します
  3. ExecuteSQL プロセッサを開始します

    プロパティが入力された ExecuteSQL プロセッサの設定
  4. クエリが正常に処理されたことを確認するには、出力キュー内の FlowFile のいずれか 1 つを確認します

    確認可能な FlowFile が表示されたキュー一覧ダイアログ
  5. 出力 FlowFile の結果を表示するには、表示を "formatted" に切り替えます

    整形表示でクエリ結果を示す FlowFile コンテンツビューア

[object Object]

  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

    単一レコードを示す MergeRecord processor の input

    Output

    レコードがマージされた配列を示す MergeRecord processor の output
  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" の値以上ずつ増えていることを確認します。

    宛先テーブルの行数を示すクエリ結果
  6. これで、Apache NiFi を使用して ClickHouse にデータを正常にロードできました!

Navigation