

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

# 連線至 Domo
<a name="connecting-to-data-domo"></a>

Domo 是以雲端為基礎的儀表板工具。透過 Domo 的企業應用程式平台，擴展 Domo 所需的基礎已到位，因此您可以更快地建置自訂解決方案。

**Topics**
+ [AWS Glue 支援 Domo](domo-support.md)
+ [包含用於建立和使用連線的 API 操作的政策](domo-configuring-iam-permissions.md)
+ [設定 Domo](domo-configuring.md)
+ [設定 Domo 連線](domo-configuring-connections.md)
+ [從 Domo 實體中讀取](domo-reading-from-entities.md)
+ [Domo 連線選項](domo-connection-options.md)
+ [Domo 限制](domo-connection-limitations.md)

# AWS Glue 支援 Domo
<a name="domo-support"></a>

AWS Glue 支援 Domo，如下所示：

**支援作為來源？**  
是。您可以使用 AWS Glue ETL 任務從 Domo 查詢資料。

**支援作為目標？**  
否。

**支援的 Domo API 版本**  
支援以下 Domo API 版本：
+ v1

# 包含用於建立和使用連線的 API 操作的政策
<a name="domo-configuring-iam-permissions"></a>

下列範例政策說明建立和使用 連線所需的 AWS IAM 許可。如果您要建立新角色，請建立包含下列項目的政策：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

如果不想使用上述方法，可選擇使用下列受管 IAM 政策：
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – 准許存取各種 AWS Glue 程序代表您執行所需的資源。這些資源包括 AWS Glue Amazon S3、IAM、CloudWatch Logs 和 Amazon EC2。如果您遵循此政策中指定資源的命名慣例，則 AWS Glue 程序具有必要的許可。此政策通常會連接至定義編目程式、工作和開發端點時所指定的角色。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) – 當政策連接到的身分使用 AWS 管理主控台時，授予 AWS Glue 資源的完整存取權。如果您依照此政策中指定的資源命名慣例，使用者就能擁有完整的主控台功能。此政策通常連接到 AWS Glue 主控台的使用者。

# 設定 Domo
<a name="domo-configuring"></a>

您必須先符合下列要求，才能使用 AWS Glue 將資料從 Domo 傳輸到支援的目的地：

## 最低需求
<a name="domo-configuring-min-requirements"></a>

以下是最低要求：
+ 您已為 API 存取啟用 Domo 帳戶。
+ 您的 Domo 開發人員帳戶下有一個應用程式，提供用戶端登入資料，當其對您的帳戶進行驗證呼叫時， AWS Glue 會使用 安全地存取您的資料。如需詳細資訊，請參閱[建立 Domo 開發人員應用程式](#domo-configuring-creating-developer-app)。

如果您符合這些要求，就可以 AWS Glue 連線到您的 Domo 帳戶。

## 建立 Domo 開發人員應用程式
<a name="domo-configuring-creating-developer-app"></a>

若要取得用戶端 ID 和用戶端機密，可建立開發人員帳戶。

1. 前往 [Domo 開發人員登入頁面](https://developer.domo.com/manage-clients)。

1. 選擇 **Login (登入)**。

1. 提供網域名稱，然後按一下**繼續**。

1. 將滑鼠游標移至**我的帳戶**上，然後選擇**新用戶端**。

1. 提供名稱和描述，選取範圍 (「資料」)，然後選擇**建立**。

1. 從建立的新用戶端擷取產生的**用戶端 ID **和**用戶端機密**。

# 設定 Domo 連線
<a name="domo-configuring-connections"></a>

Domo 支援 OAuth2 的 CLIENT\$1CREDENTIALS 授權類型。
+ 此授權類型視為兩條腿的 OAuth，因為只有用戶端應用程式會向伺服器驗證自己，而不會影響使用者。
+ 使用者可以選擇在 Domo 中建立自己的連線應用程式，並在透過 AWS Glue 主控台建立連線時提供自己的用戶端 ID 和用戶端秘密。
+ 如需為授權碼 OAuth 流程建立連線應用程式的公有 Domo 文件，請參閱 [OAuth 身分驗證](https://developer.domo.com/portal/1845fc11bbe5d-api-authentication)。

若要設定 Domo 連線，請執行以下操作：

1. 在 AWS Secrets Manager 中，建立包含下列詳細資訊的秘密：

   1. 對於客戶管理的連線應用程式，機密應包含連線應用程式存取字符、`client_id` 和 `client_secret`。

   1. 注意：您必須為 中的連線建立秘密 AWS Glue。

1. 在 AWS Glue Glue Studio 中，依照下列步驟在 **Data Connections** 下建立連線：

   1. 在**連線**下，選擇**建立連線**。

   1. 選取**資料來源**時，請選取 Domo。

   1. 選取 AWS Glue 可以擔任並具有下列動作許可的 AWS IAM 角色：

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. 選取您要用於此連線`secretName`的 AWS Glue ，以放置字符。

   1. 如果想要使用您的網路，請選取網路選項。

1. 授予與您的 AWS Glue 任務相關聯的 IAM 角色讀取 的許可`secretName`。

# 從 Domo 實體中讀取
<a name="domo-reading-from-entities"></a>

**必要條件**

您要從中讀取的 Domo 物件。您需要物件名稱，例如資料集或資料許可政策。下表顯示支援的實體。

**來源的支援實體**：


| 實體 | 可以篩選 | 支援限制 | 支援排序依據 | 支援選取 \$1 | 支援分區 | 
| --- | --- | --- | --- | --- | --- | 
| 資料集 | 是 | 是 | 是 | 是 | 是 | 
| 資料許可政策 | 否 | 否 | 否 | 是 | 否 | 

**範例**：

```
Domo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="domo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "dataset",
        "API_VERSION": "v1"
    }
```

## Domo 實體和欄位詳細資訊
<a name="domo-reading-from-entities-field-details"></a>

具有靜態中繼資料的實體：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/domo-reading-from-entities.html)

對於下列實體，Domo 會提供端點來動態擷取中繼資料，以便在實體的資料類型層級擷取運算子支援。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/domo-reading-from-entities.html)

## 分區查詢
<a name="domo-reading-from-partitioning"></a>

**欄位型分區**

如果想要在 Spark 中使用並行，可以提供其他 Spark 選項 `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND` 和 `NUM_PARTITIONS`。使用這些參數，原始查詢會分區為可由 Spark 任務並行執行的子查詢的 `NUM_PARTITIONS` 數目。
+ `PARTITION_FIELD`：用來分區查詢的欄位名稱。
+ `LOWER_BOUND`：所選分區欄位的**包含**下限值。

  對於 DateTime 欄位，接受 ISO 格式的值。

  有效值範例：

  ```
  "2023-01-15T11:18:39.205Z"
  ```

  對於 Date 欄位，我們接受 ISO 格式的值。

  有效值範例：

  ```
  "2023-01-15"
  ```
+ `UPPER_BOUND`：所選分區欄位的**唯一**上限值。

  有效值範例：

  ```
  "2023-02-15T11:18:39.205Z"
  ```
+ `NUM_PARTITIONS`：分區數目。

實體分區欄位支援詳細資訊如下表所示：

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/domo-reading-from-entities.html)

