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 :
Tous les nœuds du cluster source et votre instance SelectDB communiquent sur le réseau. Ils doivent se trouver dans le même Virtual Private Cloud (VPC). Sinon, résolvez d'abord le problème de connectivité. Pour plus d'informations, consultez Comment résoudre les problèmes de connectivité réseau entre une instance SelectDB et une source de données ?.
Les adresses IP de tous les nœuds du cluster source figurent dans la liste d'autorisation de l'instance SelectDB. Pour plus d'informations, consultez Configurer une liste d'autorisation.
-
Si le cluster source possède sa propre liste d'autorisation, ajoutez-y le bloc CIDR de l'instance SelectDB.
Pour obtenir l'adresse IP VPC de l'instance SelectDB, consultez Comment afficher les adresses IP du VPC auquel appartient mon instance ApsaraDB SelectDB ?.
Pour obtenir l'adresse IP publique, exécutez la commande
pingsur l'endpoint public de l'instance SelectDB.
Vous maîtrisez les concepts fondamentaux des catalogs. Pour plus d'informations, consultez Data lakehouse.
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 localjdbc_drivers/. Les quatre packages de pilotes suivants sont préinstallés :mysql-connector-java-8.0.25.jarpostgresql-42.5.1.jarmssql-jdbc-11.2.3.jre8.jarojdbc8.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=trueet qu'Oracle contient une table nomméeTESTdans le schémaTEST, vous pouvez l'interroger avecSELECT * FROM oracle_catalog.test.test. SelectDB convertit automatiquementtest.testenTEST.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,
SelectDBetselectdb), SelectDB ne peut pas les interroger en raison de l'ambiguïté.Si le paramètre frontend (FE)
lower_case_table_namesest défini à1ou2, définissez le paramètrelower_case_table_namesdu Catalog JDBC àtrue. Si le paramètre FE est0, vous pouvez le définir àtrueoufalse(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 deinclude_database_listouexclude_database_listavec Oracle, utilisezojdbc8.jarou 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
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.