

# 从 Oracle NetSuite 实体中读取
<a name="oracle-netsuite-reading-from-entities"></a>

**先决条件**

您要从中读取内容的 Oracle NetSuite 对象。您将需要 `deposit` 或 `timebill` 等对象名称。下表显示支持的实体。

**源支持的实体**：


| 实体 | 可以筛选 | 支持排序依据 | 支持限制 | 支持 SELECT \$1 | 支持分区 | 
| --- | --- | --- | --- | --- | --- | 
| 定金 | 是 | 否 | 是 | 是 | 是 | 
| 商品描述 | 是 | 否 | 是 | 是 | 是 | 
| 库存商品 | 是 | 否 | 是 | 是 | 是 | 
| 商品履行 | 是 | 否 | 是 | 是 | 是 | 
| 商品组 | 是 | 否 | 是 | 是 | 是 | 
| 日记账条目 | 是 | 否 | 是 | 是 | 是 | 
| 非库存采购商品 | 是 | 否 | 是 | 是 | 是 | 
| 非库存转售商品 | 是 | 否 | 是 | 是 | 是 | 
| 非库存销售商品 | 是 | 否 | 是 | 是 | 是 | 
| 采购订单 | 是 | 否 | 是 | 是 | 是 | 
| 子公司 | 是 | 否 | 是 | 是 | 是 | 
| Vendor | 是 | 否 | 是 | 是 | 是 | 
| 供应商账单 | 是 | 否 | 是 | 是 | 是 | 
| 供应商退货授权 | 是 | 否 | 是 | 是 | 是 | 
| 工时账单 | 是 | 否 | 是 | 是 | 是 | 
| 客户付款 | 是 | 否 | 是 | 是 | 是 | 
| 配送请求 | 是 | 否 | 是 | 是 | 是 | 
| Item | 支持 | 是 | 是 | 是 | 是 | 
| 交易明细 | 支持 | 是 | 是 | 是 | 是 | 
| 交易会计明细 | 支持 | 是 | 是 | 是 | 是 | 
| 自定义记录类型（动态） | 支持 | 是 | 是 | 是 | 是 | 

**示例：**

```
netsuiteerp_read = glueContext.create_dynamic_frame.from_options(
    connection_type="netsuiteerp",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "deposit",
        "API_VERSION": "v1"
    }
)
```

**Oracle NetSuite 实体和字段详细信息**：

Oracle NetSuite 会动态加载所选实体下的可用字段。根据字段的数据类型，它支持以下筛选运算符。


| 字段数据类型 | 支持的筛选运算符 | 
| --- | --- | 
| 字符串 | LIKE, =, \$1= | 
| 日期 | BETWEEN, =, <, <=, >, >= | 
| 日期时间 | BETWEEN, <, <=, >, >= | 
| 数值 |  =, \$1=, <, <=, >, >= | 
| 布尔值 |  =, \$1= | 

**筛选表达式中布尔值的预期输入格式**：


| 实体 | 布尔值“true”的格式 | 布尔值“false”的格式 | 示例 | 
| --- | --- | --- | --- | 
| 项目、交易明细、交易会计明细和自定义记录类型实体 | T 或 t | F 或 f | isinactive =“T”或 isinactive =“t” | 
| 所有其他实体 | true | false | isinactive = true | 

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

**基于字段的分区**

Oracle NetSuite 连接器具有动态元数据，因此可以动态选择基于字段的分区所支持的字段。数据类型为整数、大整数、日期或日期时间的字段支持基于字段的分区。

如果您想在 Spark 中利用并发，可以提供其他 Spark 选项：`PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND` 和 `NUM_PARTITIONS`。使用这些参数，原始查询将被拆分为 `NUM_PARTITIONS` 个子查询，这些子查询可以由 Spark 任务同时执行。
+ `PARTITION_FIELD`：用于对查询进行分区的字段的名称。
+ `LOWER_BOUND`：所选分区字段的**包含**下限值。

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

  有效值示例：

  ```
  "TIMESTAMP \"1707256978123\""
  "TIMESTAMP \"1702600882\""
  "TIMESTAMP '2024-02-06T22:00:00:00.000Z'"
  "TIMESTAMP '2024-02-06T22:00:00:00Z'"
  "TIMESTAMP '2024-02-06'"
  ```
+ `UPPER_BOUND`：所选分区字段的**排除**上限值。
+ `NUM_PARTITIONS`：分区的数量。

示例：

```
netsuiteerp_read = glueContext.create_dynamic_frame.from_options(
    connection_type="netsuiteerp",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "deposit",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "id",
        "LOWER_BOUND": "1",
        "UPPER_BOUND": "10000",
        "NUM_PARTITIONS": "10"
    }
```

**基于记录的分区**

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

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

示例：

```
netsuiteerp_read = glueContext.create_dynamic_frame.from_options(
    connection_type="netsuiteerp",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "deposit",
        "API_VERSION": "v1",
        "NUM_PARTITIONS": "3"
    }
```