如何修改Databricks代码以使用SAS令牌读取Azure Blob存储?
使用SAS令牌在Databricks中访问Azure Blob存储的修改方案
方法一:通过Spark配置全局设置SAS令牌
替换原有的账户密钥配置,改用容器级或账户级SAS令牌配置:
container = 'testcontainer' storage_account = 'testaccount' # 替换为你的SAS令牌(注意移除开头的?符号) sas_token = "sv=2023-11-03&ss=bfqt&srt=sco&sp=rwdlacupiytfx&se=2024-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=abcdefghijklmnopqrstuvwxyz1234567890==" # 容器级SAS配置:仅授权访问指定容器 spark.conf.set(f"fs.azure.sas.{container}.{storage_account}.blob.core.windows.net", sas_token) access_path = f"wasbs://{container}@{storage_account}.blob.core.windows.net/" dbutils.fs.ls(access_path)
如果使用账户级SAS令牌(可访问存储账户下所有容器),将配置项改为:
spark.conf.set(f"fs.azure.account.sas.{storage_account}.blob.core.windows.net", sas_token)
方法二:直接将SAS令牌嵌入访问路径
无需修改Spark配置,直接把带?开头的SAS令牌拼接到路径末尾:
container = 'testcontainer' storage_account = 'testaccount' # 保留开头的?符号 sas_token = "?sv=2023-11-03&ss=bfqt&srt=sco&sp=rwdlacupiytfx&se=2024-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=abcdefghijklmnopqrstuvwxyz1234567890==" access_path = f"wasbs://{container}@{storage_account}.blob.core.windows.net/{sas_token}" dbutils.fs.ls(access_path)
关键注意事项
- 确保SAS令牌包含
l(列出)权限,否则dbutils.fs.ls会提示权限不足 - 检查SAS令牌的有效期(
se参数),避免使用已过期的令牌 - 不要硬编码SAS令牌,建议用Databricks Secrets管理敏感信息:
sas_token = dbutils.secrets.get(scope="your-secret-scope", key="sas-token-key")
内容的提问来源于stack exchange,提问作者ZZZSharePoint
相关产品推荐
相关产品推荐

