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

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

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

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

JDBC URL の生成

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

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

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

		java -jar cdata.jdbc.azuredevops.jar
	

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

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

Azure DevOps アカウントに接続するには、Profile -> Organizations に移動し、アカウントの組織名を取得します。Organization プロパティをこの値に設定します。

Note: 複数のカタログやスキーマに存在するテーブル名もあります。テーブルをクエリする際は、Catalog およびSchema 接続プロパティ、または完全修飾テーブル名のいずれかでカタログとスキーマを指定する必要があります。

Azure DevOps への認証

Azure DevOps は、Basic 認証とAzure AD(OAuth ベース)認証の両方をサポートします。

Basic

Basic 認証でAzure DevOps に接続する場合、OrganizationPersonalAccessToken の両方を指定します。 パーソナルアクセストークンを生成するには、Azure DevOps 組織アカウントにログインし、Profile -> Personal Access Tokens -> New Token に移動します。生成されたトークンが表示されます。

Azure AD

Azure AD は、Microsoft のマルチテナント、クラウドベースのディレクトリおよびID 管理サービスです。 これはユーザーベースの認証で、AuthSchemeAzureAD に設定し、Organization をAzure DevOps Organization の名前に設定する必要があります。 Web アプリケーションを介したAzure AD への認証には、必ずカスタムOAuth アプリケーションの作成が必要です。 詳しい認証方法は、ヘルプドキュメント の「Azure DevOps への認証」セクションを参照してください。

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:azuredevops:AuthScheme=Basic;Organization=MyAzureDevOpsOrganization;ProjectId=MyProjectId;PersonalAccessToken=MyPAT;
        Database Driver Class Name cdata.jdbc.azuredevops.AzureDevOpsDriver
      • 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 Azure DevOps の30日間無償トライアルをダウンロードして、Apache NiFi でリアルタイムAzure DevOps のデータの操作をはじめましょう。ご不明な点があれば、サポートチームにお問い合わせください。

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

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

 ダウンロード

詳細:

Azure DevOps Icon Azure DevOps JDBC Driver お問い合わせ

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