

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

# 制限/コールアウト
<a name="sap-odata-limitations"></a>
+ スキップトークン/デルタトークンでページネーションを行うため、ODP エンティティはレコードベースのパーティション分割と互換性がありません。したがって、レコードベースのパーティション分割の場合、maxConcurrency のデフォルト値は、ユーザー入力に関係なく「null」に設定されます。
+ 制限とパーティション分割の両方が適用された場合、制限はパーティション分割よりも優先されます。