SQL データ管理 sql-data-management

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

前提条件 prerequisites

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

  • このアクティビティは、リモートデータソースに対してのみ使用できます。
  • アウトバウンドスキーマがデータベースに存在し、FDA データベースにリンクされている必要があります。

「SQL データ管理」アクティビティの設定 configuring-the-sql-data-management-activity

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

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

    note caution
    CAUTION
    アウトバウンドスキーマは固定されており、編集することはできません。
  3. SQL スクリプトを追加します。

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

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

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

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

    • activity.tableName:アウトバウンドワークテーブルの SQL 名

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

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

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

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

CAUTION
アクティビティ実行後のアウトバウンドトランジションレコード数は単なる目安です。SQL スクリプトの複雑さのレベルによって異なる場合があります。
アクティビティを再開すると、実行ステータスに関係なく、スクリプト全体が最初から実行されます。

SQL スクリプトのサンプル sql-script-samples

NOTE
この節にあるスクリプトのサンプルは、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)
recommendation-more-help
cffff7e4-091f-472e-87ca-52087599f99d