

# 从 ServiceNow 实体中读取
<a name="servicenow-reading-from-entities"></a>

**先决条件**

您要从中读取内容的 ServiceNow 表对象。您将需要 pa\_bucket 或 incident 等对象名称。

**示例：**

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

**ServiceNow 实体和字段详细信息**：

对于以下实体，ServiceNow 提供用于动态获取元数据的端点，以便在每个实体的数据类型级别捕获运算符支持。



- **表（动态实体）**
  - **数据类型:** 整数 / **支持的运算符:**  =, \!=, <, <=, >, >=, BETWEEN
  - **数据类型:** BigDecimal / **支持的运算符:**  =, \!=, <, <=, >, >=, BETWEEN
  - **数据类型:** 浮点型 / **支持的运算符:** =, \!=, <, <=, >, >=, BETWEEN
  - **数据类型:** 长整型 / **支持的运算符:** =, \!=, <, <=, >, >=, BETWEEN
  - **数据类型:** 日期 / **支持的运算符:** =, \!=, <, <=, >, >=, BETWEEN
  - **数据类型:** 日期时间 / **支持的运算符:** =, \!=, <, <=, >, >=, BETWEEN
  - **数据类型:** 布尔值 / **支持的运算符:**  =, \!=
  - **数据类型:** 字符串 / **支持的运算符:** =, \!=, <, <=, >, >=, BETWEEN, LIKE
  - **数据类型:** 结构体 / **支持的运算符:** 不适用



**注意**  
在连接器的响应中，结构数据类型将转换为字符串数据类型。

**注意**  
`DML_STATUS` 是用于跟踪 CREATED/UPDATED 记录的附加用户定义属性。

## 对查询进行分区
<a name="servicenow-reading-partitioning-queries"></a>

**基于字段的分区**：

如果您想在 Spark 中利用并发，可以提供其他 Spark 选项：`PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND` 和 `NUM_PARTITIONS`。使用这些参数，原始查询将被拆分为 `NUM_PARTITIONS` 个子查询，这些子查询可以由 Spark 任务同时执行。



- **动态实体**
  - **分区字段:** sys\_mod\_count / **数据类型:** 整数
  - **分区字段:** sys\_created\_on、sys\_updated\_on / **数据类型:** 日期时间


+ `PARTITION_FIELD`：用于对查询进行分区的字段的名称。
+ `LOWER_BOUND`：所选分区字段的**包含**下限值。

  对于日期时间字段，我们接受 Spark SQL 查询中使用的 Spark 时间戳格式。

  有效值示例：

  ```
  "2024-01-30T06:47:51.000Z"
  ```
+ `UPPER_BOUND`：所选分区字段的**排除**上限值。
+ `NUM_PARTITIONS`：分区的数量。

下表描述实体分区字段支持详细信息：

示例：

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

**基于记录的分区**：

如果您想在 Spark 中利用并发，可以提供附加 Spark 选项 `NUM_PARTITIONS`。使用此参数，原始查询将被拆分为 `NUM_PARTITIONS` 个子查询，这些子查询可以由 Spark 任务同时执行。

在基于记录的分区中，从 ServiceNow API 查询存在的记录总数，然后将其除以提供的 `NUM_PARTITIONS` 数字。然后，每个子查询会同时获取生成的记录数。
+ `NUM_PARTITIONS`：分区的数量。

示例：

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