Работа с драйверами JDBC/ADBC | Tcs

Version:

1.x
Руководство пользователя Работа с драйверами JDBC/ADBC

Работа с драйверами JDBC/ADBC

TCS поддерживает работу с общедоступными драйверами для интерфейсов JDBC и ADBC по SQL-протоколу Apache Arrow Flight.

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

Скачайте установочный пакет нужного драйвера по ссылке:

Подключение драйверов

Примечание

Инструкции по подключению драйверов составлены для локально развернутого кластера TCS.

Подключение драйвера JDBC к редактору DBeaver

Примечание

Перед подключением драйвера убедитесь, что поддержка драйверов JDBC/ADBC включена в конфигурации TCS.

  1. В DBeaver добавьте драйвер JDBC для Arrow Flight SQL в качестве нового драйвера:

    a. В меню выберите пункт Database > Driver Manager.

    b. В диалоговом окне Driver manager нажмите Create.

    c. В разделе Settings выполните следующие действия:

    • В поле Name укажите имя драйвера, например JDBC Driver for Arrow Flight SQL.

    • В поле Driver Type убедитесь, что выбран тип драйвера Generic.

    • В поле Class Name укажите org.apache.arrow.driver.jdbc.ArrowFlightJdbcDriver.

    • В поле URL Template укажите jdbc:arrow-flight-sql://{host}:{port} (например, jdbc:arrow-flight-sql://localhost:50051).

    • В поле Default Port укажите порт 50051.

    d. В разделе Libraries нажмите Add File и выберите .jar-файл для драйвера JDBC для Arrow Flight SQL.

    e. Нажмите OK.

  2. Создайте подключение к DBeaver, использующее ваш драйвер:

    a. Выберите Database > New Connection from JDBC URL.

    b. В поле Create New Connection в диалоговом окне JDBC URL введите jdbc:arrow-flight-sql://{host}:{port}?useEncryption=0 (например, jdbc:arrow-flight-sql://localhost:50051?useEncryption=0).

    Свойство useEncryption=0 (false) необходимо указывать явно, поскольку при работе с текущей версией TCS поддерживаются только незашифрованные JDBC-соединения. Значение по умолчанию для этого свойства равно 1 (true).

    В результате DBeaver добавит ваш драйвер в список Drivers.

    c. Выберите ваш драйвер в списке Drivers и нажмите Next.

    d. В диалоговом окне Connect to a Database укажите свои учетные данные для аутентификации. При работе с текущей версией TCS поддерживаются только JDBC-соединения по имени пользователя и паролю.

    Учетные данные задаются в конфигурации TCS.

    e. (необязательно) Нажмите Test Connection. Если подключение работает, откроется диалоговое окно Connection Test, в котором указывается, что DBeaver может подключиться к TCS. После попытки подключения соединение закрывается. Нажмите OK.

    f. Нажмите Finish.

Подключение драйвера ADBC к Apache Superset

Примечание

Перед подключением драйвера убедитесь, что поддержка драйверов JDBC/ADBC включена в конфигурации TCS.

  1. Склонируйте локально репозиторий Apache Superset https://github.com/apache/superset.

  2. В локальном репозитории Apache Superset создайте файл docker/requirements-local.txt и впишите в него пакеты с зависимостями:

    pyarrow==15.0.0
    flightsql-dbapi==0.2.2
    adbc-driver-flightsql==1.4.0
    psycopg2-binary==2.9.10
    
  3. Соберите и запустите Docker-образ Apache Superset с помощью Docker Compose:

    export TAG=4.1.1
    docker compose -f docker-compose-image-tag.yml up
    

    Подробнее см. https://superset.apache.org/docs/installation/docker-compose/.

  4. Подключитесь к веб-интерфейсу Apache Superset по HTTP-адресу http:/localhost:8088.

  5. Добавьте новое соединение datafusion+flightsql://tcs:tcs@{host}:{port}?insecure=True (например, datafusion+flightsql://tcs:tcs@host.docker.internal:50051?insecure=True).

    Подробнее см. https://superset.apache.org/docs/configuration/databases#connecting-through-the-ui.

Параметры строки соединения

Параметры строки соединения для каждого драйвера описаны в документации Apache Arrow:

Работа с индексами

Работа с индексами через JDBC

Для работы с первичными индексами через JDBC доступна функция getPrimaryKeys(), которая возвращает описания колонок всех первичных индексов для указанной таблицы.

См. подробнее в документации Oracle.

Работа с индексами через ADBC

Драйвер ADBC, использующийся в текущей версии TCS, не поддерживает работу с индексами.

Работа с нематериализованными SQL-представлениями

  • Создание SQL-представления: доступно через SQL-запрос.

  • Просмотр списка всех доступных SQL-представлений:

    • В редакторе DBeaver: нажать кнопку Refresh, все доступные SQL-представления отобразятся в списке Views.

    • В редакторе Superset: нажать кнопку Refresh, все доступные SQL-представления отобразятся в списке TABLE.

  • Просмотр текста SQL-представления: в любом редакторе выбрать SQL-представление в списке, рядом отобразится его текст.

  • Замещение SQL-представления: доступно через SQL-запрос.

  • Удаление SQL-представления: доступно через SQL-запрос.

Работа с аналитическими расчетами через JDBC/ADBC

Подробнее про аналитическиа расчеты (prepared statements) в TCS см. в разделе Аналитические расчеты.

Работа с аналитическими расчетами через JDBC

Требуется JDBC-драйвер flight-sql-dbc-driver версии не ниже 18.3.0.

Для работы с этим драйвером нужно установить зависимость в клиентском приложении.

Пример: добавление зависимости в pom.xml:

<dependency>
    <groupId>org.apache.arrow</groupId>
    <artifactId>flight-sql-jdbc-driver</artifactId>
    <version>18.3.0</version>
</dependency>

Пример: строка соединения:

jdbc:arrow-flight-sql://localhost:50051?useEncryption=false&user=tcs&password=tcs

Примечание

В текущей версии TCS не поддержано исполнение аналитических расчетов через .execute(), .addBatch() и .executeBatch(). Доступны только SQL-запросы с EXECUTE.

Работа с аналитическими расчетами через ADBC

Требуется драйвер go adbc версии не ниже 1.7.0.

Пример кода создания/вызова:

prepared, err := db.Prepare("SELECT * FROM t WHERE a=$1")
if err != nil {
    log.Fatalf("Failed to prepare the statement: %v", err)
}
var num int32
var str string
if err = prepared.QueryRow(1).Scan(&num, &str); err != nil {
    log.Fatalf("Failed to execute query: %v", err)
}
fmt.Println(num, str)

Пакетная загрузка данных через JDBC

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

INSERT INTO таблица (столбец1, столбец2) VALUES ($1, $2);

Пример кода:

static String singleRowPreparedInsert = "INSERT INTO t VALUES($1, $2, $3, $4)";

static void runBatchInsert(Connection conn) throws SQLException {
    try (var statement = conn.prepareStatement(singleRowPreparedInsert)) {
        for (int i = 2; i <= 5; ++i) {
            statement.setInt(1, i);
            statement.setInt(2, i);
            statement.setString(3, String.format("%d", i));
            statement.setBoolean(4, true);
            statement.addBatch();
        }
        statement.executeBatch();
    }
}
Found what you were looking for?
Feedback