Leitura de entidades do SAP OData - AWS Glue

Leitura de entidades do SAP OData

Pré-requisito

Um objeto do SAP OData do qual você deseja ler. Você precisará do nome do objeto/EntitySet, por exemplo, /sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder.

Exemplo:

sapodata_read = glueContext.create_dynamic_frame.from_options( connection_type="SAPOData", connection_options={ "connectionName": "connectionName", "ENTITY_NAME": "entityName" }, transformation_ctx=key)

Detalhes das entidades e dos campos do SAP OData:

Entidade Tipo de dados Operadores compatíveis
Tabelas (entidades dinâmicas) String =, !=, >, >=, <, <=, BETWEEN, LIKE
Inteiro =, !=, >, >=, <, <=, BETWEEN, LIKE
Longo =, !=, >, >=, <, <=, BETWEEN, LIKE
Double =, !=, >, >=, <, <=, BETWEEN, LIKE
Data =, !=, >, >=, <, <=, BETWEEN, LIKE
DateTime =, !=, >, >=, <, <=, BETWEEN, LIKE
Booleano =, !=
struct =, !=, >, >=, <, <=, BETWEEN, LIKE

Consultas de particionamento

Particionamento com base em campo:

É possível fornecer as opções adicionais do Spark PARTITION_FIELD, LOWER_BOUND, UPPER_BOUND e NUM_PARTITIONS se quiser utilizar a simultaneidade no Spark. Com esses parâmetros, a consulta original seria dividida em NUM_PARTITIONS subconsultas, que poderiam ser executadas pelas tarefas do Spark simultaneamente. Os campos Integer, Date e DateTime oferecem suporte ao particionamento com base em campo no conector do SAP OData.

  • PARTITION_FIELD: o nome do campo a ser usado para particionar a consulta.

  • LOWER_BOUND: um valor limite inferior inclusivo do campo de partição escolhido.

    No campo Data e hora, aceitamos o formato de carimbo de data/hora do Spark usado em consultas SQL do Spark.

    Exemplos de valores válidos:

    "2000-01-01T00:00:00.000Z"
  • UPPER_BOUND: um valor limite superior exclusivo do campo de partição escolhido.

  • NUM_PARTITIONS: o número de partições.

  • PARTITION_BY: o tipo de particionamento a ser executado. “FIELD” deve ser passado no caso de particionamento com base em campo.

Exemplo:

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)

Particionamento com base em registros:

A consulta original seria dividida em NUM_PARTITIONS subconsultas, que poderiam ser executadas pelas tarefas do Spark simultaneamente.

O particionamento com base em registros só é compatível para entidades não ODP, pois a paginação em entidades ODP é compatível por meio do próximo token/ignorar token.

  • PARTITION_BY: o tipo de particionamento a ser executado. “COUNT” deve ser passado no caso de particionamento com base em registros.

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)