
# 查询接口概述
数据实体和关系实体是工业数字模型驱动引擎-数据建模引擎（xDM Foundation，简称xDM-F）原子接口的承载体，支持多种具有查询功能的接口。其中：
- 数据实体支持调用Find、Get、BatchGet、Query、Count、List和Select接口，可进行单字段排序或多字段排序。
  - 仅支持单字段排序的接口有Get、BatchGet和List接口。
  
  - 支持多字段排序的接口有Find、Query、Count和Select接口。
   
- 关系实体支持QueryRelatedObjects（查询源或目标实体的属性）、BatchQueryRelatedObjects（批量查询源或目标实体的属性）、QueryRelationship（查询关系实体的数据）、QueryTarget（查询关系实例的数据）和DeleteTarget（删除关系实例）接口。
#### 功能对比
表1数据实体查询接口 
| 接口       | 适用场景                                                                                            | 查询效率                      | 多字段排序                                                                  |
|:---|:---|:---|:---|
| Get      | 适用于通过实体或实例的ID，获取某实体或实例所有信息的场景。                                                                  | 模型越复杂，参考对象和扩展属性越多，查询效率越慢。 | 不支持。                                                                   |
| Batchget | 适用于通过实体或实例的ID，获取多个实体或实例所有信息的场景。                                                                 | 模型越复杂，参考对象和扩展属性越多，查询效率越慢。 | 不支持。                                                                   |
| List     | 适用于只查询数据模型自身信息的场景。 不支持参考模型属性作为查询条件。             | 查询效率较快。                   | 可通过sorts字段进行多字段排序，通过filter字段进行数据过滤。                                    |
| Find     | 适用于通过指定查询条件，获取符合条件的所有数据模型的所有信息的场景。                                                              | 模型越复杂，参考对象和扩展属性越多，查询效率越慢。 | 可通过sorts字段进行多字段排序，通过filter字段进行数据过滤。                                    |
| Query    | 适用于只查询数据模型所有的列表属性信息的场景。 只返回符合查询条件的对象及列表属性。         | 查询效率相较于find更快一些。          | 可通过sorts字段进行多字段排序，通过filter字段进行数据过滤。                                    |
| Count    | 适用于通过指定查询条件，获取符合条件的数据模型总数的场景。 只返回符合查询条件的对象的记录总数。 | 查询效率较快。                   | 可通过sorts字段进行多字段排序，通过filter字段进行数据过滤。                                    |
| Select   | 适用于只查询数据模型指定属性数据的场景。                                                                            | 查询效率较快。                   | 可通过sorts字段进行多字段排序，通过filter字段进行数据过滤。但数据过滤时，还需通过selectedField字段指定属性查询数据。 |
   
表2关系实体查询接口 
| 接口                       | 描述               |
|:---|:---|
| QueryRelatedObjects      | 用于查询源或目标实体的属性。   |
| BatchQueryRelatedObjects | 用于批量查询源或目标实体的属性。 |
| QueryRelationship        | 用于查询关系实例的数据。     |
| QueryTarget              | 用于查询目标实体的数据。     |
| DeleteTarget             | 用于删除关系实例。        |
   
#### 约束与限制
- 在支持分页查询的接口中，系统允许每页返回数据行数（pageSize参数）最大限制默认为5000行。建议您合理设置pageSize值大小（例如\<200），以避免多并发查询时可能会导致CPU使用率升高影响使用体验。
- 为保障您的应用安全性，在调用数据实体和关系实体相关分页查询接口时存在如下约束与限制：
  - 如果分页偏移量＞5万，受限于数据库分页查询效能，可能存在响应时长增加的情况，为保障查询体验，建议list、find、query和select等接口的分页偏移量≤5万。
  
  - 如果分页偏移量＞50万，对应分页查询接口将自动触发限流保护，提示"当前已触发分页查询限流保护，请稍后重试。"。
   
 
#### 使用方法
- 关于数据实体的查询接口的使用和代码示例，请参见[数据实体查询接口](https://support.huaweicloud.com/bestpractice-idme/idme_bestpractice_0009.html)。
- 关于关系实体的查询接口的使用和代码示例，请参见[关系实体查询接口](https://support.huaweicloud.com/bestpractice-idme/idme_bestpractice_0017.html)。
 
#### 排序规则说明
数据实体、关系实体的接口，涉及排序的，根据数据库类型不同，字段首字母排序遵循如下规则：
- 如果是PostgreSQL数据库，在升降序排序时，先根据字母大小写，然后再根据英文字母顺序进行升降序排序显示。如升序排序时，字段首字母排序显示为B、X、Z、a、b、c。
- 如果是MySQL数据库，在升降序排序时，先根据英文字母顺序，然后再根据字母大小写进行升降序排序显示。如升序排序时，字段首字母排序显示为a、B、b、c、X、Z。
 
#### 支持的运算符
查询接口支持如下运算符：
- =：支持设置文本、整型、长整型、浮点型、浮点型（自定义精度）、布尔值、枚举、人员、URL和日期类型的属性。
- like：支持设置文本、人员和URL类型的属性。
- startWith：支持设置文本、人员和URL类型的属性。
- endWith：支持设置文本、人员和URL类型的属性。
- in：支持设置文本、整型、长整型、浮点型、浮点型（自定义精度）、布尔值、日期、枚举、人员和URL类型的属性。
- not in：支持设置文本、整型、长整型、浮点型、浮点型（自定义精度）、布尔值、日期、枚举、人员和URL类型的属性。
- customLike：支持设置文本、人员和URL类型的属性。
- \<：支持设置整型、长整型、浮点型、浮点型（自定义精度）和日期类型的属性。
- \>：支持设置整型、长整型、浮点型、浮点型（自定义精度）和日期类型的属性。
- \<=：支持设置整型、长整型、浮点型、浮点型（自定义精度）和日期类型的属性。
- \>=：支持设置整型、长整型、浮点型、浮点型（自定义精度）和日期类型的属性。
- \<\>：支持设置文本、整型、长整型、浮点型、浮点型（自定义精度）、布尔值、枚举、人员、URL和日期类型的属性。
- ISNULL：无需设置属性。
- NOTNULL：无需设置属性。
- contains：支持设置枚举、人员类型的属性，且"多值"设置为"是"。
 
