JDBC 和 ODBC 驱动器以及配置参数

可将商业智能 (BI) 工具连接到 Azure Databricks 群集和 SQL 终结点,以查询表中的数据。 本文介绍如何获取 JDBC 和 ODBC 驱动程序以及配置参数以连接到 Azure Databricks 群集和 SQL 终结点。

有关特定于工具的连接说明,请参阅将 BI 工具连接到 Azure Databricks将 BI 工具连接到 SQL 终结点

权限要求

使用 JDBC 或 ODBC 访问计算资源所需的权限取决于是连接到 Azure Databricks 群集还是 SQL 终结点。

群集要求

若要访问群集,你必须拥有“可附加到”权限

如果你连接到已终止的群集,并且拥有“可重启”权限,则群集会重启。

SQL 终结点要求

若要访问 SQL 终结点,你必须拥有“可以使用”权限

如果你连接到已停止的终结点,并且拥有“可以使用”权限,则 SQL 终结点会启动。

准备连接 BI 工具

本部分介绍准备连接到 BI 工具时通常应遵循的步骤:

步骤 1:下载并安装 JDBC 或 ODBC 驱动程序

对于某些 BI 工具,可使用 JDBC 或 ODBC 驱动程序连接到 Azure Databricks 计算资源。

  1. 转到 Databricks JDBCODBC 驱动程序下载页面并下载。 对于 ODBC,请选择适合你的操作系统的驱动程序。
  2. 安装驱动程序。 对于 JDBC,提供了不需要安装的 JAR。 对于 ODBC,将为所选平台提供一个安装包。

步骤 2:收集 JDBC 或 ODBC 连接信息

若要配置 JDBC 或 ODBC 驱动程序,必须从 Azure Databricks 收集连接信息。 以下是 JDBC 或 ODBC 驱动程序可能需要的一些参数:

参数
Authentication 请参阅用户名和密码验证
主机、端口、HTTP 路径、JDBC URL 请参阅获取服务器主机名、端口、HTTP 路径和 JDBC URL

对于 ODBC 的 JDBC 和 DSN 配置,通常会在 httpPath 中指定以下内容:

参数
Spark 服务器类型 Spark Thrift 服务器
架构/数据库 default
身份验证机制 AuthMech 请参阅用户名和密码验证
Thrift 传输 http
SSL 1

用户名和密码验证

本部分介绍了如何收集凭据,以便向 Azure Databricks 计算资源证明 BI 工具的身份。

配置从 BI 工具到 Azure Databricks 资源的身份验证时,可设置“用户名”和“密码”字段,也可直接使用 Azure Active Directory 身份验证。 将用户名设置为字符串 token,并将密码设置为令牌,如下所示:

获取服务器主机名、端口、HTTP 路径和 JDBC URL

检索 JDBC 和 ODBC 参数的过程取决于是使用 Azure Databricks 群集还是 SQL 终结点。

获取群集的连接详细信息

  1. 单击边栏中的 “计算”图标“计算”。

  2. 单击某个群集。

  3. 单击“高级选项”开关。

  4. 单击“JDBC/ODBC”选项卡。

    JDBC-ODBC 选项卡

  5. 复制 BI 工具所需的参数。

获取 SQL 终结点的连接详细信息

  1. 单击边栏中的 终结点图标“SQL 终结点”。

  2. 单击一个终结点。

  3. 单击“连接详细信息”选项卡。

    连接详细信息

  4. 复制 BI 工具所需的参数。

配置 JDBC URL

配置 JDBC URL 的步骤取决于你使用的是 Azure Databricks 群集还是 SQL 终结点。

为群集配置 JDBC URL

个人访问令牌身份验证

在以下 URL 中,将 <personal-access-token> 替换为你在用户名和密码验证中创建的令牌。 例如:

jdbc:spark://<server-hostname>:443/default;transportMode=http;ssl=1;httpPath=sql/protocolv1/o/0/xxxx-xxxxxx-xxxxxxxx;AuthMech=3;UID=token;PWD=<personal-access-token>

Azure Active Directory 令牌身份验证

  1. 在以下 URL 中

     jdbc:spark://<server-hostname>:443/default;transportMode=http;ssl=1;httpPath=sql/protocolv1/o/0/xxxx-xxxxxx-xxxxxxxx;AuthMech=3;UID=token;PWD=<personal-access-token>
    

    删除现有的身份验证参数 (AuthMech, UID, PWD):

     AuthMech=3;UID=token;PWD=<personal-access-token>
    
  2. 添加以下参数,将 <Azure AD token> 替换为你在用户名和密码验证中获得的 Azure AD 令牌。

    AuthMech=11;Auth_Flow=0;Auth_AccessToken=<Azure AD token>
    

另请参阅刷新 Azure Active Directory 令牌

为 SQL 终结点配置 JDBC URL

