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

Azure Data Factory中OPENROWSET快照URL后缀报错求助

解决Azure Synapse OPENROWSET快照参数报错问题

问题分析

此前正常运行的查询突然报错,提示.csv@snapshot=*包含不允许的URL后缀,原因是Azure Synapse的语法校验规则更新,不再允许直接在OPENROWSET的BULK文件路径后拼接@snapshot=*这类快照参数。

解决方案

方法1:通过OPTIONS参数指定快照(推荐)

将快照参数移至OPENROWSET的OPTIONS配置中,同时确保指定正确的外部数据源:

SELECT * FROM OPENROWSET ( 
  BULK '/filepath.csv', 
  FORMAT = 'CSV',
  DATA_SOURCE = '你的外部数据源名称', -- 替换为实际数据源名
  OPTIONS = '{"snapshot": "*"}' -- 指定读取最新快照
) 
WITH( 
mshp_id INT, 
prog_name NVARCHAR(256), 
barrier_name NVARCHAR(256), 
days INT 
) AS load_clean_data

方法2:使用带快照的SAS URL

若需指定特定快照ID,生成包含快照参数的SAS URL,直接替换到BULK路径中:

SELECT * FROM OPENROWSET ( 
  BULK 'https://你的存储账户.blob.core.windows.net/容器名/filepath.csv?snapshot=具体快照ID', -- 替换为带快照的SAS URL
  FORMAT = 'CSV'
) 
WITH( 
mshp_id INT, 
prog_name NVARCHAR(256), 
barrier_name NVARCHAR(256), 
days INT 
) AS load_clean_data

方法3:验证外部数据源权限

确认外部数据源的托管身份或SAS权限仍可访问Blob存储的快照,同时检查数据源的LOCATION是否正确指向目标容器,而非单个文件。

完整修改后代码示例

IF EXISTS (SELECT * FROM sys.tables t 
    JOIN sys.schemas s ON (t.schema_id = s.schema_id) 
    WHERE s.name = 'clean' AND t.name = 'barriers') 
EXEC('DROP EXTERNAL TABLE [clean].[barriers]')  

CREATE EXTERNAL TABLE [clean].[barriers]
WITH 
( 
   LOCATION = 'clean/synapse/barriers',
   DATA_SOURCE = '你的外部数据源名称', -- 替换为实际数据源名
   FILE_FORMAT = [SynapseParquetFormat] 
) 
AS  

SELECT * FROM OPENROWSET ( 
  BULK '/filepath.csv', 
  FORMAT = 'CSV',
  DATA_SOURCE = '你的外部数据源名称',
  OPTIONS = '{"snapshot": "*"}'
) 
WITH( 
mshp_id INT, 
prog_name NVARCHAR(256), 
barrier_name NVARCHAR(256), 
days INT 
) AS load_clean_data

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:01:15