外部設定とデータ


この記事では、TOPで外部設定とソースデータを読み取り、それを使用して作業を進める方法について紹介します。

PDGは、設定ファイルや入力データを駆使することで、より便利なネットワークを構築することが可能です。例えば、ネットワークの実行時に使用する一連の変数を設定ファイルに定義し、アセットの情報を定義することで、アセットごとにネットワークを実行したりすることができます。

TOPsを用いることで外部のデータを読み取り、それに基づいてワークアイテムやアトリビュートを生成することができます。

 

入力できるデータ形式

  • SQLファイル
    SQL Inputノードはデータベースサーバに対してクエリを実行し、返された各行について、列から取得したアトリビュートを使用してワークアイテムを生成します。
    SQL Outputノードは入力ワークアイテムを受け取り、指定したアトリビュートから取得した列とともに、各ワークアイテムの行を挿入するためのINSERTクエリを書き込みます。
  • CSVファイル
    CSV InputノードはCSVファイルを読み取り、列から取得したアトリビュートを使用して各行のワークアイテムを生成します。
    CSV Outputノードは、入力ワークアイテムを受け取り、各ワークアイテムごとに1行ずつ、アトリビュートから取得した列を含む新しいCSVファイルを書き出します。
    CSV Concatノードは複数のCSVファイルを結合します。 CSV ModifyノードはCSVファイルのさまざまな操作を実行します。
  • JSONファイル
    JSON Inputノードは、JSONファイルに基づいてアトリビュートを持つワークアイテムを生成します。 JSONは非常に自由な形式なので、ノードにはさまざまなデータの「形状」からアイテムとアトリビュートを抽出するためのパラメータがあります。
    JSON Outputノードは入力ワークアイテムを受け取り、ワークアイテムを表すオブジェクトのリストを含むJSONファイルを書き出します。この中には、アトリビュートから取得したキーと値のペアが含まれています。
  • xmlファイル
    Xml Inputノードは、XMLファイルからデータを抽出し、そのデータを含む文字列アトリビュートを作成します。
  • 環境変数データ
    Environment Editノードでは、作業が実行される環境に環境変数を追加することができます。

 

データの操作

  • Pythonを使う
    プログラミングになじみがある方にとっては、データの前処理をしたり、既存のアトリビュートを操作する、最も簡単で柔軟な方法は、Pythonスニペットを使うことです。
    入力ワークアイテムのアトリビュートを編集したい場合は、次のようにします。
    1. Python Scriptノードを作成します。 Python Scriptノードを使用すると、入力ワークアイテムを一度に1つずつ編集できます。
    2. パラメータより、In processをオンにします。
    3. 下の例のようなアトリビュートを操作するためのスクリプトを記述します。
      # Assume we've ingested data that sets the "detail" attribute to a string
      # such as "low", "medium", or "high", and we want to translate that into
      # a numeric value, eg. -1, 0, or 1.
      
      # Define a dictionary mapping string values to numeric values
      lookup = {"low": -1, "medium": 0, "high": 1}
      # Get the value of the "detail" string attribute
      detail = work_item.data.intData("detail", 0)
      # Translate the string into the numeric equivalent
      level = lookup.get(detail, 0)
      # Create a new "level" attribute with the numeric equivalent
      work_item.data.setInt("level", level)
      

     

    総統計(たとえば、アトリビュートの平均値)を計算したい場合は、次のようにします。

    1. Wait for Allノードを追加します。 これにより、すべてのワークアイテムが利用可能になるまで処理が一時停止されるため、平均にはすべての値が含まれます。
    2. Wait for Allノードの後に、Python Scriptノードを追加します。
    3. パラメータより、[Work item generation]を[Dynamic]に設定し、[In process]をオンにします。
    4. スクリプト上では、parent_itemを使用することによって、ひとつ上の親ノードに当たる、Wait for Allノードのアイテムを参照することができます。 このアイテムには、Partiotion内のアイテムにアクセスするために使用できるpartitionItemsリストアトリビュートがあります。
      # Get the work items in the input Wait for All's partition
      items = part.partitionItems
      # Calculate the average of the "foo" attribute
      total = sum(it.data.floatData("foo", 0) for it in items)
      average = total / float(len(items))
      # Set the average as an attribute on the outgoing item
      work_item.data.setFloat("average", average, 0)
      

     

  • アトリビュートを操作するTOPノードを使用する
    Attribute Createノードを使用して、アトリビュートを追加または再定義したり、エクスプレッションを使用して既存のアトリビュートに基づいて新しいアトリビュートの値を計算したりできます。

    Attribute Copyノードは、あるブランチのワークアイテムから別のブランチのワークアイテムにアトリビュートを複製し、インデックスまたはアトリビュート値でワークアイテムを一致させることができます。

    Attribute Deleteノードは、ワークアイテムからアトリビュートを削除します。 これは、例えばアトリビュートをCSVに出力する際にデバッグ用のアトリビュート等を出力前に削除する際など利用できます。