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
相关产品推荐
相关产品推荐

