Поделиться через


Databricks JDBC Driver (OSS)

Внимание

Этот драйвер находится в общедоступной предварительной версии и будет доступен как открытый исходный код, когда он станет общедоступным (GA).

Databricks JDBC (OSS), последняя версия драйвера, позволяет подключать такие средства, как DataGrip, DBeaverи SQL Workbench/J к Azure Databricks через JDBC, стандартную спецификацию для доступа к системам управления базами данных.

Этот драйвер реализовал API JDBC и предоставляет основные функции, включая OAuth, Cloud Fetch и такие функции, как прием томов каталога Unity. Он выполняет собственный режим запроса и поддерживает собственный параметризованный запрос и может выполняться с помощью API выполнения инструкций, что обеспечивает полезный компонент хранения результатов запроса или Thrift.

В этой статье содержатся сведения об установке и использовании драйвера JDBC Databricks (OSS). Сведения о драйвере JDBC, отличном от OSS Databricks, см. в разделе Databricks JDBC Driver.

Требования

Чтобы использовать драйвер JDBC Databricks (OSS), необходимо выполнить следующие требования:

  • Среда выполнения Java (JRE) 11.0 или более поздней версии. Тестирование CI поддерживается в JRE 11, 17 и 21.

Примечание.

В результате изменения В JDK 16, вызвавшей проблему совместимости с библиотекой Apache Arrow, используемой драйвером JDBC, ошибки среды выполнения могут возникать при использовании драйвера JDBC с JDK 16 или более поздней версии. Чтобы предотвратить эти ошибки, перезапустите приложение или драйвер с помощью следующей команды JVM:

--add-opens=java.base/java.nio=org.apache.arrow.memory.core ALL-UNNAMED

Установка драйвера

Драйвер JDBC (OSS) Databricks публикуется в репозитории Maven.

Чтобы установить драйвер, можно выполнить любое из следующих действий:

  • Для проектов Maven добавьте в файл проекта pom.xml следующую зависимость, чтобы указать Maven автоматически скачать драйвер JDBC с указанной версией:

    <dependency>
      <groupId>com.databricks</groupId>
      <artifactId>databricks-jdbc</artifactId>
      <version>0.9.6-oss</version>
      <scope>runtime</scope>
    </dependency>
    
  • Для проектов Gradle добавьте в файл сборки проекта следующую зависимость, чтобы указать Gradle автоматически скачать драйвер JDBC с указанной версией:

    implementation 'com.databricks:databricks-jdbc:0.9.6-oss'
    

Чтобы просмотреть синтаксис зависимостей для других типов проектов и получить последнюю версию драйвера JDBC Databricks (OSS), см. репозитория Maven.

Настройка URL-адреса подключения

Чтобы подключиться к рабочей области Azure Databricks с помощью драйвера JDBC, необходимо указать URL-адрес подключения JDBC, включающий различные параметры подключения, такие как имя узла сервера рабочей области Azure Databricks, параметры вычислительного ресурса и учетные данные проверки подлинности для подключения к рабочей области.

Вы можете задать значение этих свойств по URL-адресу подключения JDBC, задать и передать их в метод DriverManager.getConnectionили сочетание обоих. Сведения о том, как лучше всего подключиться с помощью конкретного приложения, клиента, пакета SDK, API или средства SQL, см. в документации поставщика.

URL-адрес подключения JDBC должен иметь следующий формат. Свойства являются нечувствительными к регистру.

jdbc:databricks://<server-hostname>:<port>/<schema>;[property1]=[value];[property2]=[value];...

Кроме того, укажите параметры с помощью java.util.Properties класса или сочетания:

String url = "jdbc:databricks://<server-hostname>:<port>/<schema>";
Properties properties = new java.util.Properties();
properties.put("<property1>", "<value1");
properties.put("<property2>", "<value2");
// ...
Connection conn = DriverManager.getConnection(url, properties);
String url = "jdbc:databricks://<server-hostname>:<port>/<schema>;[property1]=[value];[property2]=[value];";
Connection conn = DriverManager.getConnection(url, "token", "12345678901234667890abcdabcd");

