Tüm Ürünler
Search
Belge Merkezi

ApsaraDB for SelectDB:JDBC veri kaynakları

Son Güncelleme:Oct 07, 2026

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:

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 yerel jdbc_drivers/ dizininde arama yapar. Aşağıdaki dört sürücü paketi önceden yüklenmiştir:

    • mysql-connector-java-8.0.25.jar

    • postgresql-42.5.1.jar

    • mssql-jdbc-11.2.3.jre8.jar

    • ojdbc8.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=true ayarlarsanız ve Oracle'da TEST şemasında TEST adlı bir tablo varsa bunu SELECT * FROM oracle_catalog.test.test ile sorgulayabilirsiniz. SelectDB, test.test ifadesini otomatik olarak TEST.TEST biç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, SelectDB ve selectdb) belirsizlik nedeniyle SelectDB bunları sorgulayamaz.

  • Frontend (FE) lower_case_table_names parametresi 1 veya 2 olarak ayarlanmışsa JDBC kataloğunun lower_case_table_names parametresini true olarak ayarlayın. FE parametresi 0 ise bunu true veya false (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 ile include_database_list veya exclude_database_list kullanırken ojdbc8.jar veya 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

Önemli

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.