如何以编程方式自动化导出Azure Databricks工作区所有笔记本?
可以自动化导出Azure Databricks所有笔记本
完全可以通过编程实现步骤(1)的自动化,以下是几种常用的实现方式,你可以根据技术栈选择:
方法1:使用Databricks REST API
通过Databricks的Workspace API可以直接遍历并导出笔记本,核心是两个API:workspace/list(遍历目录)和workspace/export(导出内容)。如果只需要笔记本的元数据(路径、修改时间等),用workspace/list就足够。
步骤与示例
- 获取Databricks工作区的访问令牌(个人访问令牌或服务主体令牌)
- 调用API遍历所有笔记本:
# 配置工作区地址和令牌 export DATABRICKS_HOST="https://<你的工作区URL>" export DATABRICKS_TOKEN="<你的访问令牌>" # 递归列出根目录下所有笔记本,过滤出NOTEBOOK类型 curl -X GET "$DATABRICKS_HOST/api/2.0/workspace/list?path=/" \ -H "Authorization: Bearer $DATABRICKS_TOKEN" \ | jq '.objects[] | select(.object_type == "NOTEBOOK") | {path: .path, modified_time: .modified_time, language: .language}'
- (可选)导出单个笔记本内容:
curl -X GET "$DATABRICKS_HOST/api/2.0/workspace/export?path=/路径/到/笔记本&format=SOURCE" \ -H "Authorization: Bearer $DATABRICKS_TOKEN" \ > notebook-source.py
方法2:使用Databricks CLI
Databricks CLI是官方的命令行工具,封装了REST API,使用更简便。
步骤与示例
- 安装并配置CLI:
pip install databricks-cli databricks configure --token # 输入工作区URL和访问令牌
- 递归列出所有笔记本路径:
databricks workspace list / --recursive | grep -E "\.(py|scala|sql|r)$" > all-notebooks.txt
- (可选)批量导出所有笔记本到本地:
mkdir -p exported-notebooks while read path; do local_path="./exported-notebooks${path}" mkdir -p "$(dirname "$local_path")" databricks workspace export "$path" "$local_path" done < all-notebooks.txt
方法3:使用Python SDK(databricks-sdk)
适合用Python做自动化脚本的场景,能直接整合后续的对比、导出Excel/Power BI的逻辑。
步骤与示例代码
- 安装SDK:
pip install databricks-sdk pandas
- 编写脚本收集笔记本元数据并导出:
from databricks.sdk import WorkspaceClient from databricks.sdk.service import workspace import pandas as pd # 初始化客户端 w = WorkspaceClient(host="https://<你的工作区URL>", token="<你的访问令牌>") def recursive_list_notebooks(path: str = "/"): notebooks = [] for obj in w.workspace.list(path=path): if obj.object_type == workspace.ObjectType.NOTEBOOK: notebooks.append({ "notebook_path": obj.path, "language": obj.language.name, "last_modified_timestamp": obj.modified_time, "last_modified": pd.to_datetime(obj.modified_time, unit='ms') }) elif obj.object_type == workspace.ObjectType.DIRECTORY: notebooks.extend(recursive_list_notebooks(obj.path)) return notebooks # 获取所有笔记本元数据 all_notebooks = recursive_list_notebooks() # 保存为CSV,直接导入Excel或Power BI df = pd.DataFrame(all_notebooks) df.to_csv("databricks_notebooks_metadata.csv", index=False) # (可选)批量导出笔记本内容 # for nb in all_notebooks: # content = w.workspace.export(path=nb["notebook_path"], format=workspace.ExportFormat.SOURCE) # local_path = f"./exported/{nb['notebook_path'].lstrip('/').replace('/', '_')}.py" # with open(local_path, "w") as f: # f.write(content)
注意事项
- 如果你只是为了识别闲置笔记本,不需要导出笔记本内容,仅收集笔记本的路径、最后修改时间等元数据即可,再和Log Analytics中的运行记录做关联,筛选出x天内无运行记录的笔记本。
- 确保使用的令牌有足够的权限(至少需要
Workspace Read权限)。
内容的提问来源于stack exchange,提问作者skyline01
相关产品推荐
相关产品推荐