Элементы URL-адреса подключения описаны в следующей таблице. Дополнительные сведения о дополнительных свойствах, включая свойства проверки подлинности, см. в следующих разделах. Элементы и свойства URL-адреса не учитывает регистр.

Элемент URL-адреса или свойство Description
<server-hostname> Значение имени узла сервера в Azure Databricks.
<port> Значение порта вычислительного ресурса Azure Databricks. Значение по умолчанию — 443.
<schema> Имя схемы. Кроме того, можно задать свойство ConnSchema. См . свойства подключения.
httpPath Значение HTTP-пути вычислительного ресурса Azure Databricks. Соединитель формирует HTTP-адрес для подключения, добавляя httpPath значение к узлу и порту, указанному в URL-адресе подключения. Например, чтобы подключиться к HTTP-адресу, используйте следующий URL-адрес http://localhost:10002/cliserviceподключения: jdbc:databricks://localhost:10002;httpPath=cliservice

Чтобы получить URL-адрес подключения JDBC для кластера Azure Databricks :

  1. Выполните вход в рабочую область Azure Databricks.
  2. На боковой панели щелкните " Вычисления", а затем щелкните имя целевого кластера.
  3. На вкладке "Конфигурация" разверните дополнительные параметры.
  4. Перейдите на вкладку JDBC/ODBC .
  5. Скопируйте URL-адрес JDBC для использования в качестве URL-адреса подключения JDBC или создайте URL-адрес из значений в хосте сервера, портеи поле HTTP-пути.

Чтобы получить URL-адрес подключения JDBC для склада Databricks SQL:

  1. Выполните вход в рабочую область Azure Databricks.
  2. На боковой панели щелкните "Хранилища SQL", а затем щелкните имя целевого хранилища.
  3. Перейдите на вкладку сведений о подключении.
  4. Скопируйте URL-адрес JDBC для использования в качестве URL-адреса подключения JDBC или создайте URL-адрес из значений в хосте сервера, портеи поле HTTP-пути.

Проверка подлинности драйвера

Подключение драйвера JDBC можно пройти проверку подлинности с помощью одного из следующих механизмов проверки подлинности:

Проверка подлинности пользователей и компьютеров OAuth (U2M)

Драйвер JDBC поддерживает проверку подлинности пользователя на компьютере OAuth (U2M) для входа в режиме реального времени и согласия на проверку подлинности целевой учетной записи пользователя Databricks. Это также называется проверкой подлинности OAuth на основе браузера.

Azure Databricks создал идентификатор databricks-sql-jdbc клиента OAuth для клиентов. Это также идентификатор клиента OAuth по умолчанию, используемый в драйвере JDBC. Чтобы настроить проверку подлинности OAuth U2M, просто добавьте следующие свойства в существующий URL-адрес подключения или java.util.Properties объект JDBC:

Свойство Значение
AuthMech 11
Auth_Flow 2

Проверка подлинности на компьютере (M2M) OAuth

Драйвер JDBC поддерживает проверку подлинности OAuth на компьютере (M2M) с помощью субъекта-службы Azure Databricks. Это также называется аутентификация OAuth 2.0 по учетным данным клиента. Ознакомьтесь с проверкой подлинности доступа к Azure Databricks с помощью субъекта-службы с помощью OAuth (OAuth M2M).

Чтобы настроить проверку подлинности учетных данных клиента OAuth M2M или OAuth 2.0:

  1. Создайте управляемый субъект-службу идентификатора Microsoft Entra, а затем назначьте его учетным записям Azure Databricks и рабочим областям. Дополнительные сведения см. в разделе "Управление субъектами-службами".

    Внимание

    Драйвер JDBC Databricks (OSS) поддерживает использование секретов OAuth в Azure Databricks для аутентификации с помощью учетных данных клиента OAuth M2M или OAuth 2.0. Секреты идентификатора Microsoft Entra не поддерживаются.

  2. Создайте секрет OAuth Azure Databricks для субъекта-службы. Для этого смотрите , чтобы вручную сгенерировать и использовать токены доступа для аутентификации OAuth M2M.

  3. Предоставьте субъекту-службе доступ к кластеру или хранилищу. См . сведения о разрешениях вычислений или управлении хранилищем SQL.

