
# 查询请求结果
- 功能介绍：用户可以使用QueryResponse查询本次请求的整体执行结果。
- 方法定义：getSummary(workspaceId, response, get_schema, timeout)
- 参数说明：
  表1getSummary参数说明 
  | 参数名称        | 参数类型          | 是否必选 | 描述                                    |
  |:---|:---|:---|:---|
  | workspaceId | str           | 必选   | 用户创建的Fabric的工作空间的ID。                  |
  | response    | QueryResponse | 必选   | 本次查询请求返回的响应体。                         |
  | get_schema  | bool          | 可选   | 指定本次查询的结果中是否包含被查询表的schema信息，默认值为True。 |
  | timeout     | float         | 可选   | 请求超时时间。                               |
     
  

- 响应体说明：返回StatementSet
  ![](https://support.huaweicloud.com/sdkreference-fabric/public_sys-resources/note_3.0-zh-cn.png)
  该函数会返回一个响应体结构StatementSet，该结构的statements字段为一个list，如果本次查询请求仍在执行，状态为RUNNING、WAITING时，statements的是一个空list；否则statements中会包含每一个语句对应的Statement结构体，如本次请求的SQL语句为select \* from a; select \* from b; select \* from c，如果均执行成功，则返回一个有3个Statement结构体的list，每一个Statement结构体代表一个单SQL语句的执行结果。如果请求的多个SQL中某一个SQL语句执行失败，则list中只会包含从第一个语句开始到该失败语句的Statement结构体，因为一旦中间有一个语句失败，后续语句不会被执行。
  表2StatementSet 
  | 参数名称       | 参数类型              | 描述             |
  |:---|:---|:---|
  | statements | list\[Statement\] | 本次查询执行完毕的语句结果。 |
  | status     | str               | 本次查询整体的执行状态。   |
     
  表3Statement 
  | 参数名称                 | 参数类型           | 描述                 |
  |:---|:---|:---|
  | status               | str            | 该条语句的执行状态。         |
  | session_id           | str            | 会话ID。              |
  | statement_id         | str            | 语句ID。              |
  | num_rows             | int            | 语句影响总行数。           |
  | page_count           | int            | 该语句结果集总页数。         |
  | err_code             | str            | 错误码。               |
  | message              | str            | 执行信息，如果执行失败为失败信息。  |
  | schema               | list\[Column\] | 该语句被查询表的schema信息。  |
  | obs_endpoint         | str            | 结果集文件写入OBS桶的端点信息。  |
  | obs_bucket_name      | str            | 结果集文件写入的OBS桶名。     |
  | obs_file_path_prefix | str            | 结果集文件路径前缀。         |
  | obs_schema_path      | str            | 表schema信息文件的OBS路径。 |
  | obs_result_format    | ObsFileFormat  | 结果集文件在OBS存储的格式。    |
     
  表4Column 
  | 参数名称      | 参数类型 | 描述       |
  |:---|:---|:---|
  | name      | str  | 列头名称。    |
  | table_id  | str  | 表的ID。    |
  | colunm_id | str  | 列的ID。    |
  | format    | int  | 格式。      |
  | type      | int  | 类型。      |
  | size      | int  | 大小。      |
  | typemod   | int  | typemod。 |
     
  表5ObsFileFormat 
  | 取值 | 含义                        |
  |:---|:---|
  | 0  | 结果集文件格式为未压缩的JSON文件。       |
  | 1  | 结果集文件格式为zstd算法压缩后的JSON文件。 |
  | 2  | 结果集文件格式为未压缩的Arrow文件。      |
  | 3  | 结果集文件格式为zstd压缩后的Arrow文件。  |
     
  ![](https://support.huaweicloud.com/sdkreference-fabric/public_sys-resources/note_3.0-zh-cn.png)
  - 如果该请求执行失败或者查询本身不包含结果集，Statement中的schema和obs开头字段均为None。
  
  - 如果get_schema设置为False，Statement的schema为None。
   
  表6StatementSet的status取值 
  | 状态值        | 描述     |
  |:---|:---|
  | FAIL       | 执行失败。  |
  | SUCCESSFUL | 执行成功。  |
  | RUNNING    | 执行中。   |
  | EMPTY      | 结果集为空。 |
  | WAITING    | 等待中。   |
     
  表7Statement的status取值 
  | 状态值               | 描述                   |
  |:---|:---|
  | PGRES_TUPLES_OK   | 本次执行成功返回元组。          |
  | PGRES_COMMAND_OK  | 本次执行成功，不返回元组，如SET语句。 |
  | PGRES_FATAL_ERROR | 本次执行失败。              |
     
  
- 示例代码：
```
import os
from fabricsql.SQLClient import FabricSQLClient
from fabricsql.SQLRequests import SessionRequest, QueryRequest
client = FabricSQLClient(ep, ak ,sk )
# 创建一个Session请求，填入必要信息
s = SessionRequest()
s.endpoint_id = endpoint_id
s.instance_id = instance_id
s.catalog = catalog
#创建一个Session,获取session_id
session = client.createSession(workspace_id, s)
session_id = session.session_id
# #创建一个SQL请求
q = QueryRequest()
q.statement = "show all;select * from a;select * from b"
q.session_id = session_id
#下发请求，返回一个请求响应
query_resp = client.executeQuery(workspace_id, q)
#根据该请求响应，轮询请求结果
while True:
    statement_set = client.getSummary(wp, query_resp, get_schema=False)
    if statement_set.status == "SUCCESSFUL" or statement_set.status == "FAIL":
        break
    #等待2s后轮询
    time.sleep(2)
```
