

# Leitura de entidades do Oracle NetSuite
<a name="oracle-netsuite-reading-from-entities"></a>

**Pré-requisito**

Um objeto do Oracle do qual você deseja ler. Você precisará do nome do objeto, como `deposit` ou `timebill`. A tabela a seguir mostra as entidades compatíveis.

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


| Entidade | Pode ser filtrada | Oferece suporte a Ordenar por | Oferece suporte a limite | Oferece suporte a SELECIONAR \$1 | Oferece suporte a particionamento | 
| --- | --- | --- | --- | --- | --- | 
| Depósito | Sim | Não | Sim | Sim | Sim | 
| Item de descrição | Sim | Não | Sim | Sim | Sim | 
| Item de inventário | Sim | Não | Sim | Sim | Sim | 
| Atendimento do item | Sim | Não | Sim | Sim | Sim | 
| Grupo de itens | Sim | Não | Sim | Sim | Sim | 
| Lançamento no diário | Sim | Não | Sim | Sim | Sim | 
| Item de compra que não é de estoque | Sim | Não | Sim | Sim | Sim | 
| Item de revenda que não é de estoque | Sim | Não | Sim | Sim | Sim | 
| Item de venda que não é de estoque | Sim | Não | Sim | Sim | Sim | 
| Ordem de compra | Sim | Não | Sim | Sim | Sim | 
| Subsidiária | Sim | Não | Sim | Sim | Sim | 
| Fornecedor | Sim | Não | Sim | Sim | Sim | 
| Fatura do fornecedor | Sim | Não | Sim | Sim | Sim | 
| Autorização de devolução ao fornecedor | Sim | Não | Sim | Sim | Sim | 
| Faturamento com prazo | Sim | Não | Sim | Sim | Sim | 
| Pagamento do cliente | Sim | Não | Sim | Sim | Sim | 
| Solicitação de atendimento | Sim | Não | Sim | Sim | Sim | 
| Item | Sim | Sim | Sim | Sim | Sim | 
| Linha de transação | Sim | Sim | Sim | Sim | Sim | 
| Linha contábil de transações | Sim | Sim | Sim | Sim | Sim | 
| Tipos de registro personalizados (dinâmicos) | Sim | Sim | Sim | Sim | Sim | 

**Exemplo:**

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

**Detalhes das entidades e dos campos do Oracle NetSuite**:

O Oracle NetSuite carrega dinamicamente os campos disponíveis na entidade selecionada. Dependendo do tipo de dados de campo, ele é compatível com os operadores de filtro a seguir.


| Tipos de dados de campo | Operadores de filtro compatíveis | 
| --- | --- | 
| String | LIKE, =, \$1= | 
| Data | BETWEEN, =, <, <=, >, >= | 
| DateTime | BETWEEN, <, <=, >, >= | 
| Numérico |  =, \$1=, <, <=, >, >= | 
| Booleano |  =, \$1= | 

**Formato de entrada esperado para valores booleanos na expressão de filtro**:


| Entidade | Formato de valor booleano "verdadeiro" | Formato de valor booleano "falso" | Exemplo | 
| --- | --- | --- | --- | 
| Entidades de item, linha de transação, linha contábil de transações e tipo de registro personalizado | T ou t | F ou f | isinactive = "T" ou isinactive = "t" | 
| Todas as outras entidades | verdadeiro | false | isinactive = true | 

## Particionamento de consultas
<a name="oracle-netsuite-reading-partitioning-queries"></a>

**Particionamento com base em campo**

O conector do Oracle NetSuite tem metadados dinâmicos para que os campos compatíveis com particionamento com base em campo sejam escolhidos dinamicamente. O particionamento baseado em campo é compatível nos campos com o tipo de dados Integer, BigInteger, Date ou DateTime.

É 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 de carimbo de data e hora, aceitamos o formato de carimbo de data e hora do Spark usado nas consultas SQL do Spark.

  Exemplos de valores válidos:

  ```
  "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`: um valor limite superior **exclusivo** do campo de partição escolhido.
+ `NUM_PARTITIONS`: o número de partições.

Exemplo:

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

**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 com base em registros, o número total de registros presentes é consultado na API do Oracle NetSuite e dividido pelo número de `NUM_PARTITIONS` fornecido. O número resultante de registros, em seguida, é obtido simultaneamente por cada subconsulta.
+ `NUM_PARTITIONS`: o número de partições.

Exemplo:

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