Tous les produits
Search
Centre de documentation

ApsaraDB for SelectDB:Sources de données JDBC

Dernière mise à jour :Aug 11, 2026

Un Catalog JDBC connecte SelectDB à des bases de données externes via le protocole JDBC standard. Une fois la connexion établie, SelectDB synchronise automatiquement les métadonnées de la source externe et permet d'exécuter des requêtes fédérées sur MySQL, PostgreSQL, Oracle, SQLServer, ClickHouse, Doris, SAP HANA, Trino/Presto et OceanBase, sans déplacer les données.

Prérequis

Avant de commencer, vérifiez que :

Créer un Catalog JDBC

Syntaxe

CREATE CATALOG <catalog_name>
PROPERTIES ("key"="value", ...)

Paramètres

Paramètre Obligatoire Valeur par défaut Description
user Oui Nom d'utilisateur du compte de base de données.
password Oui Mot de passe du compte de base de données.
jdbc_url Oui Chaîne de connexion JDBC. Le format varie selon la base de données : MySQL — jdbc:mysql://host:port/db ; PostgreSQL — jdbc:postgresql://host:port/db ; Oracle — jdbc:oracle:thin:@host:port:sid ; SQLServer — jdbc:sqlserver://host:port;DataBaseName=db. Consultez les exemples par base de données ci-dessous pour la liste complète.
driver_url Oui Chemin vers le fichier JAR du pilote JDBC. Spécifiez un nom de fichier (par exemple, mysql-connector-java-8.0.25.jar) pour le charger depuis le répertoire local jdbc_drivers/, ou une URL HTTP pour télécharger le fichier.
driver_class Oui Nom de la classe du pilote JDBC. Valeurs courantes : MySQL — com.mysql.cj.jdbc.Driver ; PostgreSQL — org.postgresql.Driver ; Oracle — oracle.jdbc.driver.OracleDriver ; SQLServer — com.microsoft.sqlserver.jdbc.SQLServerDriver. Consultez les exemples par base de données pour les autres bases.
lower_case_table_names Non "false" Si défini à true, synchronise les noms de bases de données et de tables en minuscules. Consultez Synchronisation des noms en minuscules.
only_specified_database Non "false" Si défini à true, synchronise uniquement les bases de données spécifiées dans include_database_list.
include_database_list Non "" Applicable uniquement lorsque only_specified_database=true. Liste des bases de données à synchroniser, séparées par des virgules. Respecte la casse.
exclude_database_list Non "" Applicable uniquement lorsque only_specified_database=true. Liste des bases de données à exclure, séparées par des virgules. Respecte la casse. Si une base de données apparaît dans les deux listes, exclude_database_list est prioritaire.

Chemin du package de pilotes

Le paramètre driver_url accepte deux formats :

  • Nom de fichier — par exemple, mysql-connector-java-8.0.25.jar. SelectDB recherche le fichier dans le répertoire local jdbc_drivers/. Les quatre packages de pilotes suivants sont préinstallés :

    • mysql-connector-java-8.0.25.jar

    • postgresql-42.5.1.jar

    • mssql-jdbc-11.2.3.jre8.jar

    • ojdbc8.jar

  • URL HTTP — par exemple, https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/jdbc_driver/mysql-connector-java-8.0.25.jar. SelectDB télécharge le fichier depuis cette URL. Seuls les services HTTP sans authentification sont pris en charge.

Synchronisation des noms en minuscules

Lorsque lower_case_table_names=true, SelectDB maintient un mappage entre les noms en minuscules et les noms réels. Vous pouvez ainsi interroger les bases de données et les tables en utilisant des noms en minuscules, quelle que soit leur casse d'origine.

Comportement selon la version :

  • SelectDB 2.X — Applicable uniquement à Oracle. Tous les noms de bases de données et de tables sont convertis en majuscules avant l'envoi de la requête à Oracle. Par exemple, si vous définissez lower_case_table_names=true et qu'Oracle contient une table nommée TEST dans le schéma TEST, vous pouvez l'interroger avec SELECT * FROM oracle_catalog.test.test. SelectDB convertit automatiquement test.test en TEST.TEST.

  • SelectDB 3.X et versions ultérieures — Applicable à toutes les bases de données. Les noms sont convertis vers leur casse réelle avant l'exécution de la requête. Après une mise à niveau depuis une version antérieure, exécutez REFRESH <catalog_name> pour appliquer ce changement.

