从ADLS Gen2的CSV文件向SQL复制数据时填充created on列
解决ADLS Gen2 CSV数据复制到SQL表时填充
created on列的方法 以下是两种常用的实现方案:
方案1:通过Azure Data Factory(或Synapse Pipeline)配置
这是云原生低代码实现方式,适合定期批量同步场景:
- 新建复制活动,源端选择ADLS Gen2的CSV数据集,目标端选择SQL表数据集
- 进入复制活动的映射标签页,先完成CSV现有列与SQL表对应列的匹配
- 手动添加
created on列,将其映射到目标表的同名列,并设置动态内容:- 需要当前UTC日期时间:
utcnow() - 需要本地日期时间(如中国时区):
convertTimeZone(utcnow(), 'UTC', 'China Standard Time') - 仅需日期部分:
formatDateTime(utcnow(), 'yyyy-MM-dd')
- 需要当前UTC日期时间:
- 保存并运行管道,数据复制时会自动为
created on列填充指定格式的当前日期/时间
方案2:使用SQL脚本结合BULK INSERT
适合一次性数据导入或需要自定义逻辑的场景:
- 创建与CSV列结构完全匹配的临时表:
CREATE TABLE #TempCSVData ( -- 按CSV列顺序定义对应字段,示例: user_id INT, user_name VARCHAR(100), email VARCHAR(200) )
- 通过BULK INSERT将ADLS Gen2的CSV数据导入临时表(需提前配置ADLS访问凭据):
BULK INSERT #TempCSVData FROM 'abfss://your-container@your-storage-account.dfs.core.windows.net/path/to/your/data.csv' WITH ( FORMAT = 'CSV', FIRSTROW = 2, -- 若CSV包含表头则跳过第一行 FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', CREDENTIAL = 'ADLSGen2Credential' -- 提前创建的存储凭据 )
- 将临时表数据插入目标SQL表,同时为
created on列填充当前日期:
INSERT INTO YourTargetTable (user_id, user_name, email, [created on]) SELECT user_id, user_name, email, GETDATE() -- 用CAST(GETDATE() AS DATE)仅保留日期部分 FROM #TempCSVData
- 清理临时表:
DROP TABLE #TempCSVData
注意:使用BULK INSERT时,需确保SQL Server实例有权限访问ADLS Gen2,可通过创建存储凭据(如SAS密钥或服务主体)实现。
内容的提问来源于stack exchange,提问作者Rajat Saha
相关产品推荐
相关产品推荐

