第21章 SQL データベースへの接続
インテグレーションでは、以下の SQL データベースに接続することができます。
- Apache Derby
- MySQL
- PostgreSQL
インテグレーションでアクセスするデータベースへのコネクションを作成します。その後、インテグレーションを作成し、データベースコネクションをインテグレーションに追加します。
他の種類のデータベースに接続するには、そのデータベースの JDBC ドライバーをアップロードする必要があります。
以下を参照してください。
21.1. データベースコネクションの作成
インテグレーションで接続する各データベースの個別のコネクションを作成します。複数のインテグレーションで同じコネクションを使用できます。
データベースコネクションは指定のデータベーステーブルで操作するか、指定のストアドプロシージャーを呼び出します。
前提条件
インテグレーションがデータベースに接続するときにデータベーステーブルまたはストアドプロシージャーが存在する必要があります。
手順
- 接続するデータベースの JDBC ドライバーがクラスパスにあるようにしてください。プロプライエタリーデータベースに接続するために JDBC ドライバーライブラリーエクステンションをアップロードした場合、ドライバーはアップロードプロセスによってクラスパス上に置かれます。「JDBC ドライバーライブラリーエクステンションの作成」を参照してください。
- Fuse Online の左パネルで Connections をクリックし、利用可能なコネクションを表示します。
- 右上にある Create Connection をクリックし、Fuse Online コネクターを表示します。
- Database コネクターをクリックします。
以下を入力してコネクションを設定します。
-
Connection URL フィールドに、接続するデータベースの JDBC URL を入力します。たとえば、
jdbc:postgresql://ignite-db1234/sampledb
を入力します。 - Username フィールドに、データベースのアクセスに使用するアカウントの名前を入力します。同じアカウントのパスワードとユーザー名を指定するようにしてください。
- Password フィールドに、データベースのアクセスに使用する、ユーザーアカウントに関連するパスワードを入力します。
-
Schema フィールドにデータベースのスキーマの名前を入力します。コネクション URL がスキーマを指定する場合、このフィールドがコネクション URL と同じスキーマを示すようにしてください。たとえば、
sampledb
を入力します。
-
Connection URL フィールドに、接続するデータベースの JDBC URL を入力します。たとえば、
- Validate をクリックします。Fuse Online はコネクションの検証を試み、検証の成功または失敗を示すメッセージを表示します。検証に失敗した場合は、必要に応じて設定の詳細を修正し、再度検証を行います。
- 検証に成功した場合は Next をクリックします。
-
Name フィールドに、このコネクションを別のコネクションと区別するために使用する名前を入力します。たとえば、
PostgreSQL DB 1
を入力します。 -
Description は任意のフィールドで、このコネクションに関する便利な情報を入力します。たとえば、
Sample PostgreSQL connection that uses my login credentials.
を入力します。 - Save をクリックし、作成したコネクションが利用可能になったことを確認します。上記の例の名前を入力した場合は、インテグレーションに追加できるコネクションとして PostgreSQL DB 1 が表示されます。
21.2. データベースレコードを取得してインテグレーションの実行をトリガー
SQL ステートメントまたは SQL ストアドプロシージャーの呼び出し結果を基にしてインテグレーションの実行をトリガーするには、データベースコネクションをインテグレーションの最初のコネクションとして選択します。
前提条件
データベースコネクションが作成されている必要があります。
手順
- Fuse Online パネルの左側にある Integrations をクリックします。
- Create Integration をクリックします。
- Choose a connection ページで、インテグレーションを開始するために使用するデータベースコネクションをクリックします。
Choose an action ページで、以下の 1 つを選択します。
- Periodic SQL invocation は、指定した SQL ステートメントを定期的に呼び出して、データを取得します。
- Periodic stored procedure invocation は、選択または指定したストアドプロシージャーを定期的に呼び出して、データを取得します。
Periodic SQL invocation を選択した場合、Query フィールドに SQL
SELECT
ステートメントまたは 1 つ以上のレコードを取得する他の標準の SQL ステートメントを入力します。例:SELECT * from my_db_table
必要なデータが含まれるデータベーステーブルが存在する必要があります。Periodic stored procedure invocation を選択した場合、Procedure name フィールドに必要なデータを取得するために呼び出すストアドプロシージャーを選択または入力します。指定するストアドプロシージャーが存在する必要があります。データベース管理者は、インテグレーションで使用する必要があるストアドプロシージャーを作成しておく必要があります。
-
Period フィールドに整数を入力し、単位がミリ秒、秒、分、時間、または日であるかを示します。たとえば、
5 minutes
を指定した場合、コネクションは指定のステートメントまたはストアドプロシージャーを 5 分間隔で呼び出します。 - Next をクリックします。
SQL エクステンションを使用する時の制限事項
Query フィールドに入力する SQL ステートメントは、標準の SQL コンストラクトでなければなりません。Fuse Online は、Procedural Language/PostgreSQL (PL/pgSQL) または Oracle Procedural Language Extensions to SQL (PL/SQL) などの SQL エクステンションを認識または解析しません。ただし、ストアドプロシージャーでは SQL エクステンションを使用できます。
結果
Fuse Online はコネクションの検証を試みます。これには、指定の SQL ステートメントの構文チェックや、ステートメントまたはストアドプロシージャーターゲットデータの存在確認が含まれます。検証に成功した場合、Fuse Online は最初のコネクションをインテグレーションに追加します。検証に失敗した場合、問題に関するメッセージが Fuse Online に表示されます。必要に応じて入力を更新し、再試行します。
21.3. データを更新する SQL ステートメントのパラメータープレースホルダーおよび値
フローの途中にあるデータベースコネクションや、シンプルなインテグレーションを終了するデータベースコネクションは、データを更新する SQL ステートメントを実行できます。データベースコネクションをインテグレーションに追加するとき、実行する SQL ステートメントのプレースホルダーパラメーターを指定できます。実行中、入力パラメーターの値がコレクションにあるとコネクションはバッチ更新を実行できます。
SQL ステートメントでのパラメーターの指定
インテグレーションを作成または編集し、データベースを更新するコネクションを追加する場合、ランタイムにコネクションが実行する SQL ステートメントにプレースホルダーパラメーターを指定したり、ランタイムに実行されるストアドプロシージャーにプレースホルダーを含めることができます。以下に例を示します。
INSERT INTO TODO(task, completed) VALUES(:#param_1, :#param_2) DELETE FROM TODO WHERE task LIKE :#param_3
これらのプレースホルダーの値を指定するには、フローのデータベースコネクションの前にデータマッピングステップを追加します。データマッピングステップで、適切なソースデータフィールドをターゲットデータフィールドにマップします。たとえば、ソースデータを :#param_1
、:#param_2
、および :#param_3
ターゲットフィールドにマップします。「データマッパーステップの追加」を参照してください。
パラメーター値のコレクションでのバッチ更新
ランタイムにデータベースコネクションがデータを挿入、削除、または更新する SQL ステートメントを実行すると、実行された SQL ステートメントは多くの場合で 1 つ以上のプレースホルダーパラメーター (例: :#task
) を指定します。この場合、パラメーターの単一セットまたはパラメーターセットのコレクションをコネクションの入力とすることができ、セットの各要素が対応するプレースホルダーパラメーターの値を定義します。
たとえば HTTP リクエスト (Webhook)や API プロバイダーインテグレーションの REST API サービスに送信されたリクエストなど、データベースコネクションへの入力はフローの前のコネクションから取得されます。入力がコレクションである場合、コネクションはバッチモードを使用してテーブルを更新します。たとえば、以下の SQL ステートメントについて考えてみましょう。
insert into todo (task) values (:#task)
入力コレクションに 3 つの値が含まれる場合、コネクションは値ごとに 1 つずつ、3 つのレコード挿入します。ここで、2 つのプレースホルダーパラメーターを持つ SQL ステートメントについて考えてみましょう。
insert into todo (task, completed) values (:#task, :#completed)
この SQL ステートメントを実行するコネクションへの入力で、データシェイプ仕様は単一の要素を指定できます。例を以下に示します。
{"task": "write some docs", "completed": 0}
代わりにコレクションを指定することもできます。例を以下に示します。
[{"task": "write doc", "completed": 1}, {"task": "publish doc", "completed": 0}]
コレクションを入力とする場合、コネクションはパラメーター値に各セットに対して 1 度挿入操作を実行します。この例では、コネクションはパラメーター値の各セットに 1 つずつ、2 つのレコードをテーブルに追加します。
21.4. インテグレーションの途中またはインテグレーションを完了するためにデータベースにアクセス
インテグレーションでは、フローの途中でデータベースにアクセスしたり、シンプルなインテグレーションを終了するためにデータベースにアクセスすることができます。これには、データベースコネクションをフローの途中に追加するか、シンプルなインテグレーションの最後のコネクションとして追加します。
前提条件
- データベースコネクションが作成されている必要があります。
- フローを作成または編集することになり、Fuse Online でインテグレーションに追加するよう要求されます。または、Fuse Online で最後のコネクションを選択するよう要求されます。
手順
- Add to Integration ページで、コネクションの追加先のプラス記号をクリックします。Fuse Online が最後のコネクションを選択するよう要求する場合は、このステップをスキップします。
- アクセスするデータベースのデータベースコネクションをクリックします。
Choose an action ページで、以下の 1 つを選択します。
- Invoke SQL は、指定の SQL ステートメントを実行してデータを操作します。
- Invoke stored procedure は指定または選択したストアドプロシージャーを呼び出してデータを操作します。
Invoke SQL を選択した場合、SQL Statement フィールドで以下を行います。
-
途中のコネクションでは、1 つ以上のレコードを取得する SQL
SELECT
ステートメントを入力するか、1 つ以上のレコードを操作する SQLINSERT
、UPDATE
、またはDELETE
ステートメントを入力します。データが含まれるデータベースが存在する必要があります。 -
最後のコネクションでは、SQL
INSERT
、UPDATE
、またはDELETE
ステートメントを入力し、1 つ以上のレコードを操作します。 Batch update フィールドで、デフォルトの No を使用するか、Yes を選択します。
Batch update の設定は、このアクションへの入力がコレクションで、SQL ステートメントがレコードを挿入、削除、または更新する場合にコネクションの動作に影響します。デフォルトの動作 (Batch update が No の場合) では、コネクションは個別のオブジェクトのみを受け入れ、各オブジェクトに対して 1 度 SQL ステートメントを実行します。Batch update が Yes の場合、コネクションはコレクションをアクションへの入力として受け入れます。コネクションは SQL ステートメントを 1 度実行し、すべてのコレクションアイテムをバッチ更新操作への入力として使用します。
Invoke stored procedure を選択した場合、Procedure name フィールドに必要なデータを操作するために呼び出すストアドプロシージャーの名前を選択または入力します。指定するストアドプロシージャーが存在する必要があります。データベース管理者は、インテグレーションで使用する必要があるストアドプロシージャーを作成しておく必要があります。
-
途中のコネクションでは、1 つ以上のレコードを取得する SQL
- Next をクリックします。
結果
Fuse Online はコネクションの検証を試みます。これには、指定の SQL クエリーの構文チェックや、クエリーまたはストアドプロシージャーターゲットデータの存在確認が含まれます。検証に成功した場合、Fuse Online でコネクションがフローに追加されます。検証に失敗した場合、問題に関するメッセージが Fuse Online に表示されます。必要に応じて入力を更新し、再試行します。
その他のリソース
21.5. プロプライエタリーデータベースへの接続
プロプライエタリー SQL データベースに接続する場合、以下の主なタスクを行う必要があります。
- 開発者は、インテグレーションで接続するデータベースの JDBC ドライバーが含まれるライブラリーエクステンションを作成します。「JDBC ドライバーライブラリーエクステンションの作成」を参照してください。
-
開発者はライブラリーエクステンションが含まれる
.jar
ファイルを提供します。 -
その
.jar
ファイルを Fuse Online にアップロードします。「カスタム機能の使用」を参照してください。 - Fuse Online の Database コネクターを選択し、データベースのコネクション URL を指定して、データベースへのコネクションを作成します。「データベースコネクションの作成」を参照してください。
- インテグレーションで、コネクションをデータベースに追加します。「データベースレコードを取得してインテグレーションの実行をトリガー」または「インテグレーションの途中またはインテグレーションを完了するためにデータベースにアクセス」を参照してください。