从 SAP OData 实体中读取
先决条件
您要从中读取内容的 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": "entityName" }, transformation_ctx=key)
SAP OData 实体和字段详细信息:
实体 | 数据类型 | 支持的运算符 |
---|---|---|
表(动态实体) | String | =, !=, >, >=, <, <=, BETWEEN, LIKE |
整数 | =, !=, >, >=, <, <=, BETWEEN, LIKE | |
长整型 | =, !=, >, >=, <, <=, BETWEEN, LIKE | |
Double | =, !=, >, >=, <, <=, BETWEEN, LIKE | |
Date | =, !=, >, >=, <, <=, BETWEEN, LIKE | |
DateTime | =, !=, >, >=, <, <=, BETWEEN, LIKE | |
布尔值 | =, != | |
Struct | =, !=, >, >=, <, <=, BETWEEN, LIKE |
对查询进行分区
基于字段的分区:
如果您想在 Spark 中利用并发,可以提供其他 Spark 选项:PARTITION_FIELD
、LOWER_BOUND
、UPPER_BOUND
和 NUM_PARTITIONS
。使用这些参数,原始查询将被拆分为 NUM_PARTITIONS
个子查询,这些子查询可以由 Spark 任务同时执行。整数、日期和日期时间字段支持 SAP OData 连接器中基于字段的分区。
PARTITION_FIELD
:用于对查询进行分区的字段的名称。LOWER_BOUND
:所选分区字段的包含下限值。对于日期时间字段,我们接受 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)
基于记录的分区:
原始查询将被拆分为 NUM_PARTITIONS
个子查询,这些子查询可以由 Spark 任务同时执行。
只有非 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)