Apache NiFi でCouchDB のデータにバッチ操作を実行

Jerod Johnson
Jerod Johnson
Senior Technology Evangelist
CData JDBC Driver を使用して、Apache NiFi でCouchDB のデータに接続してバッチ操作を実行。

Apache NiFi は、データルーティング、変換、およびシステム間連携ロジックを強力かつスケーラブルに構築できるプラットフォームです。CData JDBC Driver for CouchDB と組み合わせることで、NiFi からリアルタイムCouchDB のデータを操作できるようになります。この記事では、CSV ファイルからデータを読み取り、Apache NiFi(バージョン1.9.0 以降)でCData JDBC Driver forCouchDB のデータを使用してバッチ操作(INSERT/UPDATE/DELETE)を実行する方法を説明します。

最適化されたデータ処理が組み込まれたCData JDBC Driver は、リアルタイムCouchDB のデータを扱う上で比類のないパフォーマンスを提供します。CouchDB に複雑なSQL クエリを発行すると、ドライバーはフィルタや集計などのサポートされているSQL 操作をCouchDB に直接プッシュし、サポートされていない操作(主にSQL 関数やJOIN 操作)は組み込みSQL エンジンを利用してクライアント側で処理します。組み込みの動的メタデータクエリを使用すると、ネイティブデータ型を使ってCouchDB のデータを操作・分析できます。

JDBC URL の生成

Apache NiFi からCouchDB のデータに接続するには、JDBC URL が必要です。

組み込みの接続文字列デザイナー

JDBC URL の作成をサポートするために、CouchDB JDBC Driver に組み込まれている接続文字列デザイナーが使用できます。JAR ファイルをダブルクリックするか、コマンドラインからJAR ファイルを実行します。

		java -jar cdata.jdbc.apachecouchdb.jar
	

接続プロパティを入力し、接続文字列をクリップボードにコピーします。

Apache CouchDB 接続プロパティの取得・設定方法

それでは、Apache CouchDB に接続していきましょう。Url 接続プロパティをApache CouchDB インスタンスのURL に設定します。例:http://localhost:5984

ユーザー(またはJWT)が特定のデータベースだけにアクセスできるようにしたい場合は、Apache CouchDB インスタンスで"admin_only_all_dbs" オプションを設定し、テーブルをリストするためにCData 製品が必要とする"/_all_dbs" エンドポイントへのアクセス権をすべてのユーザーに付与する必要があります。

Apache CouchDB への認証

続いて、認証方法を設定しましょう。CData 製品では、3種類の認証をサポートしています。

  • Basic:基本的なユーザー名 / パスワード認証
  • JWT:JWT 認証
  • None:パブリックなデータベースへの匿名アクセス

Basic 認証

データに接続するには、以下のプロパティを設定してください。

  • AuthSchemeBasic
  • User:認証に使用されるApache CouchDB ユーザーアカウント
  • Password:認証するユーザーに関連付けられたApache CouchDB パスワード

その他の認証方法については、ヘルプドキュメントの「接続の確立」セクションをご確認ください。

Apache NiFi でのバッチ操作(INSERT/UPDATE/DELETE)

以下のサンプルフローは、次のNiFi プロセッサに基づいています:

  • ListFile - ローカルファイルシステムからファイルリストを取得し、取得した各ファイルにFlowFile を作成します。
  • FetchFile - ListFile プロセッサから受け取ったFlowFile のコンテンツを読み取ります。
  • PutDatabaseRecord - 指定されたRecordReader を使用して、FetchFile プロセッサからのフローファイルからレコードを入力します。これらのレコードはSQL 文に変換され、単一のトランザクションとして実行されます。
  • LogAttribute - 指定されたログレベルでFlowFile の属性を出力します。

完成したフローは以下のようになります:

注意事項

1. CSV ファイルのカラム名は、挿入/更新/削除するデータソーステーブルのレコードのカラム名と一致する必要があります。

2. Apache NiFi バージョン1.9.0 より前のバージョンでは、PutDatabaseRecord プロセッサの Maximum Batch Size プロパティがサポートされていません。

設定