Добавьте следующие свойства в существующий URL-адрес или java.util.Properties объект подключения JDBC:

Свойство Значение
AuthMech 11
Auth_Flow 1
OAuth2ClientID Значение идентификатора приложения (клиента) субъекта-службы.
OAuth2Secret Секрет OAuth субъекта-службы Azure Databricks. (Секреты идентификатора Microsoft Entra не поддерживаются для проверки подлинности клиента OAuth M2M или OAuth 2.0.0.)

Личный маркер доступа Azure Databricks

Чтобы проверить подлинность подключения драйвера JDBC с помощью личного маркера доступа Azure Databricks, добавьте следующие свойства в URL-адрес подключения или java.util.Properties объект JDBC:

Свойство Значение
AuthMech 3
user Значение tokenв виде строки.
PWD или password Значение маркера личного доступа Azure Databricks в виде строки.

Свойства подключения

Следующие дополнительные свойства подключения поддерживаются драйвером JDBC. Свойства являются нечувствительными к регистру.

Свойство Значение по умолчанию Description
AuthMech Обязательное поле Механизм аутентификации, где 3 указывает, что механизм — это личный токен доступа Azure Databricks, а 11 указывает, что механизм — токены OAuth 2.0. Для каждого механизма требуются дополнительные свойства. См. статью "Проверка подлинности драйвера".
Auth_Flow 0 Поток проверки подлинности OAuth2 для подключения драйвера. Это свойство является обязательным, если AuthMech имеет значение 11.
SSL 1 Указывает, взаимодействует ли соединитель с сервером Spark через сокет с поддержкой SSL.
ConnCatalog или catalog SPARK Имя используемого каталога по умолчанию.
ConnSchema или schema default Имя используемой схемы по умолчанию. Это можно указать, заменив <schema> в URL-адресе именем схемы, используемой или задав свойство ConnSchema имя используемой схемы.
ProxyAuth 0 Если задано значение 1, драйвер использует пользователя и пароль проверки подлинности прокси-сервера, представленный ProxyUID и ProxyPwd.
ProxyHost null Строка, представляющая имя узла прокси-сервера, используемого при UseProxy также имеет значение 1.
ProxyPort null Целое число, представляющее номер прокси-порта, который следует использовать, если UseProxy также задано значение 1.
ProxyUID null Строка, представляющая имя пользователя для аутентификации через прокси-сервер, когда ProxyAuth и UseProxy также установлены на 1.
ProxyPwd null Строка, представляющая пароль, используемый для аутентификации через прокси-сервер, когда ProxyAuth и UseProxy также установлены в 1.
UseProxy 0 Если задано значение 1, драйвер использует предоставленные параметры прокси-сервера (например, ProxyAuth, ProxyHost, ProxyPort, ProxyPwdи ProxyUID).
UseSystemProxy 0 Если задано значение 1, драйвер использует параметры прокси-сервера, заданные на уровне системы. Если в URL-адресе подключения заданы дополнительные свойства прокси-сервера, эти дополнительные свойства прокси-сервера переопределяют те, которые были заданы на уровне системы.
UseCFProxy 0 Если задано значение 1, драйвер использует параметры прокси-сервера для извлечения данных из облака, если они указаны; в противном случае он использует обычный прокси-сервер.
CFProxyAuth 0 Если задано значение 1, драйвер использует пользователя и пароль проверки подлинности прокси-сервера, представленный CFProxyUID и CFProxyPwd.
CFProxyHost null Строка, представляющая имя узла прокси-сервера, используемого при UseCFProxy также имеет значение 1.
CFProxyPort null Целое число, представляющее номер прокси-порта, который следует использовать, если UseCFProxy также задано значение 1.
CFProxyUID null Строка, представляющая имя пользователя для аутентификации через прокси-сервер, когда CFProxyAuth и UseCFProxy также установлены на 1.
CFProxyPwd null Строка, представляющая пароль, используемый для аутентификации через прокси-сервер, когда CFProxyAuth и UseCFProxy также установлены в 1.
AsyncExecPollInterval 200 Время в миллисекундах между каждым опросом для состояния асинхронного выполнения запроса. Асинхронный относится к тому, что вызов RPC, используемый для выполнения запроса к Spark, является асинхронным. Это не означает, что поддерживаются асинхронные операции JDBC.
UserAgentEntry browser Запись пользовательского агента, включаемая в HTTP-запрос. Это значение имеет следующий формат: [ProductName]/[ProductVersion] [Comment]
UseThriftClient 0 Следует ли драйверУ JDBC использовать клиент Thrift для подключения к кластеру всех целей. Значение по умолчанию работает для хранилищ SQL.

