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

Azure Synapse复制Parquet数据时提示'FORMAT'附近语法错误

问题背景

在Azure Synapse中执行数据复制任务,目标是将Parquet格式源数据做字段转换后加载至专用SQL池表,运行时触发如下报错:

目标“Move InvItemDist to DP”操作失败:故障发生在'Source'端。
ErrorCode=SqlOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=数据库操作失败,返回错误:'Incorrect syntax near 'FORMAT'.',Source=,''Type=System.Data.SqlClient.SqlException,Message=Incorrect syntax near 'FORMAT'.,Source=.Net SqlClient Data Provider,SqlErrorNumber=102,Class=15,ErrorCode=-2146232060,State=1,Errors=[{Class=15,Number=102,State=1,Message=Incorrect syntax near 'FORMAT'.,},],'

故障触发时使用的源查询SQL如下:

SELECT 
A.[NDC]
, A.[ProductID]
, A.[Customer_Site]
, A.[ZipFileName]

FROM 
(
    SELECT
        DISTINCT
            [NDC]
            , [ProductID]
            , [Customer_Site]
            , LEFT
                (
                    SUBSTRING([ZipFileName], NULLIF(CHARINDEX('-', [ZipFileName], NULLIF(CHARINDEX('-', [ZipFileName]), 0) + 1), 0) + 1, LEN([ZipFileName]))
                    , LEN(SUBSTRING([ZipFileName], NULLIF(CHARINDEX('-', [ZipFileName], NULLIF(CHARINDEX('-', [ZipFileName]), 0) + 1), 0) + 1, LEN([ZipFileName]))) - 4
                ) AS [ZileFileOrder]
            , [ZipFileName]
            , ROW_NUMBER() OVER (PARTITION BY [NDC], [ProductID], [Customer_Site] 
                    ORDER BY LEFT
                (
                    SUBSTRING([ZipFileName], NULLIF(CHARINDEX('-', [ZipFileName], NULLIF(CHARINDEX('-', [ZipFileName]), 0) + 1), 0) + 1, LEN([ZipFileName]))
                    , LEN(SUBSTRING([ZipFileName], NULLIF(CHARINDEX('-', [ZipFileName], NULLIF(CHARINDEX('-', [ZipFileName]), 0) + 1), 0) + 1, LEN([ZipFileName]))) - 4
                ) DESC) AS UN

    FROM
        OPENROWSET(
            BULK 'https://stonexiacctolleson3154ba.dfs.core.windows.net/fs-tolleson/InvItemDist - Fact/2022/06/15/*.parquet',
            FORMAT = 'PARQUET'
        ) AS [result]
) AS A
WHERE A.[UN] = 1
故障根因

报错核心是SQL执行引擎和语法不匹配:

  • 你写的带FORMAT = 'PARQUET'参数的OPENROWSET语法,是*Azure Synapse无服务器SQL池(Serverless SQL Pool)*专属的原生语法,仅在无服务器SQL池环境下可被解析执行,用于直接读取ADLS Gen2存储上的Parquet/CSV/Delta Lake格式文件。
  • 当前复制任务的源端查询实际提交到了*专用SQL池(Dedicated SQL Pool)*执行,专用SQL池的T-SQL解析器不识别OPENROWSET语法中的FORMAT关键字,直接抛出102号语法错误。
修复方案

可根据实际架构选择以下任意一种方案修复:

  • 调整复制活动源端连接配置:将源查询的执行环境从专用SQL池切换为无服务器SQL池端点,提前给无服务器SQL池配置目标ADLS Gen2存储的访问权限(支持托管身份、SAS令牌、存储账户密钥三种授权方式,给对应身份分配存储Blob数据读取/参与者权限即可),原有SQL代码无需修改即可正常执行,查询结果可直接作为复制源写入目标专用表。
  • 保留专用SQL池作为执行环境:放弃直接用OPENROWSET读取Parquet的写法,两种实现路径可选:
    • 将复制活动源类型直接配置为Parquet格式,指向ADLS Gen2上的对应文件路径,字段截取、分组去重、取Top1记录的转换逻辑放在复制活动的映射转换/数据流环节完成,无需写SQL读文件。
    • 在专用SQL池中创建指向ADLS Parquet路径的外部表(指定格式为Parquet),将原有SQL中OPENROWSET部分替换为对该外部表的查询,逻辑无需调整即可在专用SQL池内执行。
  • 校验管道配置:如果是在Synapse管道内配置的复制活动,检查源端的链接服务配置,确认没有把自定义SQL查询错误关联到专用SQL池的连接上,避免语法提交到不兼容的引擎执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:54:22