You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过SDK创建Azure Synapse工作区包如何将预配状态设为成功而非未完成

问题解决方法

你的代码缺少了上传完成后触发包正式发布的begin_flush步骤,这是预配状态始终无法变为Succeeded的核心原因。Synapse工作区自定义包上传完整流程分为三个强制步骤,你只执行了前两步,系统不会触发最终的校验和预配逻辑。

完整上传步骤

  • 调用begin_create创建包的占位资源,等待操作完成
  • 调用append上传包的二进制内容,大文件可分多次追加
  • 调用begin_flush提交所有已上传内容,触发系统校验和预配,等待该操作完成后包状态才会变为可用

修正后可运行代码

from time import sleep
import os
from azure.identity import DefaultAzureCredential
from azure.synapse.artifacts import ArtifactsClient

# 初始化客户端
client = ArtifactsClient(
    credential=DefaultAzureCredential(), 
    endpoint="https://mysynapseworkspace.dev.azuresynapse.net"
)
library_client = client.library

# 注意:wheel_name必须和实际上传的whl文件名完全一致,否则校验会失败
wheel_file_path = 'C:\\path\\to\\wheelfile\\wheel_tester-0.0.1-py3-none-any.whl'
wheel_name = os.path.basename(wheel_file_path)

# 第一步:创建包占位
poller = library_client.begin_create(wheel_name)
poller.result()
print("包占位创建完成")

# 第二步:上传包内容
file_size = os.path.getsize(wheel_file_path)
with open(wheel_file_path, 'rb') as whl:
    library_client.append(library_name=wheel_name, content=whl)
print("包内容上传完成")

# 第三步:提交发布,必须传入已上传的总字节数
flush_poller = library_client.begin_flush(library_name=wheel_name, content_length=file_size)
flush_poller.result()
print("包发布完成,预配状态已变为Succeeded")

注意事项

  • 包名wheel_name必须和本地whl文件的全名完全匹配,不要随意修改名称,否则系统校验会直接失败
  • 大于4MB的包建议拆分多个块,多次调用append方法分段上传,避免单次请求超时
  • 调用begin_flush时传入的content_length必须和实际上传的文件字节数完全一致,否则会触发参数错误

内容的提问来源于stack exchange,提问作者Fjurg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:36:03