使用 Linux 上的 SQL Server 上的 PolyBase 连接到 ODBC 数据源

适用于: SQL Server 2025 (17.x) 预览版

本文介绍如何将 PolyBase 服务与 Linux 上的 SQL Server 配合使用。

从 SQL Server 2025 (17.x) 预览版开始,Linux 上的部署可以使用 PolyBase 的 ODBC 数据源。 这使你可以自带驱动程序(BYOD)。 在 Linux 上,此功能的工作方式与它在 Windows 上的工作原理类似。 有关详细信息,请参阅 配置 PolyBase 以使用 ODBC 泛型类型访问外部数据

谨慎

自带驾驶员(BYOD)模型涉及客户和驾驶员提供商需要承担的风险。 Microsoft不负责第三方驱动程序可能导致的任何问题。

例子

在 Linux 上安装

以下示例演示 Ubuntu 上的 SQL ODBC 驱动程序。

  1. 添加Microsoft存储库:

    1. 导入 Microsoft GPG 密钥

      curl https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
      
    2. 将Microsoft存储库添加到系统

      curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
      
  2. 更新包列表

    sudo apt update
    
  3. 安装 ODBC 驱动程序

    安装最新版本的 ODBC 驱动程序。 以下示例安装版本 18。

    sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18
    

安装将创建以下文件:

文件 DESCRIPTION
/etc/odbcinst.ini 驱动程序名称、说明和版本信息。
/etc/odbc.ini DNS 名称、加密和其他规范。

需要基于驱动程序的属性和规范创建 odbc.ini 文件。 多个驱动程序共享相同的 odbc.iniodbcinst.ini 文件,其中包含多个条目。

示例文件

示例 odbc.ini

在此示例中,driver_name 必须与 odbcinst.ini 中的名称匹配。

[MyDSN]
Driver = driver_name
Server = your_server_name
Database = your_database_name
Trusted_Connection = yes

Sybase 示例 odbcinst.ini

[ODBC Drivers]
Devart ODBC Driver for ASE=installed
[Devart ODBC Driver for ASE]
Driver=/usr/share/devart/odbcase/libdevartodbcase.3.5.0.so

Sybase 示例 odbc.ini

[ODBC Data Sources]
DEVART_ASE=Devart ODBC Driver for ASE
[DEVART_ASE]
Driver=Devart ODBC Driver for ASE
Data Source=database_server_ip
Port=5000
Database=master
QuotedIdentifier=1

有关受支持参数的完整列表,请查看驱动程序的提供程序文档。

示例查询

驱动程序设置完成后,可以使用数据库范围的凭据、外部数据源和其他 PolyBase。

例如:

CREATE DATABASE SCOPED CREDENTIAL dsc_Sybase
    WITH IDENTITY = '<user>', SECRET = '<password>';
GO

CREATE EXTERNAL DATA SOURCE EDS_Sybase
WITH (
    LOCATION = 'odbc://<servername>:<port>',
    PUSHDOWN = ON, --- optional
    CONNECTION_OPTIONS = 'DSN=DEVART_ASE;DRIVER=Devart ODBC Driver for ASE',
    CREDENTIAL = dsc_Sybase
);
GO

CREATE EXTERNAL TABLE T_EXT
(
    C1 INT
)
WITH (
    DATA_SOURCE = [EDS_SYBASE],
    LOCATION = N'TEST.DBO.T'
);
GO

SELECT * FROM T_EXT;
GO

局限性

Linux 上的 PolyBase for SQL Server 使用外部服务安全地隔离和加载驱动程序。 安装 PolyBase 包 (mssql-server-polybase) 时,默认情况下会启动此服务。

该服务使用默认端口号 25100。 如果此端口正在使用,则失败并显示以下消息:

Failed to bind port "127.0.0.1:25100"

可以在 PolyBase 的日志文件中找到此消息,网址为: /var/opt/mssql-polybase-ees/log/

若要修复,请自定义服务以使用可用端口并重启。

  1. 查找和编辑 /var/opt/mssql/binn/PolyBase/DMs.exe.config 文件。 找到密钥项 EESPort,并分配新端口。

  2. 查找和编辑 /var/opt/mssql/binn/PolyBase/DWEngineService.exe.config 文件。 找到密钥项 EESPort,并分配新端口。

  3. 运行以下命令以重启服务,告知新端口:

    sudo /opt/mssql/lib/dotnet6/dotnet/opt/mssql/lib/ExternalExecutionService.dll -port <newportnumber>