

# Particiones para entidades que no sean ODP
<a name="sap-odata-non-odp-entities-partitioning"></a>

En Apache Spark, el particionamiento se refiere a la forma en que los datos se dividen y distribuyen entre los nodos de trabajo de un clúster para su procesamiento paralelo. Cada partición es un fragmento lógico de datos que una tarea puede procesar de forma independiente. El particionamiento es un concepto fundamental en Spark que afecta directamente al rendimiento, la escalabilidad y la utilización de los recursos. Los trabajos de AWS Glue utilizan el mecanismo de particionamiento de Spark para dividir el conjunto de datos en fragmentos más pequeños (particiones) que se pueden procesar en paralelo en los nodos de trabajo del clúster. Tenga en cuenta que el particionamiento no se aplica a las entidades ODP.

Para obtener más información, consulte [AWS GlueTrabajos de Spark y PySpark](https://docs.aws.amazon.com/glue/latest/dg/spark_and_pyspark.html).

**Requisitos previos**

Un Objeto de SAP OData desde el cual desearía leer. Necesitará el nombre del objeto/EntitySet. Por ejemplo: ` /sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder `.

**Ejemplo**

```
sapodata_read = glueContext.create_dynamic_frame.from_options(
    connection_type="SAPOData",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder"
    }, transformation_ctx=key)
```

## Consultas de partición
<a name="sap-odata-partitioning-queries"></a>

### Partición basada en campos
<a name="sap-odata-field-based-partitioning"></a>

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. Los campos Entero, Fecha y hora y Fecha admiten la partición basada en campos en el conector SAP OData.
+ `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.

   En cualquier campo cuyo tipo de dato sea DateTime, se acepta el formato de marca de tiempo de Spark que se utiliza en las consultas de Spark SQL.

  Ejemplos de valores válidos: `"2000-01-01T00:00:00.000Z"` 
+ `UPPER_BOUND`: un valor límite superior exclusivo del campo de partición elegido.
+ `NUM_PARTITIONS`: el número de particiones.
+ `PARTITION_BY`: el tipo de particionamiento que se va a realizar, `FIELD` se debe pasar en caso de particionamiento basado en Campos.

**Ejemplo**

```
sapodata= glueContext.create_dynamic_frame.from_options(
    connection_type="sapodata",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "/sap/opu/odata/sap/SEPM_HCM_SCENARIO_SRV/EmployeeSet",
        "PARTITION_FIELD": "validStartDate"
        "LOWER_BOUND": "2000-01-01T00:00:00.000Z"
        "UPPER_BOUND": "2020-01-01T00:00:00.000Z"
        "NUM_PARTITIONS": "10",
        "PARTITION_BY": "FIELD"
    }, transformation_ctx=key)
```

### Partición basada en registros
<a name="sap-odata-record-based-partitioning"></a>

La consulta original se dividiría en un número `NUM_PARTITIONS` de subconsultas que las tareas de Spark pueden ejecutar simultáneamente.

La partición basada en registros solo se admite para entidades que no son de ODP, ya que la paginación en las entidades de ODP se admite a través del siguiente token o token de omisión.
+ `PARTITION_BY`: el tipo de particionamiento que se va a realizar. `COUNT` se debe pasar en caso de particionamiento basado en registros.

**Ejemplo**

```
sapodata= glueContext.create_dynamic_frame.from_options(
    connection_type="sapodata",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "/sap/opu/odata/sap/SEPM_HCM_SCENARIO_SRV/EmployeeSet",
        "NUM_PARTITIONS": "10",
        "PARTITION_BY": "COUNT"
    }, transformation_ctx=key)
```

# Limitaciones/Avisos
<a name="sap-odata-limitations"></a>
+ Las entidades ODP no son compatibles con la partición basada en registros, ya que la paginación se gestiona mediante un token de omisión o token delta. En consecuencia, para la partición basada en registros, el valor predeterminado de maxConcurrency se establece en “null”, independientemente de la entrada del usuario.
+ Cuando se aplican un límite y una partición, el límite prevalece sobre el particionamiento.