如何使用Azure Data Factory将最新文件夹文件复制到现有表
解决方案:同步最新日期文件夹文件到现有表
一、Python 实现方案
- 核心逻辑:遍历年/月/日层级文件夹,定位最新日期目录,读取其中4个文件并追加到目标数据库表
- 代码示例(以MySQL+CSV文件为例):
import os import pandas as pd from sqlalchemy import create_engine from datetime import datetime # 替换为你的根文件夹路径 root_dir = "/data/year_month_day" latest_date = None latest_folder = None # 逐层遍历找最新日期文件夹 for year_dir in os.listdir(root_dir): if not year_dir.isdigit() or len(year_dir) != 4: continue year_path = os.path.join(root_dir, year_dir) for month_dir in os.listdir(year_path): if not month_dir.isdigit() or len(month_dir) != 2: continue month_path = os.path.join(year_path, month_dir) for day_dir in os.listdir(month_path): if not day_dir.isdigit() or len(day_dir) != 2: continue current_date = datetime(int(year_dir), int(month_dir), int(day_dir)) if not latest_date or current_date > latest_date: latest_date = current_date latest_folder = os.path.join(month_path, day_dir) if not latest_folder: print("未找到符合格式的日期文件夹") exit() # 连接数据库并同步文件 engine = create_engine('mysql+pymysql://用户名:密码@数据库地址/库名') for file in os.listdir(latest_folder): file_path = os.path.join(latest_folder, file) # 根据实际文件类型调整读取方法(如pd.read_excel、pd.read_json) df = pd.read_csv(file_path) # append模式追加数据到现有表,避免覆盖 df.to_sql('目标表名', engine, if_exists='append', index=False) print(f"已完成{latest_date.strftime('%Y-%m-%d')}文件夹内文件的同步")
- 关键注意点:
- 根据实际文件格式替换读取方法
- 数据库连接字符串需匹配自身环境
- 可添加校验逻辑,确保每个日期文件夹下恰好有4个目标文件
二、PowerShell 实现方案
- 核心逻辑:通过文件系统定位最新日期目录,使用bcp工具将文件导入SQL Server表
- 代码示例:
$rootDir = "D:\data\year_month_day" # 筛选并排序出最新的日期文件夹 $latestFolder = Get-ChildItem -Path $rootDir -Recurse -Directory | Where-Object { $dirs = $_.FullName.Split('\') $yearValid = $dirs[-3] -match '^\d{4}$' $monthValid = $dirs[-2] -match '^\d{2}$' $dayValid = $dirs[-1] -match '^\d{2}$' return $yearValid -and $monthValid -and $dayValid } | Sort-Object LastWriteTime -Descending | Select-Object -First 1 if (-not $latestFolder) { Write-Host "未找到有效日期文件夹" exit } # 配置SQL Server连接参数 $server = "SQL实例地址" $db = "目标库名" $table = "目标表名" $user = "用户名" $pwd = "密码" # 遍历导入文件夹内所有文件 foreach ($file in Get-ChildItem -Path $latestFolder.FullName -File) { # 根据文件格式调整bcp参数(如分隔符、编码) bcp "$db.dbo.$table" in "$($file.FullName)" -S $server -U $user -P $pwd -c -t "," } Write-Host "已完成最新文件夹 $($latestFolder.FullName) 的文件同步"
- 关键注意点:
- 确保bcp工具已加入系统环境变量
- 若表字段与文件列不匹配,需提前创建bcp格式文件
三、SSIS 可视化实现方案
- 核心步骤:
- 新建变量存储根文件夹路径、最新日期文件夹路径
- 使用
Foreach Loop Container遍历层级文件夹,通过脚本任务筛选出最新日期目录
- 使用
- 在
Data Flow Task中,用Flat File Source/Excel Source读取文件数据,通过OLE DB Destination追加到现有表
- 在
- 配置SQL Server Agent作业,设置每日自动执行调度
内容的提问来源于stack exchange,提问作者user21510438
相关产品推荐
相关产品推荐

