Apache Spark でHCL Domino のデータをSQL で操作する方法
Apache Spark は大規模データ処理のための高速エンジンです。CData JDBC Driver for Domino と組み合わせると、Spark はリアルタイムでHCL Domino のデータに連携して処理ができます。本記事では、Spark シェルに接続してHCL Domino をクエリする方法について解説します。
CData JDBC Driver は、最適化されたデータ処理がドライバーに組み込まれているため、リアルタイムHCL Domino と対話するための高いパフォーマンスを提供します。HCL Domino に複雑なSQL クエリを発行すると、ドライバーはフィルタや集計など、サポートされているSQL操作を直接HCL Domino にプッシュし、組込みSQL エンジンを使用してサポートされていない操作(SQL 関数やJOIN 操作)をクライアント側で処理します。組み込みの動的メタデータクエリを使用すると、ネイティブデータ型を使用してHCL Domino を操作して分析できます。
CData JDBC Driver for Domino をインストール
まずは、本記事右側のサイドバーからDomino JDBC Driver の無償トライアルをダウンロード・インストールしてください。30日間無償で、製品版の全機能が使用できます。
Spark Shell を起動してHCL Domino のデータに接続
- ターミナルを開き、Spark shell でCData JDBC Driver for Domino JAR file をjars パラメータに設定します:
$ spark-shell --jars /CData/CData JDBC Driver for Domino/lib/cdata.jdbc.domino.jar
- Shell でJDBC URL を使ってHCL Domino に接続し、SQL Context load() function でテーブルを読み込みます。
Domino への接続
それでは、Domino のデータに接続していきましょう。接続するには、以下のプロパティを設定してください。
- URL:Domino データベースをホスティングしているサーバーのホスト名またはIP アドレス。Domino データベースをホスティングしているサーバーのポートを含めます。例:http://sampleserver:1234/
- DatabaseScope:Domino Web UI でのスコープ名。CData 製品は、指定されたスコープに適合するスキーマのフォームとビューを公開します。Domino Admin UI で、サイドバーのScopes メニューを選択してください。このプロパティを既存のスコープ名に設定します
Domino での認証
続いて、認証方法を設定しましょう。Domino では、ログインクレデンシャル(OAuthPassword)またはMicrosoft Entra ID(AzureAD)のいずれかによる認証をサポートしています。
ログインクレデンシャル
ログインクレデンシャルで認証するには、以下のプロパティを設定してください:
- AuthScheme:OAuthPassword
- User:認証するDomino ユーザーのユーザー名
- Password:認証するDomino ユーザーに関連付けられたパスワード
ドライバーがログインクレデンシャルを使用して、自動的にOAuth トークン交換を実行します。
Microsoft Entra ID(Azure AD)
この認証方法は、Azure Active Directory をIdP として使用してJWT トークンを取得します。Azure Active Directory にカスタムのアプリケーションを作成し、それをIdP として設定する必要があります。詳しい手順については、ヘルプドキュメントの指示に従ってください。その後、以下のプロパティを設定します。
- AuthScheme:AzureAD
- InitiateOAuth:これをGETANDREFRESH に設定します。InitiateOAuth を使用すると、OAuth 交換の繰り返しやOAuthAccessToken の手動設定を避けることができます
- OAuthClientId:カスタムAzure AD アプリケーションの作成時に取得したクライアントID
- OAuthClientSecret:カスタムAzure AD アプリケーションの作成時に取得したクライアントシークレット
- CallbackURL:カスタムAzure AD アプリケーションの登録時に指定されたリダイレクトURI。例えば、https://localhost:33333
- AzureTenant:データにアクセスするために使用されるMicrosoft Online テナント。companyname.microsoft.com 形式の値またはテナントID のいずれかを指定してください
テナントID は、Azure ポータルのAzure Active Directory > プロパティページに表示されているディレクトリID と同じです。
組み込みの接続文字列デザイナー
JDBC 接続文字列URL の作成には、HCL Domino JDBC Driver にビルトインされたデザイナを使用できます。JAR ファイルをダブルクリックするか、コマンドラインでJAR ファイルを実行するとデザイナが開きます。
java -jar cdata.jdbc.domino.jar
接続プロパティを入力し、接続文字列をクリップボードにコピーします。
scala> val domino_df = spark.sqlContext.read.format("jdbc").option("url", "jdbc:domino:URL=http://dominoserver:3002/;DatabaseScope=names;TableTypes=Tables;AuthScheme=OAuthPassword;User=MyUser;Password=MyPassword;").option("dbtable","ByName").option("driver","cdata.jdbc.domino.DominoDriver").load() - 接続が完了し、データがロードされたら、テーブルスキーマが表示されます。
HCL Domino をテンポラリーテーブルとして登録します:
scala> domino_df.registerTable("byname")-
データに対して、次のようなカスタムSQL クエリを実行します。
scala> domino_df.sqlContext.sql("SELECT Name, Address FROM ByName WHERE City = Miami").collect.foreach(println)コンソールで、次のようなHCL Domino のデータを取得できました!これでHCL Domino との連携は完了です。
CData JDBC Driver for Domino をApache Spark で使って、HCL Domino に対して、複雑かつハイパフォーマンスなクエリを実行できます。30日の無償評価版 をダウンロードしてぜひお試しください。