Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
Bu özellik Databricks Runtime 17.3 ve üzeri sürümlerde çalışma alanı düzeyinde bir betadır. Bu özelliği çalışma alanınızda etkinleştirmek için bkz. Çalışma alanı düzeyinde önizlemeleri yönetme.
Azure Databricks, JDBC kullanarak dış veritabanlarına bağlanmayı destekler. Spark Veri Kaynağı API'siyle veya Azure Databricks Remote Query SQL API'siyle bir veri kaynağını okumak ve yazmak için JDBC Unity Kataloğu bağlantısı kullanabilirsiniz. JDBC bağlantısı, Unity Kataloğu'nda bir dış veritabanına erişmek için JDBC sürücüsünü, URL yolunu ve kimlik bilgilerini belirten güvenli hale getirilebilir bir nesnedir. JDBC bağlantısı sunucusuz, standart kümeler, ayrılmış kümeler ve Databricks SQL gibi Unity Kataloğu işlem türlerinde desteklenir.
JDBC bağlantısı kullanmanın avantajları
- Spark Veri Kaynağı API'siyle JDBC kullanarak veri kaynaklarına okuma ve yazma.
- Uzaktan Sorgu SQL API'sini kullanarak JDBC ile veri kaynaklarından okuma.
- Unity Kataloğu bağlantısı kullanarak veri kaynağına yönetilen erişim.
- Bağlantıyı bir kez oluşturun ve herhangi bir Unity Kataloğu işleminde yeniden kullanabilirsiniz.
- Spark ve işlem yükseltmeleri için kararlı.
- Bağlantı kimlik bilgileri sorgulayan kullanıcıdan gizlenir.
JDBC ile sorgu federasyonu karşılaştırması
JDBC, sorgu federasyonu için tamamlayıcıdır. Databricks, aşağıdaki nedenlerle sorgu federasyonunun seçilmesini önerir:
- Sorgu federasyonu, yabancı bir katalog kullanarak tablo düzeyinde ayrıntılı erişim denetimleri ve idare sağlar. JDBC Unity Kataloğu bağlantısı yalnızca bağlantı düzeyinde idare sağlar.
- Sorgu federasyonu, en iyi sorgu performansı için Spark sorgularını aşağı doğru iter.
Uyarı
Sorgu federasyonu Oracle, MySQL, PostgreSQL, SQL Server ve Snowflake gibi birçok popüler veritabanını destekler. Veritabanınız destekleniyorsa Databricks, JDBC bağlantısı yerine sorgu federasyonu kullanılmasını önerir. Desteklenen veritabanlarının tam listesi için bkz. Lakehouse Federasyonu .
Ancak, aşağıdaki senaryolarda bir JDBC Unity Kataloğu bağlantısı kullanmayı seçin:
- Veritabanınız sorgu federasyonu tarafından desteklenmiyor.
- Belirli bir JDBC sürücüsü kullanmak istiyorsunuz.
- Veri kaynağına Spark kullanarak yazmanız gerekiyor (sorgu federasyonu yazma işlemlerini desteklemez).
- Spark Veri Kaynağı API seçenekleri aracılığıyla daha fazla esneklik, performans ve paralelleştirme denetimine ihtiyacınız vardır.
- Spark
queryseçeneğiyle sorguları aşağı göndermek istiyorsunuz.
Neden JDBC ile PySpark veri kaynaklarını karşılaştırmalı olarak kullanmalısınız?
PySpark veri kaynakları , JDBC Spark veri kaynağına alternatiftir.
JDBC bağlantısı kullanın:
- Yerleşik Spark JDBC desteğini kullanmak istiyorsanız.
- Mevcut, kullanıma hazır bir JDBC sürücüsünü kullanmak istiyorsanız.
- Bağlantı düzeyinde Unity Kataloğu idaresine ihtiyacınız varsa.
- Herhangi bir Unity Kataloğu işlem türünden bağlanmak istiyorsanız: sunucusuz, standart, ayrılmış, SQL API.
- Python, Scala ve SQL API'leriyle bağlantınızı kullanmak istiyorsanız.
PySpark veri kaynağı kullanın:
- Python kullanarak Spark veri kaynağınızı veya veri havuzunuzu geliştirme ve tasarlama esnekliğine sahip olmak istiyorsanız.
- Yalnızca not defterlerinde veya PySpark iş yüklerinde kullanıyorsanız.
- Özel bölümleme mantığı uygulamak istiyorsanız.
Ne JDBC ne de PySpark veri kaynakları koşul göndermeyi destekler. Ayrıca, işlemlerin sırasını seçmeye yardımcı olmak için istatistikleri sorgu iyileştiricisine sunmaz.
Nasıl çalışır?
JDBC bağlantısı kullanarak bir veri kaynağına bağlanmak için Spark işlemde JDBC sürücüsünü yükleyin. Bağlantı, Spark güvenliği ve Unity Kataloğu idaresi sağlamak için JDBC sürücüsünü Spark işlem tarafından erişilebilen yalıtılmış bir korumalı alana belirtmenize ve yüklemenize olanak tanır. Korumalı alanlama hakkında daha fazla bilgi için bkz. Databricks kullanıcı yalıtımını nasıl sağlar?.
Başlamadan önce
Sunucusuz ve standart kümelerde Spark Veri Kaynağı API'siyle JDBC bağlantısı kullanmak için önce aşağıdaki gereksinimleri karşılamanız gerekir:
Çalışma alanı gereksinimleri:
- Unity Kataloğu için etkinleştirilmiş bir Azure Databricks çalışma alanı
İşlem gereksinimleri:
- İşlem kaynağınızdan hedef veritabanı sistemine ağ bağlantısı. Bkz. Ağ bağlantısı.
- Azure Databricks işlem, standart modda veya ayrılmış erişim modunda sunucusuz veya Databricks Runtime 17.3 LTS veya üzerini kullanmalıdır.
- SQL ambarları profesyonel veya sunucusuz olmalı ve 2025.35 veya üzerini kullanmalıdır.
Gerekli izinler:
- Bir bağlantı oluşturmak için, çalışma alanına bağlı meta veri deposunda
CREATE CONNECTIONayrıcalığına sahip olmanız gerekir. -
CREATEveyaMANAGEbağlantı oluşturucusunun bir Unity Catalog birimine erişimi. - Bağlantıyı sorgulayan kullanıcının hacim erişimi.
- Aşağıdaki her görev tabanlı bölümde ek izinler belirtilir.
1. Adım: Birim oluşturma ve JDBC JAR'ı yükleme
JDBC bağlantısı, JDBC sürücüsü JAR'sini bir Unity Kataloğu biriminden okur ve yükler.
Mevcut bir birime yazma ve okuma erişiminiz yoksa yeni bir birim oluşturun:
CREATE VOLUME IF NOT EXISTS my_catalog.my_schema.my_volume_JARsJDBC sürücüsü JAR'sini birime yükleyin.
Bağlantıyı sorgulayan kullanıcılara birim üzerinde okuma erişimi verin:
GRANT READ VOLUME ON VOLUME my_catalog.my_schema.my_volume_JARs TO `account users`
2. Adım: JDBC bağlantısı oluşturma
JDBC bağlantısı, Unity Kataloğu'nda dış veritabanı sistemine erişmek için JDBC sürücüsünü, URL yolunu ve kimlik bilgilerini ve sorgulayan kullanıcı tarafından kullanılacak izin verilen seçenekleri belirten güvenli hale getirilebilir bir nesnedir. Bağlantı oluşturmak için, Bir Azure Databricks not defterinde veya CREATE CONNECTION Databricks SQL sorgu düzenleyicisinde Katalog Gezgini'ni veya SQL komutunu kullanın.
Uyarı
Bağlantı oluşturmak için Databricks REST API'sini veya Databricks CLI'yi de kullanabilirsiniz. Bkz. POST /api/2.1/unity-catalog/connections ve Unity Catalog komutları.
Gerekli izinler: Meta veri deposu yöneticisi veya ayrıcalığına CREATE CONNECTION sahip kullanıcı.
Katalog Tarayıcısı
- Azure Databricks çalışma alanınızda
Katalog'a gidin.
-
Katalog bölmesinin üst kısmında
tıklayın ve menüden Bağlantı oluştur'u seçin. - Bağlantı temel bilgileri sayfasında, Bağlantı ayarlama sihirbazını açın ve kullanıcı dostu bir Bağlantı adıgirin.
- JDBCbağlantı türünü seçin.
- (İsteğe bağlı) Açıklama ekleyin.
- Nextöğesine tıklayın.
-
Kimlik Doğrulaması sayfasında aşağıdaki bağlantı özelliklerini girin:
-
JDBC URL'si: Veritabanınızın JDBC bağlantı URL'si (örneğin,
jdbc:oracle:thin:@<host>:<port>:<SID>). - Kullanıcı: Veritabanı kullanıcı adı.
- Parola: Veritabanı parolası.
-
JDBC sürücü yolu: JDBC sürücü JAR'sinin Unity Kataloğu birim yolu (örneğin,
/Volumes/<catalog>/<schema>/<volume_name>/ojdbc11.jar).
-
JDBC URL'si: Veritabanınızın JDBC bağlantı URL'si (örneğin,
- Bağlantı oluştur'a tıklayın.
SQL
Not defterinde veya SQL sorgu düzenleyicisinde aşağıdaki komutu çalıştırarak ilgili birimi, URL'yi, kimlik bilgilerini ve externalOptionsAllowListayarlayın:
DROP CONNECTION IF EXISTS <JDBC-connection-name>;
CREATE CONNECTION <JDBC-connection-name> TYPE JDBC
ENVIRONMENT (
java_dependencies '["/Volumes/<catalog>/<Schema>/<volume_name>/JDBC_DRIVER_JAR_NAME.jar"]'
)
OPTIONS (
url 'jdbc:<database_URL_host_port>',
user '<user>',
password '<password>',
externalOptionsAllowList 'dbtable,query,partitionColumn,lowerBound,upperBound,numPartitions'
);
DESCRIBE CONNECTION <JDBC-connection-name>;
Örnek: Oracle JDBC bağlantısı
Aşağıdaki örnek, Oracle ince sürücüsünü kullanarak oracle veritabanına JDBC bağlantısı oluşturur. Bu komutu çalıştırmadan önce ojdbc11.jar sürücü JAR'sini (örneğin, ) indirin ve bir Unity Kataloğu birimine yükleyin.
CREATE CONNECTION oracle_connection TYPE JDBC
ENVIRONMENT (
java_dependencies '["/Volumes/my_catalog/my_schema/my_volume_JARs/ojdbc11.jar"]'
)
OPTIONS (
url 'jdbc:oracle:thin:@<host>:<port>:<SID>',
user '<oracle_user>',
password '<oracle_password>',
externalOptionsAllowList 'dbtable,query'
);
Bağlantı sahibi veya yöneticisi, JDBC sürücüsü tarafından desteklenen ek seçenekleri bağlantıya ekleyebilir.
Güvenlik nedeniyle, bağlantıda tanımlanan seçenekler sorgu zamanında geçersiz kılınamaz. Kullanıcılar yalnızca bağlantıda henüz tanımlanmamış Spark veri kaynağı seçeneklerini belirtebilir.
, externalOptionsAllowList bağlantı oluşturucusunun kullanıcıların sorgu zamanında hangi Spark veri kaynağı seçeneklerini sağlayabileceklerini belirtmesini sağlar. Bu örnekte kullanıcılar yalnızca şunu kullanabilir: 'dbtable,query,partitionColumn,lowerBound,upperBound,numPartitions'.
externalOptionsAllowList yalnızca Unity Kataloğu bağlantısında belirtilen seçeneklerin kullanıldığından emin olmak için boş bir dize olabilir. URL ve konağın kullanıcılar tarafından belirtilmesine hiçbir zaman izin verilmez.
URL, bağlantı oluşturulurken tek zorunlu seçenektir. İzin verilenler listesi belirtilmezse, şunu içeren varsayılan bir izin verilenler listesi kullanılır: 'dbtable,query,partitionColumn,lowerBound,upperBound,numPartitions'.
Databricks, bağlantıdaki kimlik bilgilerinin belirtilmesini öneriyor.
3. Adım: USE ayrıcalığını ver
Kullanıcılara USE bağlantıda ayrıcalık verin:
GRANT USE CONNECTION ON CONNECTION <connection-name> TO <user-name>;
Mevcut bağlantıları yönetme hakkında bilgi için bkz Lakehouse Federation için Bağlantıları Yönetme.
4. Adım: Veri kaynağını sorgulama
Ayrıcalığı olan USE CONNECTION kullanıcılar JDBC bağlantısını kullanarak veri kaynağını Spark aracılığıyla sorgulayabilir veya uzaktan sorgulama yapmak için SQL API'sini kullanabilir. Kullanıcılar JDBC sürücüsü tarafından desteklenen ve JDBC bağlantısında externalOptionsAllowList belirtilen spark veri kaynağı seçeneklerini ekleyebilir (örneğin, bu örnekte: 'dbtable,query,partitionColumn,lowerBound,upperBound,numPartitions'). İzin verilen seçenekleri görüntülemek için aşağıdaki sorguyu çalıştırın:
DESCRIBE CONNECTION <JDBC-connection-name>;
Piton
df = (
spark.read.format('jdbc')
.option('databricks.connection', '<JDBC-connection-name>')
.option('query', 'select * from <table_name>') # query in Database native SQL language - Option specified by querying user
.load()
)
df.display()
SQL
SELECT * FROM
remote_query('<JDBC-connection-name>', query => 'SELECT * FROM <table>'); -- query in Database native SQL language - Option specified by querying user
Migration
Databricks, mevcut Spark Veri Kaynağı API iş yüklerinden geçiş yapmak için aşağıdakileri yapmanızı önerir:
- Spark Veri Kaynağı API'sindeki seçeneklerden URL'yi ve kimlik bilgilerini kaldırın.
-
databricks.connectionSpark Veri Kaynağı API'sindeki seçeneklere öğesini ekleyin. - İlgili URL ve kimlik bilgileriyle bir JDBC bağlantısı oluşturun.
- Bağlantıda, statik olması ve kullanıcıları sorgulayarak belirtilmemesi gereken seçenekleri belirtin.
- Bağlantının
externalOptionsAllowListiçinde, Spark Veri Kaynağı API kodunda sorgu zamanında kullanıcılar tarafından ayarlanması veya değiştirilmesi gereken veri kaynağı seçeneklerini belirtin (örneğin,'dbtable,query,partitionColumn,lowerBound,upperBound,numPartitions').
Sınırlamalar
Spark Veri Kaynağı API'si
- URL ve konak Spark Veri Kaynağı API'sine eklenemez.
-
.option("databricks.connection", "<Connection_name>")gereklidir. - Bağlantıda tanımlanan seçenekler sorgu zamanında kodunuzdaki Veri Kaynağı API'sinde kullanılamaz.
- Kullanıcıları sorgulayarak yalnızca içinde
externalOptionsAllowListbelirtilen seçenekler kullanılabilir. - JDBC sürücüsünün bellek sınırı 400 MiB'dir. Sınıra ulaşılırsa daha küçük
fetchSizebir sınır kullanmayı göz önünde bulundurun.
Support
- Spark veri kaynakları desteklenmez.
- Spark Deklaratif İşlem Hatları desteklenmez.
- Oluşturma sırasında bağlantı bağımlılığı:
java_dependenciesyalnızca JDBC sürücüsü JAR'leri için birim konumlarını destekler. - Sorguda bağlantı bağımlılığı: Bağlantı kullanıcısının JDBC sürücüsü JAR'sinin bulunduğu birime erişmesi gerekir
READ. - Ayrılmış erişim modunda (eski adıyla tek kullanıcılı erişim modu) kullanmak için bağlantının sahibi veya yöneticisi olmanız gerekir.
- SSL sertifikaları desteklenmez.
- Yabancı kataloglar JDBC bağlantılarında desteklenmez.
Authentication
- Yalnızca temel kimlik doğrulaması desteklenir (kullanıcı adı ve parola). Unity Kataloğu kimlik bilgileri, OAuth veya hizmet kimlik bilgileri için destek yoktur.
Ağ Kurma
- Hedef veritabanı sistemi ve Azure Databricks çalışma alanı aynı VPC'de olamaz.
Ağ bağlantısı
İşlem kaynağınızdan hedef veritabanı sistemine ağ bağlantısı gereklidir. Genel ağ yönergeleri için bkz. Lakehouse Federasyonu için ağ önerileri.
Klasik işlem: standart ve ayrılmış kümeler
Azure Databricks VPC'leri yalnızca Spark kümelerine izin verecek şekilde yapılandırılır. Başka bir altyapıya bağlanmak için hedef veritabanı sistemini farklı bir VPC'ye yerleştirin ve VPC eşlemesini kullanın. VPC eşlemesi oluşturulduktan sonra kümedeki veya ambardaki connectionTest UDF ile bağlantınızı denetleyin.
Azure Databricks çalışma alanınız ve hedef veritabanı sistemleriniz aynı VPC'deyse Databricks aşağıdakilerden birini önerir:
- Sunucusuz işlem kullanın.
- Hedef veritabanınızı 80 ve 443 numaralı bağlantı noktaları üzerinden TCP ve UDP trafiğine izin verecek şekilde yapılandırın ve bu bağlantı noktalarını bağlantıda belirtin.
Serverless
Sunucusuz işlemde JDBC bağlantınızı kullanırken, kararlı IP'ler için sunucusuz işlem erişimi için bir güvenlik duvarı yapılandırın veya özel bağlantı yapılandırın.
Bağlantı testi
Azure Databricks işlem ile veritabanı sisteminiz arasındaki bağlantıyı test etmek için aşağıdaki UDF'yi kullanın:
CREATE OR REPLACE TEMPORARY FUNCTION connectionTest(host string, port string) RETURNS string LANGUAGE PYTHON AS $$
import subprocess
try:
command = ['nc', '-zv', host, str(port)]
result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return str(result.returncode) + "|" + result.stdout.decode() + result.stderr.decode()
except Exception as e:
return str(e)
$$;
SELECT connectionTest('<database-host>', '<database-port>');