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

如何在Synapse Analytics中将文件复制到独立文件夹

解决Synapse Bronze到Silver层的文件夹结构调整问题

方法一:用Synapse管道原生活动实现(无需Notebook)

基于你现有Get Metadata + For Each的流程,只需添加创建文件夹的步骤,再调整目标文件路径即可:

  1. 调整Get Metadata活动:确保该活动获取Bronze层的Child items(子文件列表),后续循环将遍历这些文件项。
  2. 在For Each循环内添加Create Folder活动:
    • 配置文件夹路径为动态表达式:
      @concat('silver/', split(item().name, '.')[0])
      
      解释:split(item().name, '.')[0]会从带扩展名的文件名(如file1.avro)中提取纯文件名file1,拼接后得到silver/file1的文件夹路径。
  3. 修改复制/转换活动的目标路径:
    • 若使用Copy Activity:
      • 源数据集路径设为@concat('bronze/', item().name),指向Bronze层的对应Avro文件。
      • 目标数据集路径设为:
        @concat('silver/', split(item().name, '.')[0], '/', split(item().name, '.')[0], '.parquet')
        
        最终会生成silver/file1/file1.parquet的目标文件路径。
    • 若使用Data Flow:在目标数据集的路径配置中,同样使用上述动态表达式,将输出文件指向对应子文件夹。

方法二:修正Notebook动态创建文件夹的逻辑

如果偏好使用Notebook处理,检查并调整以下代码逻辑(以PySpark为例),确保能正确创建文件夹并写入文件:

# 从管道获取当前遍历的文件名参数(需在For Each调用Notebook时传递此参数)
file_name = dbutils.widgets.get("file_name")
# 提取不带扩展名的纯文件名
base_name = file_name.split('.')[0]

# 替换为你的存储容器路径
storage_root = "abfss://your-container@your-storage-account.dfs.core.windows.net/"
# 构建目标文件夹路径
target_folder = f"{storage_root}silver/{base_name}/"

# 检查文件夹是否存在,不存在则创建
if not dbutils.fs.exists(target_folder):
    dbutils.fs.mkdirs(target_folder)

# 读取Bronze层Avro文件
bronze_file_path = f"{storage_root}bronze/{file_name}"
df = spark.read.format("avro").load(bronze_file_path)

# 写入Silver层对应文件夹的Parquet文件,覆盖原有内容
target_file_path = f"{target_folder}{base_name}.parquet"
df.write.mode("overwrite").format("parquet").save(target_file_path)

在管道的For Each活动中,配置调用Notebook时传递参数file_name,参数值设为@item().name,确保Notebook能获取到当前循环的文件名。

注意事项

  • 确保Synapse使用的托管身份/服务主体对Silver层存储路径拥有创建文件夹和写入文件的权限。
  • 若使用Copy Activity,需确保目标数据集的文件路径设置为动态内容,而非固定值。
  • For Each循环的迭代项需选择Get Metadata活动输出的Child items,保证每个Bronze层文件都能被遍历处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:26:06