Свойства конфигурации SQL

Следующие свойства конфигурации SQL поддерживаются драйвером JDBC. Они также описаны в параметрах конфигурации . Свойства являются нечувствительными к регистру.

Свойство Значение по умолчанию Description
ansi_mode TRUE Следует ли включить строгое поведение ANSI SQL для определенных функций и правил приведения.
enable_photon TRUE Следует ли включить векторную подсистему запросов Фотона.
legacy_time_parser_policy EXCEPTION Методы, используемые для анализа и форматирования дат и меток времени. Допустимые значения: EXCEPTION, LEGACYи CORRECTED.
max_file_partition_bytes 128m Максимальное количество байтов, которое можно упаковать в один раздел при чтении из источников, основанных на файлах. Параметр может быть любым положительным целым числом и при необходимости включать такие меры, как b (байты) k или kb (1024 байта).
read_only_external_metastore false Определяет, обрабатывается ли внешнее хранилище метаданных как доступное только для чтения.
statement_timeout 172800 Задает время ожидания инструкции SQL от 0 до 172800 секунд.
timezone UTC Задайте локальный часовой пояс. Идентификаторы регионов в форме area/city, такие как Америка/Los_Angeles или смещения зоны в формате (+|-)HH, (+|-)HH:mm или (+|-)HH:mm:ss, например -08, +01:00 или -13:33:33:33. Кроме того, UTC поддерживается в качестве псевдонима для +00:00
use_cached_result true Если это возможно, Databricks SQL кэширует и повторно использует результаты.

Свойства ведения журнала

Следующие свойства ведения журнала поддерживаются драйвером JDBC. Свойства являются нечувствительными к регистру.

Свойство Значение по умолчанию Description
LogLevel OFF Уровень ведения журнала, который является значением 0–6:

— 0. Отключите все ведение журнала.
— 1. Включение ведения журнала на уровне FATAL, которое регистрирует очень серьезные события ошибок, что приведет к прерыванию соединителя.
— 2. Включение ведения журнала на уровне ERROR, которое регистрирует события ошибок, которые по-прежнему могут позволить соединителю продолжать работу.
— 3. Включение ведения журнала на уровне ПРЕДУПРЕЖДЕНИЯ, которое регистрирует события, которые могут привести к ошибке, если действие не предприняно.
— 4. Включение ведения журнала на уровне INFO, которое записывает общие сведения, описывающие ход выполнения соединителя.
— 5. Включение ведения журнала на уровне ОТЛАДКИ, которое записывает подробные сведения, полезные для отладки соединителя.
— 6. Включение ведения журнала на уровне TRACE, которое регистрирует все действия соединителя.

Используйте это свойство, чтобы включить или отключить ведение журнала в соединителе и указать объем сведений, включенных в файлы журнала.
LogPath Чтобы определить путь по умолчанию для журналов, драйвер использует набор значений для этих системных свойств в этом порядке приоритета:

