

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 查詢工作流程 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>

考慮條件式觸發 T，它會在任務 J1 完成時觸發任務 J2。

```
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>

以下範例示範簡單的雙觸發工作流程。
+ 節點：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：具有條件式觸發的多項任務
<a name="workflows_api_concepts_dynamic_example_2"></a>

以下範例顯示具有多項任務和條件式觸發 (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)
```