Перейти к основному содержимому

JDBC catalog

Selena поддерживает JDBC catalogs начиная с версии 1.5.0.

JDBC catalog — это тип external catalog, который позволяет запрашивать данные из источников данных, доступных через JDBC, без необходимости их загрузки.

Также вы можете напрямую преобразовывать и загружать данные из источников данных JDBC, используя INSERT INTO на основе JDBC catalogs.

JDBC catalogs поддерживают MySQL и PostgreSQL начиная с версии 1.5.0, Oracle и SQLServer с версий 3.2.9 и 3.3.1, а также ClickHouse (экспериментально) с версии 3.3.0.

Предварительные требования

  • FE и BE или CN в вашем кластере Selena могут загружать JDBC-драйвер по URL-адресу загрузки, указанному в параметре driver_url.
  • JAVA_HOME в файле $BE_HOME/bin/start_be.sh на каждом узле BE или CN правильно настроен как путь к среде JDK, а не к среде JRE. Например, вы можете настроить export JAVA_HOME = <JDK_absolute_path>. Эту конфигурацию необходимо добавить в начало скрипта и перезапустить BE или CN, чтобы конфигурация вступила в силу.

Создание JDBC catalog

Синтаксис

CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES ("key"="value", ...)

Параметры

catalog_name

Имя JDBC catalog. Соглашения об именовании следующие:

  • Имя может содержать буквы, цифры (0-9) и символы подчеркивания (_). Оно должно начинаться с буквы.
  • Имя чувствительно к регистру и не может превышать 1023 символа в длину.

comment

Описание JDBC catalog. Этот параметр является необязательным.

PROPERTIES

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

ПараметрОписание
typeТип ресурса. Установите значение jdbc.
userИмя пользователя, используемое для подключения к целевой базе данных.
passwordПароль, используемый для подключения к целевой базе данных.
jdbc_uriURI, который JDBC-драйвер использует для подключения к целевой базе данных. Для MySQL URI имеет формат "jdbc:mysql://ip:port". Для PostgreSQL URI имеет формат "jdbc:postgresql://ip:port/db_name". Дополнительная информация: PostgreSQL.
driver_urlURL-адрес загрузки JAR-пакета JDBC-драйвера. Поддерживается HTTP URL или file URL, например, https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.3/postgresql-42.3.3.jar и file:///home/disk1/postgresql-42.3.3.jar.
ПРИМЕЧАНИЕ
Вы также можете поместить JDBC-драйвер в любой одинаковый путь на узлах FE и BE или CN и установить driver_url на этот путь, который должен быть в формате file:///<path>/to/the/driver.
driver_classИмя класса JDBC-драйвера. Имена классов JDBC-драйверов распространенных движков баз данных следующие:
  • MySQL: com.mysql.jdbc.Driver (MySQL v5.x и ранее) и com.mysql.cj.jdbc.Driver (MySQL v6.x и позже)
  • PostgreSQL: org.postgresql.Driver

ПРИМЕЧАНИЕ

FE загружают JAR-пакет JDBC-драйвера во время создания JDBC catalog, а BE или CN загружают JAR-пакет JDBC-драйвера во время первого запроса. Время, затрачиваемое на загрузку, варьируется в зависимости от сетевых условий.

Примеры

Следующий пример создает пять различных JDBC catalogs.

-- PostgresSQL
CREATE EXTERNAL CATALOG jdbc0
PROPERTIES
(
"type"="jdbc",
"user"="postgres",
"password"="changeme",
"jdbc_uri"="jdbc:postgresql://127.0.0.1:5432/jdbc_test",
"driver_url"="https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.3/postgresql-42.3.3.jar",
"driver_class"="org.postgresql.Driver"
);
-- MySQL
CREATE EXTERNAL CATALOG jdbc1
PROPERTIES
(
"type"="jdbc",
"user"="root",
"password"="changeme",
"jdbc_uri"="jdbc:mysql://127.0.0.1:3306",
"driver_url"="https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar",
"driver_class"="com.mysql.cj.jdbc.Driver"
);
-- Oracle
CREATE EXTERNAL CATALOG jdbc2
PROPERTIES
(
"type"="jdbc",
"user"="root",
"password"="changeme",
"jdbc_uri"="jdbc:oracle:thin:@127.0.0.1:1521:ORCL",
"driver_url"="https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc10/19.18.0.0/ojdbc10-19.18.0.0.jar",
"driver_class"="oracle.jdbc.driver.OracleDriver"
);
-- SQL Server
CREATE EXTERNAL CATALOG jdbc3
PROPERTIES
(
"type"="jdbc",
"user"="root",
"password"="changeme",
"jdbc_uri"="jdbc:sqlserver://127.0.0.1:1433;databaseName=MyDatabase;",
"driver_url"="https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/12.4.2.jre11/mssql-jdbc-12.4.2.jre11.jar",
"driver_class"="com.microsoft.sqlserver.jdbc.SQLServerDriver"
);
-- ClickHouse
CREATE EXTERNAL CATALOG jdbc4
PROPERTIES
(
"type"="jdbc",
"user"="default",
"jdbc_uri"="jdbc:clickhouse://127.0.0.1:8443",
"driver_url"="file:///path/to/clickhouse-jdbc-0.4.6.jar",
"driver_class"="com.clickhouse.jdbc.ClickHouseDriver"
);

Просмотр JDBC catalogs

Вы можете использовать SHOW CATALOGS для запроса всех catalogs в текущем кластере Selena:

SHOW CATALOGS;

Вы также можете использовать SHOW CREATE CATALOG для запроса оператора создания external catalog. Следующий пример запрашивает оператор создания JDBC catalog с именем jdbc0:

SHOW CREATE CATALOG jdbc0;

Удаление JDBC catalog

Вы можете использовать DROP CATALOG для удаления JDBC catalog.

Следующий пример удаляет JDBC catalog с именем jdbc0:

DROP Catalog jdbc0;

Запрос таблицы в JDBC catalog

  1. Используйте SHOW DATABASES для просмотра баз данных в вашем JDBC-совместимом кластере:

    SHOW DATABASES FROM <catalog_name>;
  2. Используйте SET CATALOG для переключения на целевой catalog в текущей сессии:

    SET CATALOG <catalog_name>;

    Затем используйте USE для указания активной базы данных в текущей сессии:

    USE <db_name>;

    Или вы можете использовать USE для прямого указания активной базы данных в целевом catalog:

    USE <catalog_name>.<db_name>;
  3. Используйте SELECT для запроса целевой таблицы в указанной базе данных:

    SELECT * FROM <table_name>;

FAQ

Что делать, если возникает ошибка "Malformed database URL, failed to parse the main URL sections"?

Если вы столкнулись с такой ошибкой, URI, который вы передали в jdbc_uri, недействителен. Проверьте URI, который вы передаете, и убедитесь, что он действителен. Дополнительную информацию см. в описаниях параметров в разделе "PROPERTIES" этой темы.