

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

**Pré-requisito**

Um objeto de tabelas do ServiceNow do qual você deseja ler. Você precisará do nome do objeto, como pa\_bucket ou incidente.

**Exemplo:**

```
servicenow_read = glueContext.create_dynamic_frame.from_options(
    connection_type="servicenow",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "pa_buckets",
        "API_VERSION": "v2"
        "instanceUrl": "https://<instance-name>.service-now.com"
    }
)
```

**Detalhes das entidades e dos campos do ServiceNow**:

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



- **Tabelas (entidades dinâmicas)**
  - **Tipo de dados:** Inteiro / **Operadores compatíveis:**  =, \!=, <, <=, >, >=, BETWEEN
  - **Tipo de dados:** BigDecimal / **Operadores compatíveis:**  =, \!=, <, <=, >, >=, BETWEEN
  - **Tipo de dados:** Float / **Operadores compatíveis:** =, \!=, <, <=, >, >=, BETWEEN
  - **Tipo de dados:** Longo / **Operadores compatíveis:** =, \!=, <, <=, >, >=, BETWEEN
  - **Tipo de dados:** Data / **Operadores compatíveis:** =, \!=, <, <=, >, >=, BETWEEN
  - **Tipo de dados:** DateTime / **Operadores compatíveis:** =, \!=, <, <=, >, >=, BETWEEN
  - **Tipo de dados:** Booliano / **Operadores compatíveis:**  =, \!=
  - **Tipo de dados:** String / **Operadores compatíveis:** =, \!=, <, <=, >, >=, BETWEEN, LIKE
  - **Tipo de dados:** Struct / **Operadores compatíveis:** N/D



**nota**  
O tipo de dados Struct é convertido no tipo de dados String na resposta do conector.

**nota**  
`DML_STATUS` é um atributo adicional definido pelo usuário usado para rastrear registros CREATED/UPDATED.

## Particionamento de consultas
<a name="servicenow-reading-partitioning-queries"></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.



- **Entidade dinâmica**
  - **Campos de particionamento:** sys\_mod\_count / **Tipo de dados:** Inteiro
  - **Campos de particionamento:** sys\_created\_on, sys\_updated\_on / **Tipo de dados:** DateTime


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

  No campo Data e hora, aceitamos o formato de carimbo de data/hora do Spark usado em consultas SQL do Spark.

  Exemplos de valores válidos:

  ```
  "2024-01-30T06:47:51.000Z"
  ```
+ `UPPER_BOUND`: um valor limite superior **exclusivo** do campo de partição escolhido.
+ `NUM_PARTITIONS`: o número de partições.

A tabela a seguir descreve os detalhes do suporte do campo de particionamento da entidade:

Exemplo:

```
servicenow_read = glueContext.create_dynamic_frame.from_options(
    connection_type="servicenow",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "pa_buckets",
        "API_VERSION": "v2",
        "instanceUrl": "https://<instance-name>.service-now.com"
        "PARTITION_FIELD": "sys_created_on"
        "LOWER_BOUND": "2024-01-30T06:47:51.000Z"
        "UPPER_BOUND": "2024-06-30T06:47:51.000Z"
        "NUM_PARTITIONS": "10"
    }
```

**Particionamento com base em registros**:

Você pode fornecer a opção adicional `NUM_PARTITIONS` do Spark se quiser utilizar a simultaneidade no Spark. Com esse parâmetro, a consulta original é dividida em `NUM_PARTITIONS` subconsultas, que podem ser executadas pelas tarefas do Spark simultaneamente.

No particionamento com base em registros, o número total de registros presentes é consultado na API do ServiceNow e dividido pelo número `NUM_PARTITIONS` fornecido. O número resultante de registros é então buscado simultaneamente por cada subconsulta.
+ `NUM_PARTITIONS`: o número de partições.

Exemplo:

```
servicenow_read = glueContext.create_dynamic_frame.from_options(
    connection_type="servicenow",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "pa_buckets",
        "API_VERSION": "v2",
        "instanceUrl": "https://<instance-name>.service-now.com"
        "NUM_PARTITIONS": "2"
    }
```