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

能否在Azure Synapse无服务器SQL池用T-SQL结合多源数据查询?

在Azure Synapse无服务器SQL池中合并查询DataLake Parquet与Azure SQL数据(无需复制表)

完全可以实现,无需预先复制Azure SQL的表到Synapse,直接通过T-SQL在同一脚本中完成两类数据源的合并查询。核心是通过**外部数据源(External Data Source)**连接Azure SQL数据库,再结合OPENROWSET读取Parquet数据进行关联。

步骤1:创建指向Azure SQL的外部数据源

首先在Synapse无服务器SQL池中创建外部数据源,用于连接你的Azure SQL数据库:

-- 若使用SQL身份验证,先创建数据库范围凭据
CREATE DATABASE SCOPED CREDENTIAL AzureSQL_Credential
WITH IDENTITY = '<azure-sql-用户名>',
SECRET = '<azure-sql-密码>';

-- 创建外部数据源
CREATE EXTERNAL DATA SOURCE AzureSQL_ExternalSource
WITH (
    LOCATION = 'sqlserver://<你的Azure SQL服务器名>.database.windows.net',
    CREDENTIAL = AzureSQL_Credential, -- 若用Azure AD托管身份访问,可省略此参数(需提前给托管身份授予Azure SQL的db_datareader角色)
    TYPE = RDBMS
);

步骤2:合并查询Parquet与Azure SQL数据

直接在同一查询中,用OPENROWSET读取DataLake的Parquet文件,同时引用Azure SQL的表进行关联:

SELECT
    p.customer_id,
    p.order_amount,
    sql_c.customer_name,
    sql_c.customer_email
FROM
    -- 读取DataLake中的Parquet文件
    OPENROWSET(
        BULK 'https://<你的存储账户>.dfs.core.windows.net/<容器名>/orders/*.parquet',
        FORMAT = 'PARQUET'
    ) AS p
INNER JOIN
    -- 直接引用Azure SQL中的表(四部分命名:外部数据源.数据库名.架构名.表名)
    AzureSQL_ExternalSource.<你的Azure SQL数据库名>.dbo.customers AS sql_c
ON
    p.customer_id = sql_c.customer_id
-- 可添加过滤、聚合等复杂逻辑
WHERE
    p.order_date >= '2024-01-01';

进阶:用OPENQUERY优化跨数据源查询

如果需要在Azure SQL端先执行复杂过滤/聚合(减少跨网络传输的数据量),可以用OPENQUERY:

SELECT
    p.order_id,
    p.order_amount,
    sql_filtered.customer_name
FROM
    OPENROWSET(
        BULK 'https://<你的存储账户>.dfs.core.windows.net/<容器名>/orders/*.parquet',
        FORMAT = 'PARQUET'
    ) AS p
JOIN
    OPENQUERY(
        AzureSQL_ExternalSource,
        'SELECT customer_id, customer_name FROM dbo.customers WHERE region = ''North America'''
    ) AS sql_filtered
ON
    p.customer_id = sql_filtered.customer_id;

关键注意事项

  • 权限配置:确保Synapse无服务器SQL池的IP被加入Azure SQL的防火墙允许列表,或者使用Azure AD托管身份避免IP限制
  • 性能优化:尽量在数据源端过滤数据(比如Parquet用路径分区过滤,Azure SQL用OPENQUERY提前筛选),减少跨数据源的数据传输量
  • 数据类型兼容性:注意Parquet和Azure SQL之间的数据类型映射,避免关联或查询时出现类型错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:03:26