Contraintes :

  • Si deux noms de bases de données ou de tables diffèrent uniquement par la casse (par exemple, SelectDB et selectdb), SelectDB ne peut pas les interroger en raison de l'ambiguïté.

  • Si le paramètre frontend (FE) lower_case_table_names est défini à 1 ou 2, définissez le paramètre lower_case_table_names du Catalog JDBC à true. Si le paramètre FE est 0, vous pouvez le définir à true ou false (valeur par défaut : false).

Synchroniser des bases de données spécifiques

Combinez only_specified_database, include_database_list et exclude_database_list pour limiter les bases de données synchronisées par SelectDB.

Lors d'une connexion via JDBC, vous pouvez également présélectionner une base de données directement dans la jdbc_url — par exemple, en spécifiant le nom de la base de données dans l'URL MySQL, ou en utilisant currentSchema dans l'URL PostgreSQL.

Lors de l'utilisation de include_database_list ou exclude_database_list avec Oracle, utilisez ojdbc8.jar ou une version ultérieure.

Exemples par base de données

MySQL

CREATE CATALOG jdbc_mysql PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:mysql://127.0.0.1:3306/demo",
    "driver_url" = "mysql-connector-java-8.0.25.jar",
    "driver_class" = "com.mysql.cj.jdbc.Driver"
)

Mappage des niveaux

SelectDB MySQL
Catalog MySQL Server
Database Database
Table Table

Mappage des types

Type MySQL Type SelectDB Notes
BOOLEAN TINYINT
TINYINT TINYINT
SMALLINT SMALLINT
MEDIUMINT INT
INT INT
BIGINT BIGINT
UNSIGNED TINYINT SMALLINT SelectDB ne possède pas de type UNSIGNED ; la plage est étendue au niveau supérieur.
UNSIGNED MEDIUMINT INT SelectDB ne possède pas de type UNSIGNED ; la plage est étendue au niveau supérieur.
UNSIGNED INT BIGINT SelectDB ne possède pas de type UNSIGNED ; la plage est étendue au niveau supérieur.
UNSIGNED BIGINT LARGEINT
FLOAT FLOAT
DOUBLE DOUBLE
DECIMAL DECIMAL
UNSIGNED DECIMAL(p,s) DECIMAL(p+1,s) / STRING Si p+1 > 38, STRING est utilisé.
DATE DATE
TIMESTAMP DATETIME
DATETIME DATETIME
YEAR SMALLINT
TIME STRING
CHAR CHAR
VARCHAR VARCHAR
JSON JSON
SET STRING
BIT BOOLEAN / STRING BIT(1) correspond à BOOLEAN ; tous les autres types BIT correspondent à STRING.
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT STRING
BLOB, MEDIUMBLOB, LONGBLOB, TINYBLOB STRING
TINYSTRING, STRING, MEDIUMSTRING, LONGSTRING STRING
BINARY, VARBINARY STRING
Autre NON PRIS EN CHARGE

PostgreSQL

CREATE CATALOG jdbc_postgresql PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:postgresql://127.0.0.1:5432/demo",
    "driver_url" = "postgresql-42.5.1.jar",
    "driver_class" = "org.postgresql.Driver"
);

Mappage des niveaux

Une base de données SelectDB correspond à un schéma dans la base de données PostgreSQL spécifiée dans la jdbc_url (par exemple, les schémas dans demo).

SelectDB PostgreSQL
Catalog Database
Database Schema
Table Table
SelectDB récupère les schémas accessibles en exécutant : SELECT nspname FROM pg_namespace WHERE has_schema_privilege('<UserName>', nspname, 'USAGE');

Mappage des types

Type PostgreSQL Type SelectDB Notes
boolean BOOLEAN
smallint / int2 SMALLINT
integer / int4 INT
bigint / int8 BIGINT
decimal / numeric DECIMAL
real / float4 FLOAT
double precision DOUBLE
smallserial SMALLINT
serial INT
bigserial BIGINT
char CHAR
varchar / text STRING
timestamp DATETIME
date DATE
json / jsonb JSON
time STRING
interval STRING
point / line / lseg / box / path / polygon / circle STRING
cidr / inet / macaddr STRING
bit BOOLEAN / STRING bit(1) correspond à BOOLEAN ; tous les autres types bit correspondent à STRING.
uuid STRING
Autre NON PRIS EN CHARGE

Oracle

CREATE CATALOG jdbc_oracle PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:oracle:thin:@127.0.0.1:1521:helowin",
    "driver_url" = "ojdbc8.jar",
    "driver_class" = "oracle.jdbc.driver.OracleDriver"
);

Mappage des niveaux

Une base de données SelectDB correspond à un utilisateur dans Oracle. Une table correspond à une table à laquelle l'utilisateur a les permissions d'accéder.