1. user.dir
2. java.io.tmpdir
3. Текущий каталог, другими словами .
Полный путь к папке, в которой соединитель сохраняет файлы журналов при включении ведения журнала, в форме строки. Чтобы убедиться, что URL-адрес подключения совместим со всеми приложениями JDBC, избежать обратной косой черты (\) в пути к файлу, введя другую обратную косую черту.

LogPath Если значение недопустимо, соединитель отправляет записанные данные в стандартный выходной поток (System.out).
LogFileSize Нет максимального значения Максимальный допустимый размер файла журнала, указанный в МБ
LogFileCount Нет максимального значения Максимальное количество разрешенных файлов журнала

Включение и настройка ведения журнала

Драйвер JDBC поддерживает платформы Java (SLF4J) и java.util.logging (JUL). Драйвер использует платформу ведения журнала JUL по умолчанию.

Чтобы включить и настроить ведение журнала для драйвера JDBC, выполните следующие действия.

  1. Включите платформу ведения журнала, которую вы хотите использовать:

    • Для ведения журнала SLF4J задайте системное свойство -Dcom.databricks.jdbc.loggerImpl=SLF4JLOGGER и укажите реализацию привязки SLF4J (совместимую с SLF4J версии 2.0.13 и выше) и соответствующим файлом конфигурации в пути класса.
    • Для логирования JUL установите системное свойство -Dcom.databricks.jdbc.loggerImpl=JDKLOGGER. Это значение по умолчанию.
  2. Задайте свойство LogLevel в строке подключения требуемому уровню информации для включения в файлы журнала.

  3. Задайте для свойства LogPath в строке подключения полный путь к папке, в которой требуется сохранить файлы журналов.

    Например, следующий URL-адрес подключения включает уровень ведения журнала 6 и сохраняет файлы журналов в папку C:temp:

    jdbc: databricks://localhost:11000;LogLevel=6;LogPath=C:\\temp
    
  4. Перезапустите приложение JDBC и снова подключитесь к серверу, чтобы применить параметры.

Пример. Выполнение запроса с помощью драйвера JDBC

В следующем примере показано, как использовать драйвер JDBC для выполнения запроса SQL Databricks с помощью вычислительного ресурса Azure Databricks.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Properties;

public class DatabricksJDBCExample {

    public static void main(String[] args) {

        Class.forName("com.databricks.client.jdbc.Driver");

        // Set JDBC URL properties
        String jdbcUrl = "jdbc:databricks://dbc-a1b2345c-d6e7.cloud.databricks.com:443";
        Properties connectionProperties = new Properties();
        connectionProperties.put("httpPath", "sql/protocolv1/o/123456780012345/0123-123450-z000pi22");
        connectionProperties.put("ssl", "1");

        // Set authentication properties (personal access token)
        connectionProperties.put("AuthMech", "3");
        connectionProperties.put("user", "token");
        connectionProperties.put("password", "12345678901234667890abcdabcd");

        // Set logging properties
        connectionProperties.put("logPath", "logs/myapplication.log");

        // Establish connection and execute query
        try (Connection connection = DriverManager.getConnection(jdbcUrl, connectionProperties);
             Statement statement = connection.createStatement();
             ResultSet resultSet = statement.executeQuery("SELECT * FROM samples.nyctaxi.trips")) {

            // Get metadata and column names
            ResultSetMetaData metaData = resultSet.getMetaData();
            String[] columns = new String[metaData.getColumnCount()];
            for (int i = 0; i < columns.length; i++) {
                columns[i] = metaData.getColumnName(i + 1);
            }

            // Process and print the result set
            while (resultSet.next()) {
                System.out.print("Row " + resultSet.getRow() + "=[");
                for (int i = 0; i < columns.length; i++) {
                    if (i != 0) {
                        System.out.print(", ");
                    }
                    System.out.print(columns[i] + "='" + resultSet.getObject(i + 1) + "'");
                }
                System.out.println("]");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Дополнительные ресурсы