如何将Azure Synapse Notebook变量传递至管道复制数据任务?
Azure Synapse Notebook变量传递至Azure管道组件的实现方法
方法一:通过Notebook输出直接映射为管道变量
这是最直接的方式,利用Notebook的退出输出将变量传递给管道:
- 修改Notebook代码,在变量定义后添加退出输出语句:
testvar = '6/26/2023' # 将变量以键值对JSON格式输出,方便管道解析 mssparkutils.notebook.exit(f'{{"testvar": "{testvar}"}}') - 在Azure管道的Notebook任务中,切换到输出变量标签:
- 添加一个自定义变量(例如
notebookTestVar) - 设置变量值为
@json(activity('你的Notebook任务名称').output.exitValue).testvar
- 添加一个自定义变量(例如
- 在复制数据任务中引用该变量:
- 如需在SQL查询中使用,直接通过动态内容插入,示例:
SELECT * FROM source_table WHERE date_column = '@{variables('notebookTestVar')}' - 如需绑定到数据集参数,直接选择对应的管道变量即可。
- 如需在SQL查询中使用,直接通过动态内容插入,示例:
方法二:将变量写入存储后通过Lookup任务读取
适合需要多个任务共享变量的场景:
- 在Notebook中将变量值写入ADLS Gen2的文本文件:
testvar = '6/26/2023' # 写入到指定存储路径,覆盖已有文件 mssparkutils.fs.put('/your-storage-path/testvar.txt', testvar, overwrite=True) - 在管道中添加Lookup任务:
- 数据源选择刚才写入的文本文件,配置好连接
- 设置查询模式为“读取整个文件内容”
- 将Lookup的输出转为管道变量:
- 添加管道变量
lookupTestVar,值设为@activity('你的Lookup任务名称').output.firstRow.Content
- 添加管道变量
- 在复制数据任务中,通过
@variables('lookupTestVar')引用该变量即可。
注意事项
- 确保Notebook使用的Spark权限能访问存储(如果用方法二)
- 动态内容引用变量时,注意SQL语句的字符串格式,日期类型可能需要额外转换(例如转为
yyyy-MM-dd格式避免解析错误)
内容的提问来源于stack exchange,提问作者user3486773
相关产品推荐
相关产品推荐

