SQL SERVER中获取外部数据的两种方法!

王者杯·14天创作挑战营·第2期 10w+人浏览 147人参与

在 SQL Server Management Studio (SSMS) 中,​​外部数据源(External Data Source)​​ 和 ​​链接服务器(Linked Server)​​ 都是实现跨数据源访问的机制,但设计目标、技术架构和应用场景有显著差异。以下是详细对比与使用指南:


⚙️ 一、核心功能差异

​特性​​外部数据源 (External Data Source)​​链接服务器 (Linked Server)​
​技术基础​PolyBase 引擎(集成 Hadoop、对象存储等大数据生态)OLE DB/ODBC 驱动(传统关系型数据库协议)
​适用数据源​Hadoop、Azure Blob、S3、Oracle、Teradata 等SQL Server、MySQL、Oracle、Excel 等
​查询方式​需定义外部表(CREATE EXTERNAL TABLE直接通过四部分名称访问([链接服务器].库.表
​事务支持​仅查询(无 DML 操作)支持分布式事务(如 BEGIN DISTRIBUTED TRANSACTION
​性能优化​支持谓词下推、列裁剪等大数据优化依赖 OLE DB 驱动性能,可能需全量数据传输

🛠️ 二、外部数据源使用步骤(以 PolyBase 连接 SQL Server 为例)

  1. ​启用 PolyBase 功能​
    通过 SSMS 执行:

    -- 启用 PolyBase
    EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1;
    RECONFIGURE;
  2. ​创建数据库主密钥与凭据​

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword!';
    CREATE DATABASE SCOPED CREDENTIAL SQL_Cred  
    WITH IDENTITY = 'sa', SECRET = 'RemoteServerPassword';
  3. ​定义外部数据源​

    CREATE EXTERNAL DATA SOURCE RemoteSQLServer
    WITH (
      LOCATION = 'sqlserver://192.168.1.100:1433', -- 目标服务器地址
      CONNECTION_OPTIONS = 'Provider=MSOLEDBSQL;',
      CREDENTIAL = SQL_Cred
    );
  4. ​创建外部表映射​

    CREATE EXTERNAL TABLE dbo.RemoteEmployees (
      EmpID INT,
      Name VARCHAR(50)
    )
    WITH (
      DATA_SOURCE = RemoteSQLServer, -- 指向定义的数据源
      SCHEMA_NAME = 'HR',
      OBJECT_NAME = 'Employees'
    );
  5. ​查询外部数据​

    SELECT * FROM dbo.RemoteEmployees WHERE EmpID > 100;

​注意​​:若连接失败,需检查目标服务器 TCP/IP 协议是否启用(通过 SQL Server 配置管理器)。


🔗 三、链接服务器使用步骤(以连接 MySQL 为例)

  1. ​配置 ODBC 数据源​

    • 在 Windows 中创建系统 DSN(如 MySQL_DSN),指定 MySQL 驱动、IP、端口、数据库。
  2. ​在 SSMS 中创建链接服务器​

    EXEC sp_addlinkedserver 
      @server = 'MySQL_Link', 
      @srvproduct = 'MySQL',
      @provider = 'MSDASQL',
      @datasrc = 'MySQL_DSN'; -- 指向 ODBC 数据源名称
  3. ​配置登录映射​

    EXEC sp_addlinkedsrvlogin 
      @rmtsrvname = 'MySQL_Link',
      @useself = 'FALSE',
      @rmtuser = 'mysql_user',
      @rmtpassword = 'password';
  4. ​执行跨服务器查询​

    SELECT * FROM MySQL_Link...customers;

⚖️ 四、典型场景选择建议

​场景​​推荐方案​​原因​
大数据分析(TB 级)外部数据源PolyBase 支持并行查询优化,减少网络传输
实时事务操作(如订单系统)链接服务器支持分布式事务,确保 ACID 特性
混合云环境(Azure + 本地)外部数据源原生集成 Azure Blob、Data Lake 等云服务
异构数据库(Oracle 到 SQL)链接服务器成熟度高,兼容性强,可通过 ODBC/OLE DB 连接多种数据库

⚠️ 五、常见问题与解决

  1. ​连接超时​

    • ​外部数据源​​:检查防火墙是否开放端口,目标服务是否运行(如 Hadoop YARN)。
    • ​链接服务器​​:确认 ODBC 驱动版本兼容性,测试 tnspingtelnet 验证网络连通性。
  2. ​权限错误​

    • 两者均需确保凭据正确,且目标库授予了查询权限(如 MySQL 的 GRANT SELECT)。
  3. ​性能低下​

    • ​链接服务器​​:启用 OPENQUERY 减少数据传输(例:SELECT * FROM OPENQUERY(MySQL_Link, 'SELECT * FROM large_table'))。

💎 总结

  • ​外部数据源​​ 是面向大数据集成的轻量级方案,适合只读分析场景,需配合 PolyBase 使用。
  • ​链接服务器​​ 是通用型跨数据库访问方案,支持事务操作,但需依赖 OLE DB/ODBC 中间层。
    根据数据规模、实时性需求和架构复杂度灵活选择,二者可并存于同一 SQL Server 实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值