

# AWS Glue APIを使用したワークフローのクエリ
<a name="workflows_api_concepts"></a>

AWS Glue には、ワークフローを管理するための高度な API が用意されています。AWS Glue API を使用してワークフローの静的ビューまたは実行中のワークフローの動的ビューを取得できます。詳細については、[ワークフロー](aws-glue-api-workflow.md)を参照してください。

**Topics**
+ [静的ビューのクエリ](#workflows_api_concepts_static)
+ [動的ビューのクエリ](#workflows_api_concepts_dynamic)

## 静的ビューのクエリ
<a name="workflows_api_concepts_static"></a>

`GetWorkflow` API オペレーションを使用して、ワークフローの設計を示す静的ビューを取得します。このオペレーションは、ノードおよびエッジで構成される有向グラフを返します。ノードは、トリガー、ジョブ、またはクローラを表します。エッジは、ノード間の関係を定義します。AWS Glue コンソールのグラフでは、エッジがコネクタ (矢印) で表されます。

このオペレーションは、NetworkX、igraph、JGraphT、Java Universal Network/Graph (JUNG) Framework などの一般的なグラフ処理ライブラリでも使用できます。これらのライブラリが表すグラフはすべてが類似しているため、必要な変換は最小限です。

この API から返される静的ビューは、ワークフローに関連付けられているトリガーの最新の定義に基づく最新のビューです。

### グラフ定義
<a name="workflows_api_concepts_static_graph"></a>

ワークフローのグラフ G は順序付きペア (N、E) で、N はノードのセットを表し、E はエッジのセットを表します。*ノード* はグラフ内の頂点で、一意の数値で識別されます。ノードのタイプは、トリガー、ジョブ、またはクローラです。例: `{name:T1, type:Trigger, uniqueId:1}, {name:J1, type:Job, uniqueId:2}`。

*エッジ* は、2 タプルの形式(`src, dest`) です。 `src` と `dest` はノードで、`src` から `dest`への有向エッジがあります。

### 静的ビューのクエリの例を示します。
<a name="workflows_api_concepts_static_example"></a>

ジョブ J1 の完了時にジョブ J2 をトリガーする条件付きのトリガー T を考えます。

```
J1 ---> T ---> J2
```

ノード: J1、T、J2 

エッジ: (J1、T)、(T、J2)

## 動的ビューのクエリ
<a name="workflows_api_concepts_dynamic"></a>

`GetWorkflowRun` API オペレーションを使用して、実行中のワークフローの動的ビューを取得します。このオペレーションは、グラフの同じ静的ビューを、ワークフローの実行に関連するメタデータと共に返します。

実行の際、`GetWorkflowRun` 呼び出しのジョブを表すノードでは、最新のワークフロー実行の一部として開始されたジョブ実行のリストを含んでいます。このリストを使用して、各ジョブの実行ステータスをグラフ自体に表示できます。まだ実行されていないダウンストリームの依存関係の場合、このフィールドは `null` に設定されます。グラフ化された情報により、任意の時点における任意のワークフローの現在の状態を確認できます。

この API から返される動的ビューは、ワークフローの実行が開始された時点における静的ビューに基づいています。

*ランタイムノードの例:* `{name:T1, type: Trigger, uniqueId:1}`、`{name:J1, type:Job, uniqueId:2, jobDetails:{jobRuns}}`、`{name:C1, type:Crawler, uniqueId:3, crawlerDetails:{crawls}}`

### 例 1: 動的ビュー
<a name="workflows_api_concepts_dynamic_examples"></a>

次の例は、単純な 2 トリガーワークフローを示しています。
+ ノード: t1、j1、t2、j2 
+ エッジ: (t1, j1)、(j1, t2)、(t2, j2)

`GetWorkflow` レスポンスの内容は次のとおりです。

```
{
    Nodes : [
        {
            "type" : Trigger,
            "name" : "t1",
            "uniqueId" : 1
        },
        {
            "type" : Job,
            "name" : "j1",
            "uniqueId" : 2
        },
        {
            "type" : Trigger,
            "name" : "t2",
            "uniqueId" : 3
        },
        {
            "type" : Job,
            "name" : "j2",
            "uniqueId" : 4
        }
    ],
    Edges : [
        {
            "sourceId" : 1,
            "destinationId" : 2
        },
        {
            "sourceId" : 2,
            "destinationId" : 3
        },
        {
            "sourceId" : 3,
            "destinationId" : 4
        }
}
```

`GetWorkflowRun` レスポンスの内容は次のとおりです。

```
{
    Nodes : [
        {
            "type" : Trigger,
            "name" : "t1",
            "uniqueId" : 1,
            "jobDetails" : null,
            "crawlerDetails" : null
        },
        {
            "type" : Job,
            "name" : "j1",
            "uniqueId" : 2,
            "jobDetails" : [
                {
                    "id" : "jr_12334",
                    "jobRunState" : "SUCCEEDED",
                    "errorMessage" : "error string"
                }
            ],
            "crawlerDetails" : null
        },
        {
            "type" : Trigger,
            "name" : "t2",
            "uniqueId" : 3,
            "jobDetails" : null,
            "crawlerDetails" : null
        },
        {
            "type" : Job,
            "name" : "j2",
            "uniqueId" : 4,
            "jobDetails" : [
                {
                    "id" : "jr_1233sdf4",
                    "jobRunState" : "SUCCEEDED",
                    "errorMessage" : "error string"
                }
            ],
            "crawlerDetails" : null
        }
    ],
    Edges : [
        {
            "sourceId" : 1,
            "destinationId" : 2
        },
        {
            "sourceId" : 2,
            "destinationId" : 3
        },
        {
            "sourceId" : 3,
            "destinationId" : 4
        }
}
```

### 例 2: 複数のジョブと 1 つの条件付きのトリガー
<a name="workflows_api_concepts_dynamic_example_2"></a>

次の例は、複数のジョブと 1 つの条件付きのトリガー (t3) を持つワークフローを示しています。

```
Consider Flow:
T(t1) ---> J(j1) ---> T(t2) ---> J(j2)
             |                    |
             |                    |
             >+------> T(t3) <-----+
                        |
                        |
                      J(j3)

Graph generated:
Nodes: t1, t2, t3, j1, j2, j3
Edges: (t1, j1), (j1, t2), (t2, j2), (j1, t3), (j2, t3), (t3, j3)
```