JDBC Catalog, SelectDB'yi standart JDBC protokolü aracılığıyla harici veritabanlarına bağlar. Bağlantı kurulduktan sonra SelectDB, harici veri kaynağından meta verileri otomatik olarak senkronize eder ve verileri taşımanıza gerek kalmadan MySQL, PostgreSQL, Oracle, SQLServer, ClickHouse, Doris, SAP HANA, Trino/Presto ve OceanBase arasında birleşik sorgular çalıştırmanızı sağlar.
Ön koşullar
Başlamadan önce aşağıdakilerin sağlandığından emin olun:
Veri kaynağı kümesindeki tüm düğümler ile SelectDB örneğiniz ağ üzerinden iletişim kurabilmelidir. Aynı Virtual Private Cloud (VPC) içinde olmaları gerekir. Değillerse öncelikle bağlantı sorununu çözün. Daha fazla bilgi için bkz. Bir SelectDB örneği ile bir veri kaynağı arasındaki ağ bağlantısı sorunlarını nasıl çözerim?
Veri kaynağı kümesindeki tüm düğümlerin IP adreslerini SelectDB örneği izin listesine ekleyin. Daha fazla bilgi için bkz. İzin listesi yapılandırma.
-
Kaynak kümenin kendi izin listesi varsa SelectDB örneğinin CIDR bloğunu bu listeye ekleyin.
SelectDB örneğinin VPC IP adresini almak için bkz. ApsaraDB SelectDB örneğimin ait olduğu VPC'deki IP adreslerini nasıl görüntülerim?
Genel IP adresini almak için SelectDB örneğinin genel uç noktasına
pingkomutunu uygulayın.
Kataloglar hakkında temel bilgi sahibi olun. Daha fazla bilgi için bkz. Veri göl evi.
JDBC kataloğu oluşturma
Sözdizimi
CREATE CATALOG <catalog_name>
PROPERTIES ("key"="value", ...)
Parametreler
| Parametre | Zorunlu | Varsayılan | Açıklama |
|---|---|---|---|
user |
Evet | — | Veritabanı hesabının kullanıcı adı. |
password |
Evet | — | Veritabanı hesabının parolası. |
jdbc_url |
Evet | — | JDBC bağlantı dizesi. Biçim veritabanına göre değişir: 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. Tam liste için aşağıdaki veritabanı bazlı örnekleri inceleyin. |
driver_url |
Evet | — | JDBC sürücü JAR dosyasının yolu. Yerel jdbc_drivers/ dizininden yüklemek için bir dosya adı (örneğin, mysql-connector-java-8.0.25.jar) belirtin veya dosyayı indirmek için bir HTTP URL'si girin. |
driver_class |
Evet | — | JDBC sürücüsünün sınıf adı. Yaygın değerler: MySQL — com.mysql.cj.jdbc.Driver; PostgreSQL — org.postgresql.Driver; Oracle — oracle.jdbc.driver.OracleDriver; SQLServer — com.microsoft.sqlserver.jdbc.SQLServerDriver. Diğer veritabanları için veritabanı bazlı örnekleri inceleyin. |
lower_case_table_names |
Hayır | "false" |
true olduğunda veritabanı ve tablo adlarını küçük harfle senkronize eder. Bkz. Küçük harfli ad senkronizasyonu. |
only_specified_database |
Hayır | "false" |
true olduğunda yalnızca include_database_list içinde belirtilen veritabanlarını senkronize eder. |
include_database_list |
Hayır | "" |
Yalnızca only_specified_database=true olduğunda etkili olur. Senkronize edilecek veritabanlarının virgülle ayrılmış listesi. Büyük/küçük harfe duyarlıdır. |
exclude_database_list |
Hayır | "" |
Yalnızca only_specified_database=true olduğunda etkili olur. Hariç tutulacak veritabanlarının virgülle ayrılmış listesi. Büyük/küçük harfe duyarlıdır. Bir veritabanı her iki listede de görünüyorsa exclude_database_list önceliklidir. |
Sürücü paketi yolu
driver_url parametresi iki biçimi kabul eder:
-
Dosya adı — örneğin,
mysql-connector-java-8.0.25.jar. SelectDB yereljdbc_drivers/dizininde arama yapar. Aşağıdaki dört sürücü paketi önceden yüklenmiştir:mysql-connector-java-8.0.25.jarpostgresql-42.5.1.jarmssql-jdbc-11.2.3.jre8.jarojdbc8.jar
HTTP URL — örneğin,
https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/jdbc_driver/mysql-connector-java-8.0.25.jar. SelectDB dosyayı bu URL'den indirir. Yalnızca kimlik doğrulaması gerektirmeyen HTTP hizmetleri desteklenir.
Küçük harfli ad senkronizasyonu
lower_case_table_names=true olduğunda SelectDB küçük harften gerçek ada eşleme tutar. Böylece orijinal büyük/küçük harf durumundan bağımsız olarak veritabanlarını ve tabloları küçük harfli adlarla sorgulayabilirsiniz.
Sürüme göre davranış:
SelectDB 2.X — Yalnızca Oracle için etkilidir. Tüm veritabanı ve tablo adları sorgu Oracle'a gönderilmeden önce büyük harfe dönüştürülür. Örneğin,
lower_case_table_names=trueayarlarsanız ve Oracle'daTESTşemasındaTESTadlı bir tablo varsa bunuSELECT * FROM oracle_catalog.test.testile sorgulayabilirsiniz. SelectDB,test.testifadesini otomatik olarakTEST.TESTbiçimine dönüştürür.SelectDB 3.X ve sonraki sürümler — Tüm veritabanları için etkilidir. Adlar sorgu yürütülmeden önce gerçek büyük/küçük harf durumuna dönüştürülür. Daha eski bir sürümden yükseltme yaptıysanız bu değişikliğin etkili olması için
REFRESH <catalog_name>komutunu çalıştırın.
Kısıtlamalar:
İki veritabanı veya tablo adı yalnızca büyük/küçük harf açısından farklılık gösteriyorsa (örneğin,
SelectDBveselectdb) belirsizlik nedeniyle SelectDB bunları sorgulayamaz.Frontend (FE)
lower_case_table_namesparametresi1veya2olarak ayarlanmışsa JDBC kataloğununlower_case_table_namesparametresinitrueolarak ayarlayın. FE parametresi0ise bunutrueveyafalse(varsayılan:false) olarak ayarlayabilirsiniz.
Belirli veritabanlarını senkronize etme
SelectDB'nin hangi veritabanlarını senkronize edeceğini sınırlamak için only_specified_database, include_database_list ve exclude_database_list parametrelerini birlikte kullanın.
JDBC üzerinden bağlanırken jdbc_url içinde önceden bir veritabanı seçebilirsiniz. Örneğin MySQL URL'sinde veritabanı adını belirtin veya PostgreSQL URL'sinde currentSchema kullanın.
Oracle ileinclude_database_listveyaexclude_database_listkullanırkenojdbc8.jarveya daha yeni bir sürüm kullanın.
Veritabanı bazlı örnekler
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"
)
Düzey eşlemesi
| SelectDB | MySQL |
|---|---|
| Katalog | MySQL Sunucusu |
| Veritabanı | Veritabanı |
| Tablo | Tablo |
Tür eşlemesi
| MySQL türü | SelectDB türü | Notlar |
|---|---|---|
| BOOLEAN | TINYINT | |
| TINYINT | TINYINT | |
| SMALLINT | SMALLINT | |
| MEDIUMINT | INT | |
| INT | INT | |
| BIGINT | BIGINT | |
| UNSIGNED TINYINT | SMALLINT | SelectDB'de UNSIGNED türü yoktur; aralık bir üst seviyeye genişletilir. |
| UNSIGNED MEDIUMINT | INT | SelectDB'de UNSIGNED türü yoktur; aralık bir üst seviyeye genişletilir. |
| UNSIGNED INT | BIGINT | SelectDB'de UNSIGNED türü yoktur; aralık bir üst seviyeye genişletilir. |
| UNSIGNED BIGINT | LARGEINT | |
| FLOAT | FLOAT | |
| DOUBLE | DOUBLE | |
| DECIMAL | DECIMAL | |
| UNSIGNED DECIMAL(p,s) | DECIMAL(p+1,s) / STRING | p+1 > 38 ise STRING kullanılır. |
| DATE | DATE | |
| TIMESTAMP | DATETIME | |
| DATETIME | DATETIME | |
| YEAR | SMALLINT | |
| TIME | STRING | |
| CHAR | CHAR | |
| VARCHAR | VARCHAR | |
| JSON | JSON | |
| SET | STRING | |
| BIT | BOOLEAN / STRING | BIT(1), BOOLEAN'a eşlenir; diğer tüm BIT türleri STRING'e eşlenir. |
| TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT | STRING | |
| BLOB, MEDIUMBLOB, LONGBLOB, TINYBLOB | STRING | |
| TINYSTRING, STRING, MEDIUMSTRING, LONGSTRING | STRING | |
| BINARY, VARBINARY | STRING | |
| Diğer | DESTEKLENMİYOR |
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"
);
Düzey eşlemesi
Bir SelectDB veritabanı, jdbc_url içinde belirtilen PostgreSQL veritabanındaki bir şemaya (örneğin, demo içindeki şemalar) eşlenir.
| SelectDB | PostgreSQL |
|---|---|
| Katalog | Veritabanı |
| Veritabanı | Şema |
| Tablo | Tablo |
SelectDB erişilebilir şemaları şu sorguyu çalıştırarak alır: SELECT nspname FROM pg_namespace WHERE has_schema_privilege('<UserName>', nspname, 'USAGE');
Tür eşlemesi
| PostgreSQL türü | SelectDB türü | Notlar |
|---|---|---|
| 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), BOOLEAN'a eşlenir; diğer tüm bit türleri STRING'e eşlenir. |
| uuid | STRING | |
| Diğer | DESTEKLENMİYOR |
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"
);
Düzey eşlemesi
Bir SelectDB veritabanı Oracle'daki bir kullanıcıya eşlenir. Bir tablo kullanıcının erişim iznine sahip olduğu bir tabloya eşlenir.
| SelectDB | Oracle |
|---|---|
| Katalog | Veritabanı |
| Veritabanı | Kullanıcı |
| Tablo | Tablo |
Oracle SYNONYM TABLE'ların senkronizasyonu desteklenmez.
Tür eşlemesi
| Oracle türü | SelectDB türü | Notlar | ||
|---|---|---|---|---|
| number(p) / number(p,0) | TINYINT / SMALLINT / INT / BIGINT / LARGEINT | p değerine göre eşlenir: p < 3 → TINYINT; p < 5 → SMALLINT; p < 10 → INT; p < 19 → BIGINT; p > 19 → LARGEINT | ||
| number(p,s) [s > 0 ve p > s ise] | DECIMAL(p,s) | |||
| number(p,s) [s > 0 ve p < s ise] | DECIMAL(s,s) | |||
| number(p,s) [s < 0 ise] | TINYINT / SMALLINT / INT / BIGINT / LARGEINT | SelectDB p değerini `p+ | s | olarak ayarlar ve number(p)/number(p,0)` ile aynı eşlemeyi uygular. |
| number (p veya s belirtilmemiş) | Desteklenmiyor | SelectDB açık hassasiyet ve ölçek belirtilmeyen Oracle NUMBER türünü şu anda desteklememektedir. |
||
| decimal | DECIMAL | |||
| float / real | DOUBLE | |||
| DATE | DATETIME | |||
| TIMESTAMP | DATETIME | |||
| CHAR / NCHAR | STRING | |||
| VARCHAR2 / NVARCHAR2 | STRING | |||
| LONG / RAW / LONG RAW / INTERVAL | STRING | |||
| Diğer | DESTEKLENMİYOR |
SQLServer
SelectDB 3.0.8 ve sonraki sürümler için encrypt=false ifadesini jdbc_url içine dahil edin.
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"
);
Düzey eşlemesi
Bir SelectDB veritabanı, jdbc_url içinde belirtilen SQLServer veritabanındaki bir şemaya (örneğin, SelectDB_test içindeki şemalar) eşlenir.
| SelectDB | SQLServer |
|---|---|
| Katalog | Veritabanı |
| Veritabanı | Şema |
| Tablo | Tablo |
Tür eşlemesi
| SQLServer türü | SelectDB türü |
|---|---|
| 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 |
| Diğer | DESTEKLENMİYOR |
Doris
SelectDB Doris'e MySQL JDBC sürücüsü kullanarak bağlanır.
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"
)
Tür eşlemesi
| Doris türü | SelectDB türü | Notlar |
|---|---|---|
| BOOLEAN | BOOLEAN | |
| TINYINT | TINYINT | |
| SMALLINT | SMALLINT | |
| INT | INT | |
| BIGINT | BIGINT | |
| LARGEINT | LARGEINT | |
| FLOAT | FLOAT | |
| DOUBLE | DOUBLE | |
| DECIMALV3 | DECIMALV3 / STRING | DECIMAL alanının hassasiyetine ve ölçeğine göre seçilir. |
| DATE | DATE | |
| DATETIME | DATETIME | |
| CHAR | CHAR | |
| VARCHAR | VARCHAR | |
| STRING | STRING | |
| TEXT | STRING | |
| HLL | HLL | HLL sütunlarını sorgulamak için return_object_data_as_binary=true ayarlayın. |
| Array | Array | İç tür eşlemesi yukarıdaki kurallara uyar. İç içe geçmiş karmaşık türler desteklenmez. |
| BITMAP | BITMAP | BITMAP sütunlarını sorgulamak için return_object_data_as_binary=true ayarlayın. |
| Diğer | DESTEKLENMİYOR |
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"
);
Düzey eşlemesi
| SelectDB | ClickHouse |
|---|---|
| Katalog | ClickHouse Sunucusu |
| Veritabanı | Veritabanı |
| Tablo | Tablo |
Tür eşlemesi
| ClickHouse türü | SelectDB türü |
|---|---|
| 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 |
| Diğer | DESTEKLENMİYOR |
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"
)
Düzey eşlemesi
| SelectDB | SAP HANA |
|---|---|
| Katalog | Veritabanı |
| Veritabanı | Şema |
| Tablo | Tablo |
Tür eşlemesi
| SAP HANA türü | SelectDB türü |
|---|---|
| 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 OceanBase'in MySQL mi yoksa Oracle modunda mı çalıştığını otomatik olarak algılar. Düzey eşlemesi ve tür eşlemesi buna göre MySQL veya Oracle kurallarını takip eder. Bkz. MySQL ve Oracle bölümleri.
Veri sorgulama
JDBC kataloğundaki verileri sorgulamak için üç parçalı ad <catalog>.<database>.<table> biçimini kullanın:
SELECT * FROM mysql_catalog.mysql_database.mysql_table WHERE k1 > 1000 AND k3 = 'term';
Kaçış karakterleri: SelectDB her veritabanının standartlarına göre alan ve tablo adlarını otomatik olarak kaçış karakterleriyle işler. MySQL için geri tırnak, PostgreSQL ve Oracle için çift tırnak, SQLServer için köşeli parantez kullanılır. Bu durum alan adlarını büyük/küçük harfe duyarlı hale getirebilir. Uzak veritabanına gönderilen kaçışlı SQL'i görmek için bir sorguda EXPLAIN çalıştırın.
Predikat itme (Predicate pushdown)
SelectDB WHERE yan tümcesi koşullarını harici veri kaynağına iter. Böylece veriler kaynağında filtrelenir, gereksiz veri aktarımı azaltılır ve sorgu performansı artırılır.
enable_func_pushdown=true (oturum değişkeni) olduğunda SelectDB WHERE yan tümcesindeki işlevleri de harici veri kaynağına iter. Bu özellik yalnızca MySQL için desteklenir. Aşağıdaki işlevler itme işleminden hariç tutulur: DATE_TRUNC ve MONEY_FORMAT. İşlev itmeyi devre dışı bırakmak için enable_func_pushdown=false ayarlayın. Hangi koşulların itildiğini incelemek için EXPLAIN çalıştırın.
Satır sayısı sınırı
Bir sorgu LIMIT anahtar sözcüğünü içeriyorsa SelectDB bunu hedef veritabanı için uygun sözdizimine çevirir.
Veri yazma
Bir JDBC kataloğu oluşturduktan sonra verileri INSERT INTO veya INSERT INTO...SELECT kullanarak yazın:
-- 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;
Büyük veri hacimleri için INSERT INTO yerine INSERT INTO...SELECT kullanın. INSERT INTO deyimi toplu yazmalar için verimsizdir.
İşlemler
SelectDB'den gelen veriler bir JDBC kataloğuna toplu halde yazılır. Bir içe aktarma işlemi kesintiye uğrarsa daha önce yazılan verilerin geri alınması gerekebilir. Bunu işlemek için JDBC Kataloğu veri yazma işlemleri için işlemleri (transactions) destekler. İşlem desteğini etkinleştirmek için enable_odbc_transcation oturum değişkenini ayarlayın:
SET enable_odbc_transcation = TRUE;
İşlemler JDBC yabancı tablolarına yapılan yazmalar için atomikliği sağlar ancak yazma performansını düşürür. İşlemleri yalnızca veri tutarlılığının kritik olduğu durumlarda etkinleştirin.