SQL データ管理

SQL データ管理」アクティビティでは、作業用テーブルを作成および設定する独自の SQL クエリを記述できます。

前提条件

アクティビティを設定する前に、以下の前提条件を満たしていることを確認してください。

  • このアクティビティは、リモートデータソースに対してのみ使用できます。そのため、インスタンスに FDA(Federated Data Access)パッケージをインストールする必要があります。詳細情報
  • アウトバウンドスキーマがデータベースに存在し、FDA データベースにリンクされている必要があります。 詳細情報
  • ワークフローを実行するオペレーターには、USE SQL DATA MANAGEMENT ACTIVITY (useSqlDmActivity) ネームド権限が必要です。詳細情報

「SQL データ管理」アクティビティの設定

  1. アクティビティの「ラベル」を指定します。

  2. 使用する​外部アカウント​を選択し、この外部アカウントにリンクする​アウトバウンドスキーマ​を選択します。

    注意

    アウトバウンドスキーマは固定されており、編集することはできません。

  3. SQL スクリプトを追加します。

    注意

    SQL スクリプトが機能し、その参照(フィールド名など)がアウトバウンドスキーマに従っていることを確認するのは、SQL スクリプト作成者の責任です。

    既存の SQL コードを読み込む場合は、「データベースに格納されているエンティティに SQL スクリプトを含める」オプションを選択します。管理設定SQL スクリプト​メニューで SQL スクリプトを作成し、格納する必要があります。

    または、専用の領域に SQL スクリプトを入力するか、コピーして貼り付けます。

    このアクティビティでは、スクリプト内で次の変数を使用できます。

    • activity.tableName:アウトバウンド作業用テーブルの SQL 名

    • task.incomingTransitionByName(‘name’).tableName:使用する受信トランジションによって実行される作業用テーブルの SQL 名(トランジションは名前で識別されます)

      メモ

      ('name') 値は、トランジションプロパティの「名前」フィールドに対応しています。

  4. アウトバウンド作業用テーブルを作成するコマンドが SQL スクリプトに既に含まれている場合は、「作業用テーブルを自動作成」オプションの選択を解除します。選択を解除しない場合、ワークフローが実行されると作業用テーブルが自動的に作成されます。

  5. OK」をクリックして、アクティビティの設定を確定します。

これでアクティビティが設定され、ワークフローで実行する準備が整いました。

注意

アクティビティ実行後のアウトバウンドトランジションレコード数は単なる目安です。SQL スクリプトの複雑さのレベルによって異なる場合があります。

アクティビティを再開すると、実行ステータスに関係なく、スクリプト全体が最初から実行されます。

SQL スクリプトのサンプル

メモ

この節にあるスクリプトのサンプルは、PostgreSQL で実行することを想定しています。

以下のスクリプトは、作業用テーブルを作成し、この同じ作業用テーブルにデータを挿入します。

CREATE UNLOGGED TABLE <%= activity.tableName %> (
  iRecipientId INTEGER DEFAULT 0,
  sFirstName VARCHAR(100),
  sMiddleName VARCHAR(100),
  sLastName VARCHAR(100),
  sEmail VARCHAR(100)
);

INSERT INTO <%= activity.tableName %>
SELECT iRecipientId, sFirstName, sMiddleName, sLastName, sEmail
FROM nmsRecipient
GROUP BY iRecipientId, sFirstName, sMiddleName, sLastName, sEmail;

以下のスクリプトは、CTAS 操作(CREATE TABLE AS SELECT)を実行し、作業用テーブルのインデックスを作成します。

CREATE TABLE <%= activity.tableName %>
AS SELECT iRecipientId, sEmail, sFirstName, sLastName, sMiddleName
FROM nmsRecipient
WHERE sEmail IS NOT NULL
GROUP BY iRecipientId, sEmail, sFirstName, sLastName, sMiddleName;

CREATE INDEX ON <%= activity.tableName %> (sEmail);

ANALYZE <%= activity.tableName %> (sEmail);

以下のスクリプトは、2 つの作業用テーブルを結合します。

CREATE TABLE <%= activity.tableName %>
AS SELECT i1.sFirstName, i1.sLastName, i2.sEmail
FROM <%= task.incomingTransitionByName('input1').tableName %> i1
JOIN <%= task.incomingTransitionByName('input2').tableName %> i2 ON (i1.id = i2.id)

このページ