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

Polars写入Microsoft Fabric Lakehouse Delta表报错,如何正确配置?

解决Polars在Fabric Notebook写入Delta表的认证问题

原因分析

你遇到的错误是Polars尝试通过托管身份(MSI)获取Azure存储令牌失败,Fabric Notebook的身份认证机制需要适配Polars的Delta写入逻辑,不能直接用默认的MSI配置。

正确配置方案

方案1:利用Fabric内置Spark上下文的认证凭据(推荐)

Fabric Notebook中已通过Spark完成身份认证,可直接提取Spark的存储配置传递给Polars,避免手动处理令牌:

import polars as pl

# 从Spark上下文获取Fabric存储的认证配置
spark_conf = spark._jsc.hadoopConfiguration()
storage_options = {
    "fs.azure.account.auth.type": spark_conf.get("fs.azure.account.auth.type"),
    "fs.azure.account.oauth.provider.type": spark_conf.get("fs.azure.account.oauth.provider.type"),
    "fs.azure.account.oauth2.client.id": spark_conf.get("fs.azure.account.oauth2.client.id"),
    "fs.azure.account.oauth2.client.secret": spark_conf.get("fs.azure.account.oauth2.client.secret"),
    "fs.azure.account.oauth2.client.endpoint": spark_conf.get("fs.azure.account.oauth2.client.endpoint")
}

# 替换为你的Lakehouse Delta表路径(GUID或名称格式都可)
delta_path = "abfss://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@onelake.dfs.fabric.microsoft.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Tables/xxx"

# 写入Delta表
df.write_delta(
    delta_path,
    mode="append",
    storage_options=storage_options
)

方案2:简化路径并使用Fabric默认身份

若你的Notebook已关联目标Lakehouse,可直接使用简洁路径格式,Polars会自动继承Fabric的身份认证:

import polars as pl

# 格式:abfss://<工作区名称>@onelake.dfs.fabric.microsoft.com/<Lakehouse名称>/Tables/<表名>
delta_path = "abfss://MyWorkspace@onelake.dfs.fabric.microsoft.com/MyLakehouse/Tables/MyDeltaTable"

# 无需额外storage_options,直接写入
df.write_delta(delta_path, mode="append")

方案3:使用个人访问令牌(PAT)(仅临时测试用,不推荐)

若上述方案无效,可生成Fabric的PAT作为临时认证方式:

  1. 在Fabric门户右上角点击个人资料 → 生成个人访问令牌
  2. 复制生成的PAT
import polars as pl

delta_path = "abfss://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@onelake.dfs.fabric.microsoft.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Tables/xxx"

storage_options = {
    "fs.azure.account.auth.type": "OAuth",
    "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
    "fs.azure.account.oauth2.client.id": "00000000-0000-0000-0000-000000000000",  # Fabric固定客户端ID
    "fs.azure.account.oauth2.client.secret": "你的Fabric PAT",
    "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/common/oauth2/token"
}

df.write_delta(delta_path, mode="append", storage_options=storage_options)

注意事项

  • 确保Notebook已关联目标Lakehouse(在左侧"Lakehouses"面板添加关联)
  • 路径中的GUID可通过Lakehouse的"属性"面板获取,也可直接使用工作区和Lakehouse名称
  • 避免硬编码敏感信息(如PAT),优先使用Fabric内置认证机制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:20:08