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)