SelectDB Oracle
Catalog Database
Database User
Table Table
La synchronisation des TABLES SYNONYM Oracle n'est pas prise en charge.

Mappage des types

Type Oracle Type SelectDB Notes
number(p) / number(p,0) TINYINT / SMALLINT / INT / BIGINT / LARGEINT Mappé selon p : p < 3 → TINYINT ; p < 5 → SMALLINT ; p < 10 → INT ; p < 19 → BIGINT ; p > 19 → LARGEINT
number(p,s) [si s > 0 et p > s] DECIMAL(p,s)
number(p,s) [si s > 0 et p < s] DECIMAL(s,s)
number(p,s) [si s < 0] TINYINT / SMALLINT / INT / BIGINT / LARGEINT SelectDB définit p à `p+ s et applique le même mappage que pour number(p)/number(p,0)`.
number (sans p ni s spécifié) Non pris en charge SelectDB ne prend actuellement pas en charge le type Oracle NUMBER sans précision et échelle explicites.
decimal DECIMAL
float / real DOUBLE
DATE DATETIME
TIMESTAMP DATETIME
CHAR / NCHAR STRING
VARCHAR2 / NVARCHAR2 STRING
LONG / RAW / LONG RAW / INTERVAL STRING
Autre NON PRIS EN CHARGE

SQLServer

Important

Pour SelectDB 3.0.8 et versions ultérieures, incluez encrypt=false dans la jdbc_url.

CREATE CATALOG jdbc_sqlserver PROPERTIES (
    "type"="jdbc",
    "user"="SA",
    "password"="SelectDB123456",
    "jdbc_url" = "jdbc:sqlserver://localhost:1433;DataBaseName=SelectDB_test;encrypt=false",
    "driver_url" = "mssql-jdbc-11.2.3.jre8.jar",
    "driver_class" = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
);

Mappage des niveaux

Une base de données SelectDB correspond à un schéma dans la base de données SQLServer spécifiée dans la jdbc_url (par exemple, les schémas dans SelectDB_test).

SelectDB SQLServer
Catalog Database
Database Schema
Table Table

Mappage des types

Type SQLServer Type SelectDB
bit BOOLEAN
tinyint SMALLINT
smallint SMALLINT
int INT
bigint BIGINT
real FLOAT
float DOUBLE
money DECIMAL(19,4)
smallmoney DECIMAL(10,4)
decimal / numeric DECIMAL
date DATE
datetime / datetime2 / smalldatetime DATETIMEV2
char / varchar / text / nchar / nvarchar / ntext STRING
binary / varbinary STRING
time / datetimeoffset STRING
Autre NON PRIS EN CHARGE

Doris

SelectDB se connecte à Doris à l'aide du pilote JDBC MySQL.

CREATE CATALOG jdbc_doris PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:mysql://127.0.0.1:9030?useSSL=false",
    "driver_url" = "mysql-connector-java-8.0.25.jar",
    "driver_class" = "com.mysql.cj.jdbc.Driver"
)

Mappage des types

Type Doris Type SelectDB Notes
BOOLEAN BOOLEAN
TINYINT TINYINT
SMALLINT SMALLINT
INT INT
BIGINT BIGINT
LARGEINT LARGEINT
FLOAT FLOAT
DOUBLE DOUBLE
DECIMALV3 DECIMALV3 / STRING Sélectionné en fonction de la précision et de l'échelle du champ DECIMAL.
DATE DATE
DATETIME DATETIME
CHAR CHAR
VARCHAR VARCHAR
STRING STRING
TEXT STRING
HLL HLL Définissez return_object_data_as_binary=true pour interroger les colonnes HLL.
Array Array Le mappage des types internes suit les règles ci-dessus. Les types complexes imbriqués ne sont pas pris en charge.
BITMAP BITMAP Définissez return_object_data_as_binary=true pour interroger les colonnes BITMAP.
Autre NON PRIS EN CHARGE

ClickHouse

CREATE CATALOG jdbc_clickhouse PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:clickhouse://127.0.0.1:8123/demo",
    "driver_url" = "clickhouse-jdbc-0.4.2-all.jar",
    "driver_class" = "com.clickhouse.jdbc.ClickHouseDriver"
);

Mappage des niveaux

SelectDB ClickHouse
Catalog ClickHouse Server
Database Database
Table Table

Mappage des types

Type ClickHouse Type SelectDB
Bool BOOLEAN
String STRING
Date / Date32 DATE
DateTime / DateTime64 DATETIME
Float32 FLOAT
Float64 DOUBLE
Int8 TINYINT
Int16 / UInt8 SMALLINT
Int32 / UInt16 INT
Int64 / UInt32 BIGINT
Int128 / UInt64 LARGEINT
Int256 / UInt128 / UInt256 STRING
DECIMAL DECIMALV3 / STRING
Enum / IPv4 / IPv6 / UUID STRING
Array ARRAY
Autre NON PRIS EN CHARGE