範例：

```
Domo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="domo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "dataset",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "permissionTime"
        "LOWER_BOUND": "2023-01-15T11:18:39.205Z"
        "UPPER_BOUND": "2023-02-15T11:18:39.205Z"
        "NUM_PARTITIONS": "2"
    }
```

**記錄型分區**

如果想要在 Spark 中使用並行，可以提供其他 Spark 選項 `NUM_PARTITIONS`。使用此參數，原始查詢會分區為可由 Spark 任務並行執行的子查詢的 `NUM_PARTITIONS` 數目。

在記錄型分區中，從 Domo 中查詢存在的記錄總數，然後除以提供的 `NUM_PARTITIONS` 數字。然後，每個子查詢都會同時擷取產生的記錄數目。

範例：

```
Domo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="domo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "dataset",
        "API_VERSION": "v1",
        "NUM_PARTITIONS": "2"
    }
```

# Domo 連線選項
<a name="domo-connection-options"></a>

以下是 Domo 的連線選項：
+ `ENTITY_NAME`(String) - (必要) 用於讀取。Domo 中的物件名稱。
+ `API_VERSION`(String) - (必要) 用於讀取。要使用的 Domo Rest API 版本。
+ `SELECTED_FIELDS`(List<String>) - 預設：empty(SELECT \$1)。用於讀取。您要為物件選取的資料欄。
+ `FILTER_PREDICATE`(String) - 預設：空白。用於讀取。其應該為 Spark SQL 格式。
+ `QUERY`(String) - 預設：空白。用於讀取。完整的 Spark SQL 查詢。
+ `PARTITION_FIELD`(String) - 用於讀取。用於分區查詢的欄位。
+ `LOWER_BOUND`(String) - 用於讀取。所選分區欄位的包含下限值。
+ `UPPER_BOUND`(String) - 用於讀取。所選分區欄位的唯一上限值。
+ `NUM_PARTITIONS`(Integer) - 預設：1。用於讀取。要讀取的分區數目。

# Domo 限制
<a name="domo-connection-limitations"></a>

以下是 Domo 的限制或備註：
+ 由於 SDK 限制，對於以 '\$1' 開頭的可查詢欄位，篩選無法如預期運作 (例如：\$1BATCH\$1ID)。
+ 由於 API 限制，篩選會在您提供日期之前的日期運作。這也會影響增量提取。為了克服此限制，請根據您的時區 (相對於 UTC) 選擇日期，以取得所需日期的資料。