

# 비 ODP 엔터티를 위한 파티셔닝
<a name="sap-odata-non-odp-entities-partitioning"></a>

Apache Spark에서 파니셔닝은 병렬 처리를 위해 클러스터의 워커 노드 간에 데이터를 분할하고 배포하는 방법을 나타냅니다. 각 파티션은 태스크에서 독립적으로 처리할 수 있는 데이터의 논리적 청크입니다. 파티셔닝은 성능, 확장성 및 리소스 사용률에 직접적인 영향을 미치는 Spark의 기본 개념입니다. AWS Glue 작업은 Spark의 파티셔닝 메커니즘을 사용하여 데이터세트를 클러스터의 워커 노드에서 병렬로 처리할 수 있는 더 작은 청크(파티션)로 나눕니다. 참고로 ODP 엔터티에는 파티셔닝이 적용되지 않습니다.

자세한 내용은 [AWS Glue Spark 및 PySpark 작업을](https://docs.aws.amazon.com/glue/latest/dg/spark_and_pyspark.html) 참조하세요.

**사전 조건**

읽으려는 SAP OData의 객체. 객체/EntitySet 이름이 필요합니다. 예를 들면 ` /sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder `입니다.

**예제**

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

## 파티셔닝 쿼리
<a name="sap-odata-partitioning-queries"></a>

### 필드 기반 파티셔닝
<a name="sap-odata-field-based-partitioning"></a>

Spark에서 동시성을 활용하려는 경우 추가 Spark 옵션(`PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND`, `NUM_PARTITIONS`)을 제공할 수 있습니다. 이러한 파라미터를 사용하면 Spark 작업에서 동시에 실행할 수 있는 `NUM_PARTITIONS`개의 하위 쿼리로 원래 쿼리가 분할됩니다. 정수, 날짜 및 DateTime 필드는 SAP OData 커넥터에서 필드 기반 분할을 지원합니다.
+ `PARTITION_FIELD`: 쿼리 분할에 사용할 필드의 이름입니다.
+ `LOWER_BOUND`: 선택한 파티션 필드의 하한 값(경계 포함).

   데이터 유형이 DateTime인 필드의 경우 Spark SQL 쿼리에 사용된 Spark 타임스탬프 형식을 허용합니다.

  유효한 값의 예: `"2000-01-01T00:00:00.000Z"` 
+ `UPPER_BOUND`: 선택한 파티션 필드의 상한 값(경계 제외).
+ `NUM_PARTITIONS`: 파티션 수.
+ `PARTITION_BY`: 수행할 파티셔닝 유형. 필드 기반 파티셔닝의 경우 `FIELD`가 전달됩니다.

**예제**

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

### 레코드 기반 파티셔닝
<a name="sap-odata-record-based-partitioning"></a>

Spark 태스크에서 동시에 실행할 수 있는 `NUM_PARTITIONS`개의 하위 쿼리로 원본 쿼리가 분할됩니다.

ODP 엔터티에서 페이지 매김은 다음 토큰/건너뛰기 토큰을 통해 지원되므로 레코드 기반 분할은 비ODP 엔터티에 대해서만 지원됩니다.
+ `PARTITION_BY`: 수행할 파티셔닝 유형. 레코드 기반 파티셔닝의 경우 `COUNT`가 전달됩니다.

**예제**

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