バッチINSERT、UPDATE、またはDELETE を実行するには、NiFi プロセッサを以下のように設定します:

  1. ListFile プロセッサの設定:Input Directory プロパティを、CSV ファイルを取得するローカルフォルダパスに設定します。 File Filter プロパティを、名前が式に一致するファイルのみを選択する正規表現に設定します。 例:CSV ファイルのフルパスがC:\Users\Public\Documents\InsertNiFi.csv の場合、プロパティは以下の画像のように設定します:
  2. FetchFile プロセッサの設定
  3. FetchFile プロセッサのプロパティ設定はデフォルト値のままにします:
  4. PutDatabaseRecord プロセッサの設定
    • INSERT 操作

      バッチINSERT 操作を実行するには、PutDatabaseRecord プロセッサを以下のように設定します:

      • Record Reader プロパティをCSV Reader Controller Service に設定します。CSV Reader Controller Service を、CSV ファイルの形式に合わせて設定します。
      • Statement Type プロパティをINSERT に設定します。
      • Database Connection Pooling Service を、ドライバー設定を保持するDBCPConnection Pool に設定します。ドライバーはBulk API を使用するように設定する必要があります。

        プロパティ
        Database Connection URL jdbc:apachecouchdb:Url=http://localhost:5984;User=abc123;Password=abcdef;
        Database Driver Class Name cdata.jdbc.apachecouchdb.ApacheCouchDBDriver
      • Catalog Name プロパティを、テーブルが属するカタログの名前に設定します。
      • Schema Name プロパティを、テーブルが属するスキーマの名前に設定します。
      • Table Name プロパティを、INSERT 先のテーブル名に設定します。
      • Maximum Batch Size プロパティを、単一のバッチに含めるレコードの最大数に設定します。

      UPDATE 操作

      バッチUPDATE 操作を実行するには、PutDatabaseRecord プロセッサを以下のように設定します:

      • Record Reader プロパティをCSV Reader Controller Service に設定します。CSV Reader Controller Service を、CSV ファイルの形式に合わせて設定します。
      • Statement Type プロパティをUPDATE に設定します。
      • Database Connection Pooling Service を、ドライバー設定を保持するDBCPConnection Pool に設定します。ドライバーはBulk API を使用するように設定する必要があります。上記と同じDatabase Connection URL 形式を使用します。
      • Catalog Name プロパティを、テーブルが属するカタログの名前に設定します。
      • Schema Name プロパティを、テーブルが属するスキーマの名前に設定します。
      • Table Name プロパティを、UPDATE 対象のテーブル名に設定します。
      • Update Keys プロパティを、UPDATE に必要なカラム名に設定します。
      • Maximum Batch Size プロパティを、単一のバッチに含めるレコードの最大数に設定します。

      DELETE 操作

      バッチDELETE 操作を実行するには、PutDatabaseRecord プロセッサを以下のように設定します:

      • Record Reader プロパティをCSV Reader Controller Service に設定します。CSV Reader Controller Service を、CSV ファイルの形式に合わせて設定します。
      • Statement Type プロパティをDELETE に設定します。
      • Database Connection Pooling Service を、ドライバー設定を保持するDBCPConnection Pool に設定します。ドライバーはBulk API を使用するように設定する必要があります。上記と同じDatabase Connection URL 形式を使用します。
      • Catalog Name プロパティを、テーブルが属するカタログの名前に設定します。
      • Schema Name プロパティを、テーブルが属するスキーマの名前に設定します。
      • Table Name プロパティを、UPDATE 対象のテーブル名に設定します。
      • INSERT やUPDATE のStatement Type とは異なり、DELETE 操作ではMaximum Batch Size プロパティは表示されません。ただし、操作は引き続きバッチで処理されます。変更しない場合、バッチあたりの最大レコード数はデフォルト値の2000 です。DELETE 操作で使用するMaximum Batch Size の値を変更するには、Statement Type をINSERT またはUPDATE に変更し、Maximum Batch Size プロパティの値を変更して「Apply Changes」をクリックします。最後に、プロセッサの設定を再度開き、Statement Type をDELETE に戻して「Apply Changes」をクリックします。
  5. LogAttribute プロセッサの設定

    最後に、LogAttribute プロセッサを設定して、ユースケースに基づいてログに記録または無視する属性とログレベルを指定します。

無償トライアルと詳細情報

CData JDBC Driver for CouchDB の30日間無償トライアルをダウンロードして、Apache NiFi でリアルタイムCouchDB のデータの操作をはじめましょう。ご不明な点があれば、サポートチームにお問い合わせください。

はじめる準備はできましたか?

CouchDB Driver の無料トライアルをダウンロードしてお試しください:

 ダウンロード

詳細:

CouchDB Icon CouchDB JDBC Driver お問い合わせ

CouchDB データを組み込んだパワフルなJava アプリケーションを短時間・低コストで作成して配布できます。