SAP HANA

CREATE CATALOG jdbc_hana PROPERTIES (
    "type"="jdbc",
    "user"="SYSTEM",
    "password"="SAPHANA",
    "jdbc_url" = "jdbc:sap://localhost:31515/TEST",
    "driver_url" = "ngdbc.jar",
    "driver_class" = "com.sap.db.jdbc.Driver"
)

Mappage des niveaux

SelectDB SAP HANA
Catalog Database
Database Schema
Table Table

Mappage des types

Type SAP HANA Type SelectDB
BOOLEAN BOOLEAN
TINYINT TINYINT
SMALLINT SMALLINT
INTEGER INT
BIGINT BIGINT
SMALLDECIMAL DECIMALV3
DECIMAL DECIMALV3 / STRING
REAL FLOAT
DOUBLE DOUBLE
DATE DATE
TIME STRING
TIMESTAMP DATETIME
SECONDDATE DATETIME
VARCHAR STRING
NVARCHAR STRING
ALPHANUM STRING
SHORTTEXT STRING
CHAR CHAR
NCHAR CHAR

OceanBase

CREATE CATALOG jdbc_oceanbase PROPERTIES (
    "type"="jdbc",
    "user"="root",
    "password"="123456",
    "jdbc_url" = "jdbc:oceanbase://127.0.0.1:2881/demo",
    "driver_url" = "oceanbase-client-2.4.2.jar",
    "driver_class" = "com.oceanbase.jdbc.Driver"
)

SelectDB détecte automatiquement si OceanBase fonctionne en mode MySQL ou Oracle. Le mappage des niveaux et des types suit alors les règles MySQL ou Oracle correspondantes. Consultez les sections MySQL et Oracle.

Interroger des données

Utilisez le nom en trois parties <catalog>.<database>.<table> pour interroger des données dans un Catalog JDBC :

SELECT * FROM mysql_catalog.mysql_database.mysql_table WHERE k1 > 1000 AND k3 = 'term';

Caractères d'échappement : SelectDB échappe automatiquement les noms de champs et de tables conformément aux normes de chaque base de données — accents graves pour MySQL, guillemets doubles pour PostgreSQL et Oracle, et crochets pour SQLServer. Cela peut rendre les noms de champs sensibles à la casse. Exécutez EXPLAIN sur une requête pour voir le code SQL échappé envoyé à la base de données distante.

Pushdown des prédicats

SelectDB transfère les conditions de la clause WHERE vers la source de données externe afin de filtrer les données à la source. Cela réduit les transferts inutiles et améliore les performances des requêtes.

Lorsque enable_func_pushdown=true (variable de session), SelectDB transfère également les fonctions de la clause WHERE vers la source de données externe. Cette fonctionnalité est prise en charge uniquement pour MySQL. Les fonctions suivantes sont exclues du pushdown : DATE_TRUNC et MONEY_FORMAT. Pour désactiver le pushdown des fonctions, définissez enable_func_pushdown=false. Exécutez EXPLAIN pour vérifier quelles conditions sont transférées.

Limite du nombre de lignes

Si une requête contient le mot-clé LIMIT, SelectDB le traduit dans la syntaxe appropriée pour la base de données cible.

Écrire des données

Après avoir créé un Catalog JDBC, écrivez des données à l'aide de INSERT INTO ou INSERT INTO...SELECT :

-- Write a single row
INSERT INTO mysql_catalog.mysql_database.mysql_table VALUES(1, "doris");

-- Write query results
INSERT INTO mysql_catalog.mysql_database.mysql_table SELECT * FROM table;

Pour des volumes de données importants, privilégiez INSERT INTO...SELECT plutôt que INSERT INTO. L'instruction INSERT INTO est inefficace pour les écritures en masse.

Transactions

Les données provenant de SelectDB sont écrites par lots dans un Catalog JDBC. Si une importation est interrompue, les données précédemment écrites peuvent nécessiter une annulation (rollback). Pour gérer cela, le Catalog JDBC prend en charge les transactions pour les écritures de données. Pour activer la prise en charge des transactions, définissez la variable de session enable_odbc_transcation :

SET enable_odbc_transcation = TRUE;

Les transactions garantissent l'atomicité des écritures vers les tables externes JDBC, mais réduisent les performances d'écriture. Activez les transactions uniquement lorsque la cohérence des données est critique.