JDBC драйвер#
Пользователи CedrusData могут использовать оригинальный JDBC драйвер Trino для подключения к кластеру из Java-приложений и программ, которые поддерживают JDBC.
Ниже приведена документация JDBC драйвера Trino.
Требования#
JDBC драйвер Trino требует Java версии 8 и выше.
Все пользователи, которые подключаются к CedrusData через JDBC драйвер, должны иметь доступ на чтение к схеме
system.jdbc
.
Рекомендовано использовать JDBC драйвер той же major версии, что и кластер CedrusData. Более старые версии могут работать, но только незначительная их часть регулярно проверяется на совместимость с текущей версией. Версии до 350 не поддерживаются.
Установка#
JDBC драйвер Trino представляет собой JAR-файл, который вы можете скачать из
Maven Central
или получить из архива CedrusData из директории jdbc/
.
После получения JDBC драйвера, добавьте его в ваше приложение. Процедура регистрации зависит от приложения. Если вы регистрируете драйвер в стороннем приложении (например, Apache Superset или Tableau), вам необходимо следовать инструкции по установке JDBC драйверов для данного приложения.
Если вы разрабатываете собственное Java-приложение, вам необходимо добавить JAR файл в classpath. Например, если вы используете систему сборки Maven, добавьте следующую зависимость к своему проекту:
<dependency>
<groupId>io.trino</groupId>
<artifactId>trino-jdbc</artifactId>
<version>442</version>
</dependency>
Подключение#
После того как JDBC драйвер зарегистрирован в приложении, вы можете использовать его для подключения к CedrusData.
JDBC драйвер Trino поддерживает следующие форматы URL, где host:port
это адрес coordinator узла:
jdbc:trino://host:port
jdbc:trino://host:port/catalog
jdbc:trino://host:port/catalog/schema
Вы можете указать в URL дополнительные параметры конфигурации в формате key=value
. Полный список доступных параметров конфигурации приведен ниже.
jdbc:trino://host:port?key1=value2&key2=value2
jdbc:trino://host:port/catalog?key1=value2&key2=value2
jdbc:trino://host:port/catalog/schema?key1=value2&key2=value2
JDBC драйвер Trino требует, чтобы при подключении всегда было указано имя пользователя, даже если аутентификация CedrusData отключена. В противном случае вы получите следующую ошибку:
Authentication failed: Basic authentication or X-Trino-User must be sent
Ниже приведен пример Java-кода для подключения к coordinator узлу, запущенному на локальном компьютере на порту
8080
, с использованием каталога tpch
и схемы sf1
по умолчанию:
// Передача параметров через объект Properties.
String url = "jdbc:trino://localhost:8080/tpch/sf1";
Properties properties = new Properties();
properties.setProperty("user", "test");
Connection connection = DriverManager.getConnection(url, properties);
// Передача параметров через URL.
String url = "jdbc:trino://localhost:8080/tpch/sf1?user=test";
Connection connection = DriverManager.getConnection(url);
Примечание
Современные приложения обычно не требуют имя класса JDBC драйвера.
Если ваше приложение запрашивает имя класса JDBC драйвера, используйте io.trino.jdbc.TrinoDriver
.
Параметры подключения#
Общие параметры#
Имя |
Описание |
---|---|
|
Имя пользователя CedrusData. Если безопасность CedrusData отключена, необходимо предоставить произвольное непустое значение. |
|
Пароль пользователя CedrusData. |
|
Имя пользователя сессии для имперсонации. |
|
Адрес HTTP proxy в формате |
|
Адрес SOCKS proxy в формате |
|
Дополнительная информация о клиенте. |
|
Теги клиента для выбора групп ресурсов. Например: |
|
Токен трассировки для сопоставления запросов между системами. |
|
Имя источника запроса к CedrusData. Данный параметр имеет приоритет
перед |
|
Префикс, который будет добавлен к свойству |
|
Токен доступа для JWT. |
|
Extra credentials для подключения к источникам данных. Представляет собой список
пар ключ-значение. Например, строка |
|
Роли авторизации для работы с каталогами CedrusData. Представляет собой список
пар ключ-значение в формате |
|
Параметры сессии SQL запросов CedrusData. Представляет собой список
пар ключ-значение. Например, |
|
Установите в |
|
Позволяет переиспользовать внешние токены аутентификации между несколькими JDBC подключениями
одного и того же пользователя до тех пор, пока не произойдет инвалидация токена (например,
при перезапуске клиента). Допустимые значения: |
|
Отключить компрессию передаваемых данных. |
|
Когда параметр включен, паттерны имен, передаваемые в методы |
|
Задает time zone для сессии (см. документацию Java). По умолчанию равна time zone JVM, в которой запущен JDBC драйвер. |
|
Значение по умолчанию: |
Параметры SSL#
Имя |
Описание |
---|---|
|
Использовать TLS/HTTPS для подключения. |
|
Имя метода TLS верификации. Допустимые значения: |
|
Путь к файлу PEM или JKS, который содержит доверенный сертификат для подключения к кластеру CedrusData. Используйте данный параметр только при подключении к кластеру CedrusData в котором включена certificate authentication. |
|
Пароль KeyStore (при наличии). |
|
Тип KeyStore. Значение по умолчанию равно значению параметра Java |
|
Путь к файлу TrustStore для проверки серверных HTTPS сертификатов. |
|
Пароль к файлу TrustStore. |
|
Тип TrustStore. Значение по умолчанию равно значению параметра Java |
|
Автоматически использовать системный TrustStore операционной системы.
Для Windows используется TrustStore |
|
Ожидаемый hostname сертификата, предоставляемого сервером CedrusData. Применимо только при
|
Параметры Kerberos#
Для авторизации с помощью Kerberos, необходимо задать principal координатора CedrusData, и principal пользователя, от имени которого будет происходить аутентификация.
В процессе авторизации JDBC-драйвер формирует principal координатора CedrusData в host-based формате primary@instance
(см.
компоненты principal Kerberos).
Например, если principal координатора равен cedrus/coordinator.example.com@EXAMPLE.COM
, то его primary
это cedrus
, а его instance
это
coordinator.example.com
. В этом случае для успешной аутентификации JDBC-драйвер должен разрешить principal координатора в строку cedrus@coordinator.example.com
.
Разрешение principal координатора происходит следующим образом:
JDBC-драйвер берет паттерн из параметра
KerberosServicePrincipalPattern
. Значение по умолчанию:${SERVICE}@${HOST}
. В большинстве случаев вам не нужно его изменять. Исключения составляют только случаи, когда происходит некорректное разрешение имени сервера координатора, как объяснено ниже.Компонент паттерна
${SERVICE}
безусловно заменяется значением параметраKerberosRemoteServiceName
. Если параметрKerberosRemoteServiceName
не задан, Kerberos не будет использован для аутентификации. Таким образом,KerberosRemoteServiceName
соответствуетprimary
части principal.Компонент паттерна
${HOST}
будет заменен именем сервера координатора. Если включен параметрKerberosUseCanonicalHostname
(включен по умолчанию), предварительно будет произведена попытка каноникализации адреса сервера. Например, вы подключаетесь к координатору по адресуcoordinator.intranet
или172.16.0.5
. При включенном параметреKerberosUseCanonicalHostname
, JDBC-драйвер использует DNS для преобразования текущего адреса координатора в IP-адрес, а потом для преобразования IP-адреса в канонический адрес, например,coordinator.example.com
. Если каноникализация отключена, адрес сервера будет использован как есть, что в ряде случаев может привести к некорректному поведению Kerberos.
В результате перечисленных преобразований обязательно должна быть получена строка вида primary@instance
. Следуйте рекомендациям ниже, чтобы избежать ошибок аутентификации:
Отсутствие компонента
@instance
в имени principal координатора может привести к неочевидным ошибкам, так как в этом случае Java-машина может попробовать автоматически подставить в качестве instance имя клиентского узла, что почти всегда приведет к ошибке авторизации. Например, если вы подключаетесь к CedrusData с машины с именемclient.example.com
, вы можете получить некорректный principal координатора видаcedrus@client.example.com
.В редких случаях вы можете работать в окружении, в котором координатор CedrusData не имеет валидного доменного имени. Например, такое может встречаться в тестовых окружениях. В этом случае, вы можете заменить
${HOST}
в паттерне на желаемое значение. Например, если реальный principal координатора равенcedrus/coordinator.example.com@EXAMPLE.COM
, вы можете задатьKerberosServicePrincipalPattern=${SERVICE}@coordinator.example.com
иKerberosRemoteServiceName=cedrus
. Это приведет к разрешению principal координатора вcedrus@coordinator.example.com
.
Реальная аутентификация в Kerberos происходит с использованием значения principal из KerberosPrincipal
. Это же значение будет использовано в качестве имени пользователя
CedrusData (с учетом Сопоставление пользователей). Для подключения по JDBC вы также должны указать имя пользователя (параметр user
). В большинстве случаев имя
пользователя будет совпадать со значением KerberosPrincipal
. Если значения отличаются, при получении SQL-запроса координатор CedrusData будет осуществлять имперсонацию:
запрос будет запущен пользователем KerberosPrincipal
, но от имени пользователя переданного в параметре user
.
Имя |
Описание |
---|---|
|
Имя сервиса координатора CedrusData. Обязателен для аутентификации через Kerberos. |
|
Использовать канонический сетевой адрес координатора CedrusData при формировании principal координатора. Включено по умолчанию. |
|
Паттерн service principal паттерн координатора CedrusData. Значение по умолчанию: |
|
Principal пользователя, который будет использован для аутентификации в Kerberos. |
|
Путь к файлу конфигурации Kerberos. Обычно данный файл расположен по пути |
|
Путь к keytab файлу Kerberos. Keytab должен содержать ключ пользователя, указанного в параметре
|
|
Опциональный путь к Kerberos credential cache. |
|
Установите значение |
|
Передавать объект GssCredential как свойство драйвера. |