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作为临时认证方式:
- 在Fabric门户右上角点击个人资料 → 生成个人访问令牌
- 复制生成的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
相关产品推荐
相关产品推荐

