

# Conexão ao Domo
<a name="connecting-to-data-domo"></a>

O Domo é uma ferramenta de painéis baseada na nuvem. Com a plataforma de aplicações corporativas do Domo, a base necessária para expandir o Domo já está pronta, permitindo que você crie suas soluções personalizadas com mais rapidez.

**Topics**
+ [Suporte do AWS Glue para o Domo](domo-support.md)
+ [Políticas que contêm as operações de API para criar e usar conexões](domo-configuring-iam-permissions.md)
+ [Configuração do Domo](domo-configuring.md)
+ [Configuração de conexões do Domo](domo-configuring-connections.md)
+ [Leitura de entidades do Domo](domo-reading-from-entities.md)
+ [Opções de conexão do Domo](domo-connection-options.md)
+ [Limitações do Domo](domo-connection-limitations.md)

# Suporte do AWS Glue para o Domo
<a name="domo-support"></a>

O AWS Glue oferece suporte ao Domo da seguinte forma:

**Compatível como fonte?**  
Sim. Você pode usar trabalhos de ETL do AWS Glue para consultar dados do Domo.

**Compatível como destino?**  
Não.

**Versões compatíveis da API do Domo**  
Estas são as versões compatíveis da API do Domo:
+ v1

# Políticas que contêm as operações de API para criar e usar conexões
<a name="domo-configuring-iam-permissions"></a>

O exemplo de política a seguir descreve as permissões necessárias do AWS IAM para criar e usar conexões. Se você estiver criando um novo perfil, crie uma política que contenha o seguinte:

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

****  

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

------

Se você não quiser usar o método acima, como alternativa use as seguintes políticas do IAM gerenciadas:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – Concede acesso a recursos que vários processos do AWS Glue exigem para fazer a execução em seu nome. Esses recursos incluem o AWS Glue, Amazon S3, IAM, CloudWatch Logs e Amazon EC2. Se você seguir a convenção de nomenclatura para os recursos especificados nesta política, os processos do AWS Glue terão as permissões necessárias. Esta política geralmente é anexada a funções especificadas durante a definição de crawlers, trabalhos e endpoints de desenvolvimento.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): concede acesso total aos recursos do AWS Glue quando uma identidade à qual a política está anexada usa o Console de Gerenciamento da AWS. Se você seguir a convenção de nomenclatura para os recursos especificados nesta política, os usuários poderão acessar todos os recursos do console. Esta política geralmente é anexada aos usuários do console do AWS Glue.

# Configuração do Domo
<a name="domo-configuring"></a>

Antes de usar o AWS Glue para transferir dados do Domo aos destinos compatíveis, os seguintes requisitos deverão ser atendidos:

## Requisitos mínimos
<a name="domo-configuring-min-requirements"></a>

