查询请求结果
- 功能介绍:用户可以使用QueryResponse查询本次请求的整体执行结果。
- 方法定义:getSummary(workspaceId, response, get_schema, timeout)
- 参数说明:
表1 getSummary参数说明 参数名称
参数类型
是否必选
描述
workspaceId
str
必选
用户创建的Fabric的工作空间的ID。
response
QueryResponse
必选
本次查询请求返回的响应体。
get_schema
bool
可选
指定本次查询的结果中是否包含被查询表的schema信息,默认值为True。
timeout
float
可选
请求超时时间。
- 响应体说明:返回StatementSet
该函数会返回一个响应体结构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结构体,因为一旦中间有一个语句失败,后续语句不会被执行。
表2 StatementSet 参数名称
参数类型
描述
statements
list[Statement]
本次查询执行完毕的语句结果。
status
str
本次查询整体的执行状态。
表3 Statement 参数名称
参数类型
描述
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存储的格式。
表4 Column 参数名称
参数类型
描述
name
str
列头名称。
table_id
str
表的ID。
colunm_id
str
列的ID。
format
int
格式。
type
int
类型。
size
int
大小。
typemod
int
typemod。
表5 ObsFileFormat 取值
含义
0
结果集文件格式为未压缩的JSON文件。
1
结果集文件格式为zstd算法压缩后的JSON文件。
2
结果集文件格式为未压缩的Arrow文件。
3
结果集文件格式为zstd压缩后的Arrow文件。
- 如果该请求执行失败或者查询本身不包含结果集,Statement中的schema和obs开头字段均为None。
- 如果get_schema设置为False,Statement的schema为None。
表6 StatementSet的status取值 状态值
描述
FAIL
执行失败。
SUCCESSFUL
执行成功。
RUNNING
执行中。
EMPTY
结果集为空。
WAITING
等待中。
表7 Statement的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)