非 ODP 實體的分區 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

非 ODP 實體的分區

在 Apache Spark 中,分區是指在叢集中的工作者節點之間分區和分配資料以進行平行處理的方式。每個分區都是可由任務獨立處理的資料邏輯區塊。分區是 Spark 中的基本概念,其可直接影響效能、可擴展性和資源使用率。AWS Glue 任務使用 Spark 的分區機制,將資料集分區成較小的區塊 (分區區),可在叢集的工作者節點之間對其進行平行處理。請注意,分區不適用於 ODP 實體。

如需詳細資訊,請參閱 AWS Glue Spark 和 PySpark 任務

先決條件

您想要從中讀取的 SAP OData 的物件。將需要物件/實體集名稱。例如: /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)

分區查詢

欄位型分區

如果想要在 Spark 中使用並行,可以提供其他 Spark 選項 PARTITION_FIELDLOWER_BOUNDUPPER_BOUNDNUM_PARTITIONS。使用這些參數,原始查詢會分區為可由 Spark 任務並行執行的子查詢的 NUM_PARTITIONS 數目。Integer、Date 和 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)

記錄型分區

原始查詢會分區為 Spark 任務可同時執行的子查詢的 NUM_PARTITIONS 數目。

記錄型分區僅支援非 ODP 實體,因為下一個 token/skip token 支援 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)