<personal-access-token> 替换为你在用户名和密码验证中创建的令牌。 例如:

jdbc:spark://<server-hostname>:443/default;transportMode=http;ssl=1;httpPath=sql/protocolv1/o/0/xxxx-xxxxxx-xxxxxxxx;AuthMech=3;UID=token;PWD=<personal-access-token>

配置本机查询语法的连接

JDBC 和 ODBC 驱动程序接受 ANSI SQL-92 方言中的 SQL 查询,并将查询转换为 Spark SQL。 如果应用程序直接生成 Spark SQL,或者应用程序使用特定于 Azure Databricks 的任何非 ANSI SQL-92 标准 SQL 语法,Databricks 建议你将 ;UseNativeQuery=1 添加到连接配置中。 有了该设置,驱动程序就会将 SQL 查询逐字传递到 Azure Databricks。

配置 Simba ODBC 驱动程序的 ODBC 数据源名称

数据源名称 (DSN) 配置包含用于与特定数据库通信的参数。 BI 工具(如 Tableau)通常会提供一个用户界面,用于输入这些参数。 如果你必须自行安装和管理 Simba ODBC 驱动程序,则可能需要创建配置文件,并允许驱动程序管理器(Windows 上的 ODBC 数据源管理器和 Unix 上的 unixODBC/iODBC)来访问这些配置文件。 创建两个文件:/etc/odbc.ini/etc/odbcinst.ini

本部分内容:

/etc/odbc.ini

用户名和密码身份验证

  1. /etc/odbc.ini 的内容设置为:

    [Databricks-Spark]
    Driver=Simba
    Server=<server-hostname>
    HOST=<server-hostname>
    PORT=<port>
    SparkServerType=3
    Schema=default
    ThriftTransport=2
    SSL=1
    AuthMech=3
    UID=token
    PWD=<personal-access-token>
    HTTPPath=<http-path>
    
  2. <personal-access-token> 设置为你在用户名和密码验证中检索到的令牌。

  3. 将服务器、端口和 HTTP 参数设置为你在获取服务器主机名、端口、HTTP 路径和 JDBC URL 中检索到的参数。

Azure Active Directory 令牌身份验证

  1. /etc/odbc.ini 的内容设置为:

    [Databricks-Spark]
    Driver=Simba
    Server=<server-hostname>
    HOST=<server-hostname>
    PORT=443
    HTTPPath=<http-path>
    SparkServerType=3
    Schema=default
    ThriftTransport=2
    SSL=1
    AuthMech=11
    Auth_Flow=0
    Auth_AccessToken=<Azure AD token>
    
  2. <Azure AD token> 设置为你在用户名和密码验证中检索到的 Azure Active Directory 令牌。

  3. 将服务器、端口和 HTTP 参数设置为你在获取服务器主机名、端口、HTTP 路径和 JDBC URL 中检索到的参数。

另请参阅刷新 Azure Active Directory 令牌

/etc/odbcinst.ini

/etc/odbcinst.ini 的内容设置为:

[ODBC Drivers]
Simba = Installed
[Simba Spark ODBC Driver 64-bit]
Driver = <driver-path>

根据在步骤 1 下载驱动程序时选择的操作系统设置 <driver-path>

  • MacOs /Library/simba/spark/lib/libsparkodbc_sbu.dylib
  • Linux (64-bit) /opt/simba/spark/lib/64/libsparkodbc_sb64.so
  • Linux (32-bit) /opt/simba/spark/lib/32/libsparkodbc_sb32.so

配置 ODBC 配置文件的路径

在环境变量中指定两个文件的路径,以便驱动程序管理器可以使用它们:

export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc/odbcinst.ini
export SIMBASPARKINI=<simba-ini-path>/simba.sparkodbc.ini # (Contains the configuration for debugging the Simba driver)

其中,<simba-ini-path>

  • MacOS /Library/simba/spark/lib
  • Linux (64-bit) /opt/simba/sparkodbc/lib/64
  • Linux (32-bit) /opt/simba/sparkodbc/lib/32

刷新 Azure Active Directory 令牌

Azure Active Directory 令牌在 1 小时后过期。 如果未使用 refresh_token 来刷新访问令牌,则必须手动将该令牌替换为新令牌。 本部分介绍了如何在不中断连接的情况下以编程方式刷新现有会话的令牌。

  1. 请按照刷新访问令牌中的步骤进行操作。
  2. 按照下面的方式更新令牌:
    • JDBC:使用 Auth_AccessToken 的新值调用 java.sql.Connection.setClientInfo
    • ODBC:使用 Auth_AccessToken 的新值针对 SQL_ATTR_CREDENTIALS 调用 SQLSetConnectAttr

疑难解答

请参阅排查 JDBC 和 ODBC 连接问题

另请参阅

用于 Python SQL Databricks 连接器连接 Python 和 pyodbc Azure Databricks