

# Domo への接続
<a name="connecting-to-data-domo"></a>

Domo はクラウドベースのダッシュボードツールです。Domo のエンタープライズアプリケーションプラットフォームでは、Domo を拡張するために必要な基盤が整っているため、カスタムソリューションをより迅速に構築できます。

**Topics**
+ [Domo の AWS Glue サポート](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)

# Domo の AWS Glue サポート
<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)」を参照してください。

これらの要件を満たすと、Domo アカウントに AWS Glue を接続する準備が整います。

## Domo デベロッパーアプリケーションの作成
<a name="domo-configuring-creating-developer-app"></a>

[クライアント ID] と [クライアントシークレット] を取得するには、デベロッパーアカウントを作成します。

1. [Domo デベロッパーログインページ](https://developer.domo.com/manage-clients)に移動します。

1. [**ログイン**] を選択します。

1. ドメイン名を指定し、**[Continue]** をクリックします。

1. **[My Account]** にカーソルを合わせ、**[New Client]** を選択します。

1. 名前と説明を入力し、スコープ (「データ」) を選択して、**[Create]** を選択します。

1. 作成された新しいクライアントから、生成された **[クライアント ID]** と **[クライアントシークレット]** を取得します。

# Domo 接続の設定
<a name="domo-configuring-connections"></a>

Domo は、OAuth2 の CLIENT\$1CREDENTIALS グラントタイプをサポートしています。
+ このグラントタイプは、クライアントアプリケーションのみがサーバーに対して自身を認可し、ユーザーには関与しないため、2 レッグの OAuth と見なされます。
+ ユーザーは、Domo で独自の接続アプリを作成し、AWS Glue コンソールを介して接続を作成するときに独自のクライアント ID とクライアントシークレットを指定することを選択できます。
+ 認可コード OAuth フロー用の接続アプリの作成に関する Domo の公開ドキュメントについては、「[OAuth Authentication](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 で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   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. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# Domo エンティティからの読み取り
<a name="domo-reading-from-entities"></a>

**前提条件**

読み取り元の Domo オブジェクト。Data Set や Data Permission Policies などのオブジェクト名が必要です。次の表に、サポートされているエンティティを示します。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| データセット | はい | あり | あり | あり | あり | 
| Data Permission Policies | なし | なし | なし | あり | なし | 

**例**:

```
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/ja_jp/glue/latest/dg/domo-reading-from-entities.html)

次のエンティティについて、Domo はメタデータを動的に取得するエンドポイントを提供するため、演算子のサポートはエンティティのデータ型レベルでキャプチャされます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/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/ja_jp/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`(文字列) – (必須) 読み取りに使用されます。Domo のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する Domo Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。
+ `PARTITION_FIELD` (文字列) – 読み取りに使用されます。クエリをパーティション化するために使用するフィールドです。
+ `LOWER_BOUND` (文字列)– 読み取りに使用されます。選択したパーティションフィールドの包括的な下限値。
+ `UPPER_BOUND` (文字列) – 読み取りに使用されます。選択したパーティションフィールドの排他的上限値。
+ `NUM_PARTITIONS`(整数) – デフォルト: 1。読み込みに使用されます。読み取り用のパーティションの数です。

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

Domo の制限事項または注意事項は次のとおりです。
+ SDK の制限により、「\$1」で始まるクエリ可能なフィールド (\$1BATCH\$1ID など) では、フィルタリングが期待どおりに機能しません。
+ API の制限により、フィルタリングは指定された日付より前の日付で機能します。これは増分プルにも影響します。この制限を回避するには、UTC を基準にしたタイムゾーンに従って日付を選択し、必要な日付のデータを取得します。