Databricks SQL中SQL脚本在DBFS的存储位置及批量下载方法
Databricks SQL脚本批量导出与Git版本管理方案
编程批量下载实现方式
可以通过Databricks官方开放的工作区API实现批量导出,无需手动逐个下载,具体逻辑如下:
- Databricks中所有保存的SQL脚本都属于工作区资产,可通过
/api/2.0/workspace系列接口进行读取和导出 - 操作前需提前生成具备工作区读取权限的个人访问令牌(PAT),并确认你要导出的SQL脚本在工作区中的存储路径
- 导出的SQL源码为纯文本格式,可直接存入Git仓库进行版本管理
关于DBFS存储路径说明
Databricks SQL脚本默认存储在工作区内部的元数据存储中,没有对外暴露可直接访问的DBFS路径,无法通过挂载DBFS、直接读DBFS文件的方式获取SQL脚本内容。
Python实现批量导出示例
以下示例可直接使用,按需修改配置项即可:
import requests import os # 自定义配置项 DATABRICKS_INSTANCE = "https://<你的Databricks工作区域名>" PERSONAL_ACCESS_TOKEN = "<你的PAT令牌>" LOCAL_SAVE_PATH = "./databricks_sql_backup" WORKSPACE_SQL_DIR = "/Workspace/Queries" # 替换为你的SQL脚本在工作区中的父目录 # 初始化本地存储目录 os.makedirs(LOCAL_SAVE_PATH, exist_ok=True) req_headers = {"Authorization": f"Bearer {PERSONAL_ACCESS_TOKEN}"} def export_sql_from_dir(workspace_dir: str): # 调用接口遍历当前目录下的所有资产 list_resp = requests.get( url=f"{DATABRICKS_INSTANCE}/api/2.0/workspace/list", headers=req_headers, params={"path": workspace_dir} ) list_resp.raise_for_status() assets = list_resp.json().get("objects", []) for asset in assets: asset_type = asset.get("object_type") asset_path = asset.get("path") # 递归处理子目录 if asset_type == "DIRECTORY": export_sql_from_dir(asset_path) # 导出SQL类型的资产 elif asset_type == "SQL": export_resp = requests.get( url=f"{DATABRICKS_INSTANCE}/api/2.0/workspace/export", headers=req_headers, params={"path": asset_path, "format": "SOURCE"} ) export_resp.raise_for_status() # 生成本地存储文件名,需要保留原目录层级可自行调整逻辑 file_name = asset_path.split("/")[-1] + ".sql" with open(os.path.join(LOCAL_SAVE_PATH, file_name), "w", encoding="utf-8") as f: f.write(export_resp.content.decode("utf-8")) if __name__ == "__main__": export_sql_from_dir(WORKSPACE_SQL_DIR)
运行脚本后所有SQL文件会导出到LOCAL_SAVE_PATH指定的目录,你可以直接在该目录执行Git初始化、提交推送操作即可完成版本管理。
内容的提问来源于stack exchange,提问作者Amey Joshi
相关产品推荐
相关产品推荐

