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

将Parquet文件导入Azure Synapse无服务器数据库遇阻求助

问题分析与解决方案

核心原因

Azure Synapse的无服务器SQL数据库无法作为Copy Data活动的目标数据源。这是因为无服务器SQL池的设计定位是通过外部表直接查询存储在ADLS/Blob中的文件,本身并不提供传统数据库的持久化存储能力,Copy Data活动的目标仅支持专用SQL池、Azure SQL DB等具备数据存储能力的数据源。

可行解决方案

根据你的需求(保留无服务器SQL池、满足性能成本要求),推荐以下两种方案:

方案1:创建外部表直接映射Parquet文件(推荐)

这是无服务器SQL池的原生用法,无需导入数据,直接通过外部表查询ADLS中的Parquet文件,完全符合性能和成本最优的需求:

  1. 在MyDB中创建外部数据源,指向存储Parquet文件的ADLS Gen2路径:
    CREATE EXTERNAL DATA SOURCE MyADLSParquetSource
    WITH (
        LOCATION = 'abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<parquet-folder-path>',
        TYPE = HADOOP
    );
    
  2. 创建Parquet格式的外部文件格式:
    CREATE EXTERNAL FILE FORMAT ParquetFormat
    WITH (
        FORMAT_TYPE = PARQUET,
        DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec'
    );
    
  3. 创建外部表关联上述资源(替换为你的列定义):
    CREATE EXTERNAL TABLE dbo.MyParquetExternalTable
    (
        Column1 INT,
        Column2 VARCHAR(100),
        Column3 DATE
    )
    WITH (
        LOCATION = '<relative-path-to-parquet-files>',
        DATA_SOURCE = MyADLSParquetSource,
        FILE_FORMAT = ParquetFormat
    );
    

创建完成后,直接查询dbo.MyParquetExternalTable即可访问Parquet文件中的数据。

方案2:将数据物化到无服务器SQL池的本地表(仅适用于小数据集)

如果必须将数据导入到无服务器SQL池的本地表(注意:无服务器本地表单表最大支持1TB,且性能不如外部表),可以通过以下方式实现:

  • 使用数据流动:在Synapse管道中创建数据流动活动,源选择ADLS Gen2的Parquet文件,目标选择无服务器SQL池的本地表(需提前在MyDB中创建好表结构)。
  • 使用Execute SQL任务调用存储过程:
    1. 在MyDB中创建存储过程,通过OPENROWSET读取Parquet数据并插入本地表:
      CREATE PROCEDURE dbo.ImportParquetToLocalTable
      AS
      BEGIN
          INSERT INTO dbo.MyLocalTable (Column1, Column2, Column3)
          SELECT Column1, Column2, Column3
          FROM OPENROWSET(
              BULK 'abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<parquet-folder-path>/*.parquet',
              FORMAT = 'PARQUET'
          ) AS [result];
      END
      
    2. 在管道中添加Execute SQL任务,调用该存储过程。

关键注意事项

  • 确保Synapse工作区的托管标识(MSI)或用于访问ADLS的服务主体拥有ADLS Gen2容器的Blob存储贡献者或Blob存储读取者权限。
  • 无服务器SQL池的最优实践是使用外部表查询文件,避免将数据导入本地表,这样可以节省存储成本并利用无服务器的弹性查询能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:57:25