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

能否用Synapse Serverless Pool生成Parquet文件优化视图查询效率?

在Azure Synapse Serverless SQL Pool中生成Parquet文件的可行方案

核心结论

Serverless SQL Pool本身不支持直接通过SQL语句将查询结果写入Parquet文件(它是只读查询服务,无写入外部存储的原生能力),但可以结合Azure其他服务,以Serverless Pool为数据处理核心,实现定期生成Parquet文件的需求,同时保持低成本优势。

具体实现方案

方案1:Serverless Pool + Azure Data Factory(ADF)调度写入

这是最简洁的无代码/低代码方案,适合大多数场景:

  • 步骤1:在Serverless Pool中保留你的大型视图,或者直接编写聚合/关联多个外部表的SQL查询。
  • 步骤2:在ADF中创建一个Copy Activity:
    • 数据源选择「Azure Synapse Analytics (SQL Serverless)」,配置Serverless Pool的连接信息,输入要执行的SQL语句(比如SELECT * FROM dbo.your_large_view)。
    • 目标数据集选择「Azure Blob Storage」或「Azure Data Lake Storage Gen2」,格式设置为Parquet,指定输出文件的存储路径。
  • 步骤3:创建ADF管道的触发器(比如定时触发器,每天凌晨运行),自动执行数据导出任务。
  • 优势:无需编写代码,ADF按需付费,仅在任务运行时产生少量成本,Serverless Pool按查询扫描的数据量计费,整体成本远低于Spark Pool。

方案2:Serverless Pool + Azure Functions 自定义导出

适合需要更灵活处理逻辑的场景:

  • 思路:用Azure Functions定期触发,通过ODBC连接Serverless Pool执行查询,将结果转换为Parquet格式写入存储。
  • 示例Python函数代码:
    import pyodbc
    import pandas as pd
    import pyarrow as pa
    import pyarrow.parquet as pq
    from azure.storage.fs import AzureBlobFileSystem
    import os
    import azure.functions as func
    
    def main(mytimer: func.TimerRequest) -> None:
        # 从环境变量获取敏感配置
        conn_str = os.environ["SYNAPSE_SERVERLESS_CONN_STR"]
        storage_account = os.environ["STORAGE_ACCOUNT_NAME"]
        storage_key = os.environ["STORAGE_ACCOUNT_KEY"]
    
        # 连接Serverless SQL Pool并执行查询
        conn = pyodbc.connect(conn_str)
        query = "SELECT * FROM dbo.your_large_view"
        df = pd.read_sql(query, conn)
        conn.close()
    
        # 将结果写入Parquet到ADLS Gen2
        abfs = AzureBlobFileSystem(account_name=storage_account, account_key=storage_key)
        table = pa.Table.from_pandas(df)
        # 按日期生成唯一路径,避免文件覆盖
        output_path = f"abfs://your-container/output/{pd.Timestamp.now().strftime('%Y%m%d')}/data.parquet"
        pq.write_table(table, output_path, filesystem=abfs)
    
  • 配置:在Function的应用设置中添加Serverless Pool连接字符串、存储账户密钥等敏感信息,设置定时器触发规则(比如0 0 3 * * *每天凌晨3点运行)。
  • 优势:支持自定义数据转换逻辑,Function按执行时间和资源消耗计费,适合复杂场景。

后续配置

生成Parquet文件后,你可以在Serverless Pool中创建外部表指向该存储路径,供其他查询直接读取:

CREATE EXTERNAL TABLE dbo.generated_parquet_data
(
    -- 定义与Parquet文件匹配的列结构
    column1 INT,
    column2 VARCHAR(100),
    column3 DATE
)
WITH
(
    LOCATION = 'abfss://your-container/output/',
    DATA_SOURCE = your_storage_datasource,
    FILE_FORMAT = your_parquet_fileformat
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:25:44