テーブルへの大きなファイルコンテンツの挿入の例 - Mule 4

データベース用 Anypoint Connector (Database Connector) の ​Insert​ 操作では、テーブルへのキャラクターラージオブジェクト (CLOB) の挿入がサポートされます。次の例は、大きなファイルのコンテンツを読み取って、そのコンテンツの型をサポートするテーブルにコンテンツを挿入する方法を示しています。

この例を実行するには、次の操作が必要です。

  • テーブルを作成する

  • Mule アプリケーションを作成する

  • アプリケーションを実行し、curl コマンドを使用してアプリケーションをテストする

Studio キャンバスでの Mule アプリケーションフローの例

テーブルの作成

任意の SQL クライアントツールを使用して、次の SQL ステートメントを含む ​.sql​ スクリプトを実行してテーブルを作成します。

CREATE TABLE AWESOMECLOBDATA(
    id INT AUTO_INCREMENT PRIMARY KEY,
    clob_data CLOB
);

Mule アプリケーションの作成

次の手順に従って Mule アプリケーションを作成します。

  1. Studio で HTTP の ​[Listener]​ ソースをキャンバスにドラッグします。

  2. HTTP グローバル接続を設定するために、​[Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックします。

  3. HTTP グローバル接続を設定して、​[OK]​ をクリックします。

  4. [Path (パス)]​ を ​/read-insert​ に設定します。

  5. [Logger]​ コンポーネントを [HTTP] の ​[Listener]​ ソースの右にドラッグします。

  6. [Message (メッセージ)]​ を ​Starting LARGE CLOB reading​ に設定します。

  7. File Connector の ​[Read]​ 操作を ​[Logger]​ コンポーネントの右にドラッグします。

  8. 操作の設定画面の ​[General (一般)]​ タブで、​[Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックし、グローバル要素設定項目にアクセスします。

  9. ファイルを適切に読み取るために ​[Working Directory (作業ディレクトリ)]​ を ​/dir/containing/file/​ に設定します。

  10. [OK]​ をクリックします。

  11. [File Path (ファイルパス)]​ を ​awesomeFile.json​ に設定します。

  12. [MIME Type (MIME タイプ)]​ タブで ​[MIME Type (MIME タイプ)]​ を ​application/octet-stream​ に設定します。

  13. 別の ​[Logger]​ コンポーネントを ​[Read]​ 操作の右にドラッグします。

  14. [Display Name (表示名)]​ を ​LARGE CLOB’s content on flow​ と設定します。

  15. Database Connector の ​[Insert]​ 操作を 2 番目の ​[Logger]​ コンポーネントの右にドラッグします。

  16. データベースグローバル接続を設定するために、​[Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックします。

  17. データベース接続を設定して、​[OK]​ をクリックします。

  18. [SQL Query Text (SQL クエリテキスト)]​ を ​INSERT INTO AWESOMECLOBDATA (clob_data) VALUES (:payload)​ に設定します。
    SQL テキストでは、ファイルのコンテンツを含む新しいレコードをテーブルに挿入します。

  19. [Input Parameters (入力パラメーター)]​ を式に設定します。

{
	payload: payload
}
  1. 別の ​[Logger]​ コンポーネントを ​[Insert]​ 操作の右にドラッグします。

  2. [Display Name (表示名)]​ を ​LARGE CLOB’s content inserted​ と設定します。

  3. [Message (メッセージ)]​ を式 ​payload​ に設定します。

  4. Mule アプリケーションを保存して実行します。

  5. ターミナルで curl コマンド「​curl localhost:8081/read-insert​」を使用して、アプリケーションをテストします。

アプリケーションの MIME タイプ

application/octet-stream​ MIME タイプでは、ファイルのコンテンツがバイナリ形式に変換されるため、​Read​ 操作から ​Insert​ 操作にデータを適切に流すことができます。

たとえば、​text/plain​ MIME タイプを使用した場合、メモリ不足 (OOM) エラーが発生する可能性があります。これは、​Insert​ 操作の ​[Input Parameters (入力パラメーター)]​ 項目で定義された DataWeave ブロックで、データを操作自体に配布する前に、ファイルからのデータストリーム全体をテキストに変換する操作が試行されるために発生する可能性があります。

application/json​ MIME タイプを使用することもできます。ただし、ペイロードを参照するには、​Insert​ 操作で ​payload.^raw​ を使用します。

Mule アプリケーションの XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
	xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:file="http://www.mulesoft.org/schema/mule/file"
	xmlns:http="http://www.mulesoft.org/schema/mule/http"
	xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd">
	<http:listener-config name="HTTP_Listener_config"  >
		<http:listener-connection host="0.0.0.0" port="8081" />
	</http:listener-config>

	<file:config name="File_Config" >
		<file:connection workingDir="/dir/containing/file/" />
	</file:config>

	<db:config name="dbConfig"  >
		<db:oracle-connection host="127.0.0.1" user="sys as sysdba" password="password" serviceName="orcl"/>
	</db:config>

	<flow name="read-insert-large-clob-file"  >
		<http:listener doc:name="/read-insert"  config-ref="HTTP_Listener_config" path="/read-insert" />

		<logger level="INFO" message="Starting LARGE CLOB reading" />

		<file:read config-ref="File_Config" path='awesomeFile.json' outputMimeType="application/octet-stream" />

		<logger level="INFO" doc:name="LARGE CLOB's content on flow" />

		<db:insert doc:name="Insert LARGE CLOB" config-ref="dbConfig">
			      <db:sql><![CDATA[INSERT INTO AWESOMECLOBDATA (clob_data) VALUES (:payload)]]></db:sql>
					<db:input-parameters><![CDATA[#[{
	payload: payload
}]]]></db:input-parameters>
		        </db:insert>

		<logger level="INFO" message="#[payload]" />
	</flow>
</mule>