Estes são os requisitos mínimos:
+ Você tem uma conta do Domo habilitada para acesso à API.
+ Você tem uma aplicação na conta do desenvolvedor do Domo que fornece as credenciais de cliente que o AWS Glue usa para acessar seus dados com segurança quando faz chamadas autenticadas para sua conta. Para obter mais informações, consulte [Criação de uma aplicação de desenvolvedor do Domo](#domo-configuring-creating-developer-app).

Se você atender a esses requisitos, poderá conectar o AWS Glue à sua conta do Domo.

## Criação de uma aplicação de desenvolvedor do Domo
<a name="domo-configuring-creating-developer-app"></a>

Para obter o ID e o segredo do cliente, crie uma conta de desenvolvedor.

1. Acesse a [página de login do desenvolvedor do Domo](https://developer.domo.com/manage-clients).

1. Escolha **Fazer login**.

1. Forneça o nome do domínio e clique em **Continue**.

1. Passe o mouse sobre **My Account** e escolha **New Client**.

1. Forneça o nome e a descrição, selecione o escopo (“data”) e escolha **Create**.

1. Recupere o **Client Id** e o **Client Secret** gerados para o novo cliente criado.

# Configuração de conexões do Domo
<a name="domo-configuring-connections"></a>

O Domo oferece suporte ao tipo de concessão CLIENT\$1CREDENTIALS para OAuth2.
+ Esse tipo de concessão é considerado um OAuth de “duas pernas”, pois somente a aplicação cliente faz a própria autenticação no servidor, sem o envolvimento do usuário.
+ Os usuários podem optar por criar sua própria aplicação conectada no Domo e fornecer seus próprios ID e segredo do cliente ao criar conexões por meio do Console do AWS Glue.
+ Para obter a documentação pública do Domo sobre como criar uma aplicação conectada para o fluxo de código de autorização do OAuth, consulte [OAuth Authentication](https://developer.domo.com/portal/1845fc11bbe5d-api-authentication).

Para configurar uma conexão do Domo:

1. No AWS Secrets Manager, crie um segredo com os seguintes detalhes:

   1. Para a aplicação conectada gerenciada pelo cliente, o segredo deve conter o token de acesso da aplicação conectada, `client_id` e `client_secret`.

   1. Observação: é necessário criar um segredo para a sua conexão no AWS Glue.

1. No AWS Glue Glue Studio, crie uma conexão em **Conexões de dados** seguindo estas etapas:

   1. Em **Conexões**, escolha **Criar conexão**.

   1. Ao selecionar uma **Fonte de dados**, selecione o Domo.

   1. Selecione o perfil do AWS IAM que o AWS Glue pode assumir e tem permissões para as seguintes ações:

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

****  

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

------

   1. Selecione o `secretName` que você deseja usar para essa conexão no AWS Glue para colocar os tokens.

   1. Selecione as opções de rede se quiser usar sua rede.

1. Conceda permissão ao perfil do IAM associado ao seu trabalho do AWS Glue para ler `secretName`.

# Leitura de entidades do Domo
<a name="domo-reading-from-entities"></a>

**Pré-requisito**

Um objeto do Domo do qual você deseja ler. Você precisará do nome do objeto, como Conjunto de dados ou Políticas de permissões de dados. A tabela a seguir mostra as entidades compatíveis.

**Entidades compatíveis quanto à origem**:


| Entidade | Pode ser filtrada | Oferece suporte a limite | Oferece suporte a Ordenar por | Oferece suporte a Selecionar \$1 | Oferece suporte a particionamento | 
| --- | --- | --- | --- | --- | --- | 
| Data Set | Sim | Sim | Sim | Sim | Sim | 
| Políticas de permissões de dados | Não | Não | Não | Sim | Não | 

**Exemplo:**

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

## Detalhes das entidades e dos campos do Domo
<a name="domo-reading-from-entities-field-details"></a>

Entidades com metadados estáticos:

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

Para as entidades a seguir, o Domo fornece endpoints para buscar metadados dinamicamente, para que o suporte do operador seja capturado no nível do tipo de dados da entidade.

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

## Particionamento de consultas
<a name="domo-reading-from-partitioning"></a>

**Particionamento com base em campo**

É possível fornecer as opções adicionais do Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` e `NUM_PARTITIONS` se quiser utilizar a simultaneidade no Spark. Com esses parâmetros, a consulta original seria dividida em `NUM_PARTITIONS` subconsultas, que poderiam ser executadas pelas tarefas do Spark simultaneamente.
+ `PARTITION_FIELD`: o nome do campo a ser usado para particionar a consulta.
+ `LOWER_BOUND`: um valor limite inferior **inclusivo** do campo de partição escolhido.

  Para o campo DateTime, aceitamos o valor no formato ISO.

  Exemplo de valor válido:

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

  Para o campo de Data, aceitamos o valor no formato ISO.

  Exemplo de valor válido:

  ```
  "2023-01-15"
  ```
+ `UPPER_BOUND`: um valor limite superior **exclusivo** do campo de partição escolhido.

  Exemplo de valor válido:

  ```
  "2023-02-15T11:18:39.205Z"
  ```
+ `NUM_PARTITIONS`: o número de partições.

Os detalhes do suporte do campo de particionamento relativo às entidades são capturados na seguinte tabela:

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

Exemplo:

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

**Particionamento com base em registros**

É possível fornecer a opção adicional `NUM_PARTITIONS` do Spark se quiser utilizar a simultaneidade no Spark. Com esse parâmetro, a consulta original seria dividida em `NUM_PARTITIONS` subconsultas, que poderiam ser executadas pelas tarefas do Spark simultaneamente.

No particionamento baseado em registros, o número total de registros presentes é consultado no Domo e dividido pelo número `NUM_PARTITIONS` fornecido. O número resultante de registros é então buscado simultaneamente por cada subconsulta.

Exemplo:

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

# Opções de conexão do Domo
<a name="domo-connection-options"></a>

Estas são as opções de conexão do Domo:
+ `ENTITY_NAME`(string): (obrigatório) usado para leitura. O nome do seu objeto no Domo.
+ `API_VERSION`(string): (obrigatório) usado para leitura. A versão da API Rest do Domo que você deseja usar.
+ `SELECTED_FIELDS`(Lista<String>): padrão: vazio(SELECIONE \$1). Usado para leitura. Colunas que deseja selecionar para o objeto.
+ `FILTER_PREDICATE`(string): padrão: vazio. Usado para leitura. Deve estar no formato Spark SQL.
+ `QUERY`(String): padrão: vazia. Usado para leitura. Consulta completa do Spark SQL.
+ `PARTITION_FIELD`(String): usado para leitura. Campo a ser usado para particionar a consulta.
+ `LOWER_BOUND`(String): usado para leitura. Um valor limite inferior inclusivo do campo de partição escolhido.
+ `UPPER_BOUND`(String): usado para leitura. Um valor limite superior exclusivo do campo de partição escolhido. 
+ `NUM_PARTITIONS`(Inteiro): padrão: 1. Usado para leitura. Número de partições para leitura.

# Limitações do Domo
<a name="domo-connection-limitations"></a>

Estas são as limitações ou observações do Domo:
+ Devido a uma limitação do SDK, a filtragem não funciona conforme o esperado para os campos consultáveis que começam com “\$1” (por exemplo: \$1BATCH\$1ID).
+ Devido a uma limitação da API, a filtragem funciona para a data anterior à data que você informar. Isso também afeta a extração incremental. Para contornar essa limitação, selecione uma data de acordo com seu fuso horário em relação ao UTC, para obter os dados para a data necessária.