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

Databricks中跨Notebook调用及动态变量传递实现问询

解决Databricks Notebook间变量传递与动态SQL实现

1. 子Notebook(notebook_variable)改造:输出模板变量

子Notebook需要通过dbutils.notebook.exit()返回定义的SQL模板,这是Databricks中Notebook间传递输出的标准方式。

修改后的notebook_variable代码:

# 定义带占位符的SQL模板
variable = "Select * From {table}"
# 将变量作为Notebook输出返回给调用方
dbutils.notebook.exit(variable)

2. 主Notebook(notebook_main)实现动态逻辑

主Notebook需完成三个核心步骤:获取用户输入参数、调用子Notebook获取模板、生成动态SQL并执行。

步骤1:添加并获取Widget参数

先创建文本输入Widget接收用户传入的表/视图名,再读取参数值:

# 添加文本输入Widget,参数名为table,可设置默认值
dbutils.widgets.text("table", "global_temp.test2", "输入全局临时视图名")
# 获取用户传入的参数值
target_table = dbutils.widgets.get("table")

步骤2:调用子Notebook并捕获输出变量

使用dbutils.notebook.run()调用子Notebook,该方法会直接返回子Notebook通过exit()输出的内容:

# 调用子Notebook,第一个参数是子Notebook的路径(同一目录直接写文件名,否则写完整Workspace路径)
# 第二个参数是超时时间,单位为秒,可根据实际情况调整
sql_template = dbutils.notebook.run("notebook_variable", 60)

步骤3:替换占位符并执行动态SQL

用字符串format()方法替换模板中的占位符,生成最终可执行的SQL语句:

# 替换模板占位符,生成目标SQL
final_sql = sql_template.format(table=target_table)
# 执行SQL并获取结果DataFrame
result_df = spark.sql(final_sql)
# 展示结果(可根据需求选择其他输出方式)
result_df.display()

3. 关键注意事项

  • 子Notebook路径:调用时需确保路径正确,若子Notebook在/Workspace/YourName/Notebooks目录下,完整路径需写为"/Workspace/YourName/Notebooks/notebook_variable"。
  • 特殊字符处理:如果传入的表名包含特殊字符,可在替换时用反引号包裹,避免SQL语法错误:final_sql = sql_template.format(table=f"{target_table}")。
  • 超时设置:dbutils.notebook.run()的超时时间需根据子Notebook的实际执行时长调整,避免因超时导致调用失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:32:42