PySpark调用Synapse API创建SQL脚本返回202但未生成脚本
Synapse SQL脚本创建异常:返回202 Accepted但未生成脚本
背景
已通过PySpark调用Synapse的GET API成功获取工作区内的SQL脚本,代码如下:
%%pyspark import requests token = mssparkutils.credentials.getToken('Synapse') # GET请求地址 url = "https://xxxx-xx-xx-xxx-xx-xxx-xx.dev.azuresynapse.net/sqlScripts?api-version=2020-12-01" headers = {'Authorization': f"Bearer {token}"} response = requests.get(url, headers=headers)
随后尝试通过PUT调用创建/更新SQL脚本的API,代码片段如下:
# 替换GET为PUT请求 requests.put(url2, data=data, headers=headers2)
请求返回202 Accepted,响应内容显示"state":"Creating",但工作区内并未生成新的SQL脚本。响应示例:
b'{"id":"/subscriptions/xxxx-xx-xxx-xxx-xxxx/resourceGroups/xxx-xx-xxx-xxx-xx/providers/Microsoft.Synapse/workspaces/xxx-xx-xx-xxx-xx-xxxx-xxx/sqlScripts/test","recordId":xxxx,"state":"Creating","created":"2023-10-12T15:40:03.6666667Z","changed":"2023-10-12T15:40:03.6666667Z","type":"SqlScript","name":"test","operationId":"xxxxxx-xxx-xxx-xxxx-xxxxxx","artifactId":"xxxxx-xxxxx-xxxx-xxx-xxxxxxxx"}'
<Response [202]>
可能的问题及解决方向
- PUT请求URL格式错误:PUT请求需要指定具体的目标脚本名称,正确URL格式应为
https://<工作区名称>.dev.azuresynapse.net/sqlScripts/<脚本名称>?api-version=2020-12-01,不能使用GET请求的列表型URL。 - 请求头缺少必要字段:必须添加
Content-Type: application/json头,否则服务无法正确解析请求体中的JSON数据。 - 请求体(data)结构不合法:需严格按照API要求构造JSON格式的请求体,至少包含脚本内容和类型字段,示例结构:
{ "properties": { "content": { "query": "SELECT * FROM your_table" }, "type": "SqlScript" } }
- 异步操作后台执行失败:202状态码仅表示请求已接收,需利用响应中的
operationId调用操作状态查询API,确认后台是否实际执行成功。 - 权限不足:检查当前令牌对应的身份是否拥有
Synapse SQL Script Contributor或更高权限,GET权限不代表拥有PUT的创建权限。
内容的提问来源于stack exchange,提问作者ByronSchuurman
相关产品推荐
相关产品推荐

