

# Conexión a Domo
<a name="connecting-to-data-domo"></a>

Domo es una herramienta basada en la nube para la creación y administración de paneles. Con la plataforma de aplicaciones empresariales de Domo, la base que necesita para ampliar Domo ya está en su lugar, lo que permite desarrollar soluciones personalizadas más rápido.

**Topics**
+ [Compatibilidad de AWS Glue con Domo](domo-support.md)
+ [Políticas que contienen las operaciones de la API para crear y usar conexiones](domo-configuring-iam-permissions.md)
+ [Configuración de Domo](domo-configuring.md)
+ [Configuración de conexiones a Domo](domo-configuring-connections.md)
+ [Lectura de entidades de Domo](domo-reading-from-entities.md)
+ [Opciones de conexión a Domo](domo-connection-options.md)
+ [Limitaciones de Domo](domo-connection-limitations.md)

# Compatibilidad de AWS Glue con Domo
<a name="domo-support"></a>

AWS Glue admite Domo de la siguiente manera:

**¿Es compatible como origen?**  
Sí. Puede utilizar los trabajos de ETL de AWS Glue para consultar datos de Domo.

**¿Es compatible como destino?**  
No.

**Versiones de la API de Domo compatibles**  
Las siguientes versiones de la API de Domo son compatibles:
+ v1

# Políticas que contienen las operaciones de la API para crear y usar conexiones
<a name="domo-configuring-iam-permissions"></a>

En el siguiente ejemplo de política se describen los permisos de AWS IAM necesarios para crear y utilizar conexiones. Si va a crear un nuevo rol, cree una política que contenga lo siguiente:

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

****  

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

------

Si no desea utilizar el método anterior, puede utilizar las siguientes políticas de IAM administradas:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole): da acceso a recursos que precisan diversos procesos de AWS Glue para ejecutarse en su nombre. Entre estos recursos se incluyen AWS Glue, Amazon S3, IAM, CloudWatch Logs y Amazon EC2. Si aplica la convención de nomenclatura en los recursos especificados en esta política, los procesos de AWS Glue tienen los permisos necesarios. Normalmente, esta política se asocia a los roles que se especifican a la hora de definir rastreadores, trabajos y puntos de conexión de desarrollo.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): otorga acceso total a los recursos de AWS Glue cuando una identidad a la que está asociada la política utiliza la Consola de administración de AWS. Si sigue la convención de nomenclatura para los recursos especificados en esta política, los usuarios dispondrán de todas las funciones de la consola. Esta política se suele adjuntar a los usuarios de la consola AWS Glue.

# Configuración de Domo
<a name="domo-configuring"></a>

Antes de poder utilizar AWS Glue para transferir datos desde Domo a destinos compatibles, deberá cumplir estos requisitos:

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

