Partitionnement pour les entités non ODP - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Partitionnement pour les entités non ODP

Dans Apache Spark, le partitionnement fait référence à la manière dont les données sont divisées et distribuées entre les composants master d’un cluster pour un traitement parallèle. Chaque partition est un bloc logique de données qui peut être traité indépendamment par une tâche. Le partitionnement est un concept fondamental de Spark qui a un impact direct sur les performances, la capacité de mise à l’échelle et l’utilisation des ressources. Les tâches AWS Glue utilisent le mécanisme de partitionnement de Spark pour diviser le jeu de données en petits morceaux (partitions) qui peuvent être traités en parallèle sur les composants master du cluster. Notez que le partitionnement n’est pas applicable aux entités ODP.

Pour plus de détails, consultez AWS Glue Spark and PySpark jobs.

Prérequis

Un objet SAP OData à partir duquel vous souhaitez lire. Vous aurez besoin du nom de l’objet/EntitySet. Par exemple : /sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder .

Exemple

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)

Requêtes de partitionnement

Partitionnement basé sur les champs

Vous pouvez indiquer les options Spark supplémentaires PARTITION_FIELD, LOWER_BOUND, UPPER_BOUND et NUM_PARTITIONS si vous souhaitez utiliser la simultanéité dans Spark. Avec ces paramètres, la requête d’origine serait divisée en NUM_PARTITIONS nombres de sous-requêtes pouvant être exécutées simultanément par les tâches Spark. Les champs Integer, Date et DateTime prennent en charge le partitionnement basé sur des champs dans le connecteur SAP OData.

  • PARTITION_FIELD : le nom du champ à utiliser pour partitionner la requête.

  • LOWER_BOUND : une valeur limite inférieure inclusive du champ de partition choisi.

    Pour tout champ dont le type de données est DateTime, le format d’horodatage Spark utilisé dans les requêtes SQL Spark est accepté.

    Exemples de valeurs valides : "2000-01-01T00:00:00.000Z"

  • UPPER_BOUND : une valeur limite supérieure exclusive du champ de partition choisi.

  • NUM_PARTITIONS : nombre de partitions.

  • PARTITION_BY : le type de partitionnement à effectuer, FIELD à transmettre en cas de partitionnement basé sur des champs.

Exemple

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)

Partitionnement basé sur des enregistrements

La requête d’origine serait divisée en NUM_PARTITIONS nombres de sous-requêtes qui peuvent être exécutées simultanément par les tâches Spark.

Le partitionnement basé sur des enregistrements n’est pris en charge que pour les entités non ODP, car la pagination dans les entités ODP est prise en charge par le jeton suivant/jeton Skip.

  • PARTITION_BY : le type de partitionnement à effectuer. COUNT doit être transmis en cas de partitionnement basé sur des enregistrements.

Exemple

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)