Los requisitos mínimos son los siguientes:
+ La cuenta de Domo debe estar habilitada para el acceso a la API.
+ Debe tener una aplicación en la cuenta de desarrollador de Domo que proporcione las credenciales de cliente que AWS Glue utiliza para acceder a los datos de forma segura cuando hace llamadas autenticadas a la cuenta. Para obtener más información, consulte [Creación de una aplicación para desarrolladores de Domo](#domo-configuring-creating-developer-app).

Si cumple estos requisitos, estará listo para conectar AWS Glue a la cuenta de Domo.

## Creación de una aplicación para desarrolladores de Domo
<a name="domo-configuring-creating-developer-app"></a>

Para obtener el ID de cliente y el secreto del cliente, debe crear una cuenta de desarrollador.

1. Vaya a la [página de inicio de sesión para desarrolladores de Domo.](https://developer.domo.com/manage-clients)

1. Seleccione **Iniciar sesión**.

1. Proporcione el nombre de dominio y haga clic en **Continuar**.

1. Coloque el cursor sobre **Mi cuenta** y elija **Nuevo cliente**.

1. Ingrese el nombre y la descripción; seleccione el ámbito (“datos”); y, elija **Crear**.

1. Recupere el **ID de cliente** y el **secreto de cliente** generados del nuevo cliente creado.

# Configuración de conexiones a Domo
<a name="domo-configuring-connections"></a>

Domo admite el tipo de concesión CLIENT\$1CREDENTIALS para OAuth2.
+ Este tipo de concesión se considera un OAuth de dos patas, ya que solo la aplicación cliente se autentica ante el servidor, sin la participación del usuario.
+ Los usuarios aún pueden optar por crear una aplicación conectada propia en Domo y proporcionar un ID y secreto de cliente propios al crear conexiones a través de la consola de AWS Glue.
+ Para ver la documentación pública de Domo sobre la creación de una aplicación conectada para el flujo de Authorization Code OAuth, consulte [OAuth Authentication](https://developer.domo.com/portal/1845fc11bbe5d-api-authentication).

Para configurar una conexión a Domo:

1. En AWS Secrets Manager, cree un secreto con los siguientes detalles:

   1. Para la aplicación conectada administrada por el cliente, el secreto debe contener el token de acceso de la aplicación conectada, el `client_id` y el `client_secret`.

   1. Nota: Debe crear un secreto para las conexiones en AWS Glue.

1. En AWS Glue Glue Studio, cree una conexión en **Conexiones de datos** según los pasos que se indican a continuación:

   1. En **Conexiones**, elija **Crear conexión**.

   1. Al seleccionar un **Origen de datos**, elija Domo.

   1. Seleccione el rol de AWS IAM que AWS Glue pueda asumir y que tenga permisos para las siguientes acciones:

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

****  

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

------

   1. Seleccione el `secretName` que desee usar para esta conexión en AWS Glue para colocar los tokens.

   1. Seleccione las opciones de red si quiere usar su red.

1. Conceda el rol de IAM asociado a su permiso de trabajo de AWS Glue para leer `secretName`.

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

**Requisito previo**

Un objeto de Domo desde el que desea leer. Necesitará el nombre del objeto, como Conjunto de datos o Políticas de permisos de datos. En la siguiente tabla se muestran las entidades admitidas.

**Entidades compatibles como origen:**


| Entidad | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite partición | 
| --- | --- | --- | --- | --- | --- | 
| Conjunto de datos | Sí | Sí | Sí | Sí | Sí | 
| Políticas de permisos de datos | No | No | No | Sí | No | 

**Ejemplo:**

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

## Detalles de entidades y campos de Domo
<a name="domo-reading-from-entities-field-details"></a>

Entidades con metadatos estáticos:

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

Para la siguiente entidad, Domo proporciona puntos de conexión para obtener metadatos de forma dinámica, de modo que la compatibilidad del operador se capture a nivel de tipo de datos para la entidad.

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

## Consultas de partición
<a name="domo-reading-from-partitioning"></a>

**Partición basada en campos**

Puede proporcionar las opciones adicionales de Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` y `NUM_PARTITIONS` si quiere utilizar la simultaneidad en Spark. Con estos parámetros, la consulta original se dividiría en un número `NUM_PARTITIONS` de subconsultas que las tareas de Spark pueden ejecutar simultáneamente.
+ `PARTITION_FIELD`: el nombre del campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`: un valor de límite inferior **inclusivo** del campo de partición elegido.

  Para el campo DateTime, aceptamos el valor en formato ISO.

  Ejemplo de valor válido:

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

  En el campo Fecha, aceptamos el valor en formato ISO.

  Ejemplo de valor válido:

  ```
  "2023-01-15"
  ```
+ `UPPER_BOUND`: un valor límite superior **exclusivo** del campo de partición elegido.

  Ejemplo de valor válido:

  ```
  "2023-02-15T11:18:39.205Z"
  ```
+ `NUM_PARTITIONS`: el número de particiones.

En la siguiente tabla se detalla la compatibilidad de los campos de partición por entidad:

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

Ejemplo:

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

**Partición basada en registros**

Puede proporcionar la opción adicional `NUM_PARTITIONS` de Spark si quiere usar la simultaneidad en Spark. Con estos parámetros, la consulta original se dividiría en `NUM_PARTITIONS` subconsultas que las tareas de Spark pueden ejecutar simultáneamente.

En la partición basada en registros, se consulta el número total de registros presentes en Domo y se divide entre el número de `NUM_PARTITIONS` proporcionado. A continuación, cada subconsulta obtiene simultáneamente el número de registros resultante.

Ejemplo:

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

# Opciones de conexión a Domo
<a name="domo-connection-options"></a>

Existen las siguientes opciones para establecer conexión con Domo:
+ `ENTITY_NAME`(cadena): (obligatorio) se usa para lectura. El nombre del objeto en Domo.
+ `API_VERSION`(cadena): (obligatorio) se usa para lectura. Versión de la API de REST de Domo que desea usar.
+ `SELECTED_FIELDS`(lista<Cadena>): predeterminado: empty(SELECT \$1). Se usa para leer. Columnas que desee seleccionar para el objeto.
+ `FILTER_PREDICATE`(cadena): predeterminado: vacío. Se usa para leer. Debe estar en el formato de Spark SQL.
+ `QUERY`(cadena): predeterminado: vacío. Se usa para leer. Consulta completa de Spark SQL.
+ `PARTITION_FIELD`(cadena): se usa para lectura. Campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`(cadena): se usa para lectura. Un valor de límite inferior inclusivo del campo de partición elegido.
+ `UPPER_BOUND`(cadena): se usa para lectura. Un valor límite superior exclusivo del campo de partición elegido. 
+ `NUM_PARTITIONS`(entero): predeterminado: 1. Se usa para leer. Número de particiones para leer.

# Limitaciones de Domo
<a name="domo-connection-limitations"></a>

Las siguientes son limitaciones o notas correspondientes a Domo:
+ Debido a una limitación del SDK, la filtración no funciona como se espera para los campos que se pueden consultar que comienzan con “\$1” (por ejemplo: \$1BATCH\$1ID).
+ Debido a una limitación de la API, la filtración funciona con la fecha anterior a la que se proporciona. Esto también afecta la extracción incremental. Para superar esta limitación, seleccione una fecha según su zona horaria en relación con UTC para obtener los datos de la fecha requerida.