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.
JDBC (Java Veritabanı Bağlantısı), istemci uygulamalarının veritabanlarından ve büyük veri platformlarından verilere bağlanmasını ve verilerle çalışmasını sağlayan yaygın olarak benimsenen bir standarttır.
Microsoft JDBC Driver for Fabric Data Engineering, JDBC standardının güvenilirliği ve sadeliğiyle Fabric'te Spark iş yüklerini bağlamanıza, sorgulamanıza ve yönetmenize olanak tanır. Fabric'in Livy API'leri üzerine inşa edilen sürücü, Java uygulamalarınıza ve BI araçlarınıza güvenli ve esnek Spark SQL bağlantısı sağlar. Bu entegrasyon, ayrı bir notebook veya Spark iş tanımı öğeleri oluşturmadan doğrudan Spark kodunu gönderip çalıştırmanızı sağlar. Sürücü, DbVisualizer ve DBeaver gibi popüler JDBC istemcilerinin yanı sıra Tableau da dahil olmak üzere JDBC bağlantısını destekleyen BI araçlarıyla uyumludur.
Önemli Özellikler
- JDBC 4.2 Uyumlu: JDBC 4.2 belirtiminin tam uygulaması
- Microsoft Entra Id Kimlik Doğrulaması: Etkileşimli, istemci kimlik bilgileri ve sertifika tabanlı kimlik doğrulaması dahil olmak üzere birden çok kimlik doğrulama akışı
- HikariCP entegrasyonu: HikariCP'yi üretim uygulamaları için JDBC bağlantılarını yönetmek ve yeniden kullanmak için kullanın
- Spark SQL Yerel Sorgu Desteği: Spark SQL deyimlerinin çeviri olmadan doğrudan yürütülmesi
- Kapsamlı Veri Türü Desteği: Karmaşık türler (ARRAY, MAP, STRUCT) dahil olmak üzere tüm Spark SQL veri türleri için destek
- Asenkron Sonuç Kümesi Ön Yükleme: Gelişmiş performans için arka plan verisi yükleme
- Devre Kesici Düzeni: Otomatik yeniden deneme ile basamaklı hatalara karşı koruma
- Otomatik Yeniden Bağlantı: Bağlantı hatalarında saydam oturum kurtarma
- Gelişmiş Yeniden Deneme Mantığı: İyileştirilmiş dayanıklılık için üstel geri çekilme ve oturum kurtarma ile yeniden deneme
- Proxy Desteği: Kurumsal ortamlar için HTTP ve SOCKS proxy yapılandırması
Önkoşullar
Microsoft JDBC Driver for Fabric Data Engineering'i kullanmadan önce, aşağıdaki özelliklere sahip olduğunuzdan emin olun:
- Java Development Kit (JDK): Sürüm 11 veya üzeri (Java 21 önerilir)
- Fabric Erişimi: Bir Fabric çalışma alanına erişim
- Microsoft Entra ID kimlik bilgileri: Kimlik doğrulaması için uygun kimlik bilgileri
- Çalışma Alanı ve Lakehouse Kimlikleri: Fabric çalışma alanınız ve lakehouse'unuz için GUID tanımlayıcıları
İndirme ve Yükleme
Microsoft JDBC Driver for Fabric Data Engineering sürüm 1.0.0, Java 11, 17 ve 21'i destekler. Java bağlantı desteğini sürekli geliştiriyoruz ve Microsoft JDBC sürücüsünün en son sürümüyle çalışmanızı öneririz.
- Microsoft JDBC Driver for Fabric Data Engineering (zip) indir
- Microsoft JDBC Driver for Fabric Data Engineering (tar) indir
- Yukarıdaki bağlantılardan zip veya tar dosyasını indirin.
- Sürücü JAR dosyalarına erişmek için indirilen dosyayı ayıklayın.
- JRE sürümünüzle eşleşen JAR dosyasını seçin:
- Java 11 için:
ms-sparksql-jdbc-1.0.1.jre11.jar - Java 17 için:
ms-sparksql-jdbc-1.0.1.jre17.jar - Java 21 için:
ms-sparksql-jdbc-1.0.1.jre21.jar
- Java 11 için:
- Seçili JAR dosyasını uygulamanızın sınıf yolu içine ekleyin.
- JDBC istemcileri için JDBC sürücü sınıfını yapılandırın:
com.microsoft.spark.livy.jdbc.LivyDriver
Hızlı Başlangıç Örneği
Bu örnek, Microsoft JDBC Driver for Fabric Data Engineering kullanılarak Fabric'e nasıl bağlanıp bir sorgu yürütüleceğini gösterir. Bu kodu çalıştırmadan önce önkoşulları tamamladığınızdan ve sürücüyü yüklediğinizden emin olun.
import java.sql.*;
public class QuickStartExample {
public static void main(String[] args) {
// Connection string with required parameters
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=2;" + // Azure CLI based authentication
"LogLevel=INFO";
try (Connection conn = DriverManager.getConnection(url)) {
// Execute a simple query
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 'Hello from Fabric!' as message")) {
if (rs.next()) {
System.out.println(rs.getString("message"));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Bağlantı Dizesi Biçimi
Temel Bağlantı Dizesi
Microsoft JDBC Driver for Fabric Data Engineering aşağıdaki bağlantı dizesi formatını kullanır:
jdbc:fabricspark://<hostname>[:<port>][;<parameter1>=<value1>;<parameter2>=<value2>;...]
Bağlantı Dizesi Bileşenleri
| Bileşen | Description | Example |
|---|---|---|
| Protokol | JDBC URL protokolü tanımlayıcısı | jdbc:fabricspark:// |
| Ana Bilgisayar Adı | Fabric endpoint hostname | api.fabric.microsoft.com |
| Port | İsteğe bağlı bağlantı noktası numarası (varsayılan: 443) | :443 |
| Parametreler | Noktalı virgülle ayrılmış anahtar=değer çiftleri | FabricWorkspaceID=<guid> |
Örnek Bağlantı Dizeleri
Temel Bağlantı (Etkileşimli Tarayıcı Tabanlı Kimlik Doğrulaması)
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=1
Spark Kaynak Yapılandırması ile
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2;AuthFlow=2
Spark Oturumu Özellikleri ile
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;spark.sql.adaptive.enabled=true;spark.sql.shuffle.partitions=200;AuthFlow=2
Authentication
Microsoft JDBC Driver for Fabric Data Engineering, Microsoft Entra ID (eski adıyla Azure Active Directory) üzerinden birden fazla kimlik doğrulama yöntemini destekler. Kimlik doğrulaması, bağlantı dizesindeki AuthFlow parametresi kullanılarak yapılandırılır.
Kimlik Doğrulama Akışları
| Kimlik Doğrulama Akışı | Kimlik Doğrulama Yöntemi | Kullanım Örneği |
|---|---|---|
| 1 | Etkileşimli Tarayıcı | OAuth 2.0 kullanarak etkileşimli kullanıcı kimlik doğrulaması |
| 2 | Azure Komut Satırı Arayüzü (Azure CLI) | Azure CLI kullanarak geliştirme |
| 3 | İstemci Gizli Kimlik Bilgileri (Hizmet Prensibi) | Otomatik/hizmet-hizmet kimlik doğrulaması |
| 4 | İstemci Sertifikası Kimlik Bilgileri | Sertifika tabanlı hizmet sorumlusu kimlik doğrulaması |
| 5 | Erişim Belirteci | Önceden alınan taşıyıcı erişim belirteci |
Etkileşimli Tarayıcı Kimlik Doğrulaması
İçin en iyisi: Geliştirme ve etkileşimli uygulamalar
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=1;" +
"AuthTenantID=<tenant-id>;" + // Optional
"LogLevel=INFO";
Connection conn = DriverManager.getConnection(url);
Parametreler:
-
AuthFlow=1: Etkileşimli tarayıcı kimlik doğrulamayı belirtir -
AuthTenantID(isteğe bağlı): Microsoft Entra kiracı kimliği -
AuthClientID(isteğe bağlı): Uygulama (istemci) kimliği
Davranış:
- Kullanıcı kimlik doğrulaması için bir tarayıcı penceresi açar
- Kimlik bilgileri süresi dolana kadar sonraki bağlantılar için önbelleğe alınır
- Tek kullanıcılı uygulamalar için uygundur
İstemci Kimlik Bilgileri veya Hizmet Sorumlusu Kimlik Doğrulaması
En uygun: Otomatik hizmetler ve arka plan işleri
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=3;" +
"AuthClientID=<client-id>;" +
"AuthClientSecret=<client-secret>;" +
"AuthTenantID=<tenant-id>;" +
"LogLevel=INFO";
Connection conn = DriverManager.getConnection(url);
Gerekli Parametreler:
-
AuthFlow=3: İstemci kimlik bilgileri ile kimlik doğrulaması yapılmasını belirtir -
AuthClientID: Microsoft Entra Id'den uygulama (istemci) kimliği -
AuthClientSecret: Microsoft Entra ID'den istemci sırrı -
AuthTenantID: Microsoft Entra kiracı kimliği
En İyi Yöntemler:
- Gizli dizileri güvenli bir şekilde depolama (Azure Key Vault, ortam değişkenleri)
- Mümkün olduğunda yönetilen kimlikleri kullanma
- Gizli anahtarları düzenli olarak döndürün
Certificate-Based Kimlik Doğrulaması
En iyisi: Sertifika tabanlı kimlik doğrulaması gerektiren kurumsal uygulamalar
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=4;" +
"AuthClientID=<client-id>;" +
"AuthCertificatePath=/path/to/certificate.pfx;" +
"AuthCertificatePassword=<certificate-password>;" +
"AuthTenantID=<tenant-id>;" +
"LogLevel=INFO";
Connection conn = DriverManager.getConnection(url);
Gerekli Parametreler:
-
AuthFlow=4: Sertifika tabanlı kimlik doğrulamayı belirtir -
AuthClientID: Uygulama (istemci) kimliği -
AuthCertificatePath: PFX/PKCS12 sertifika dosyasının yolu -
AuthCertificatePassword: Sertifika parolası -
AuthTenantID: Microsoft Entra kiracı kimliği
Erişim Belirteci Kimlik Doğrulaması
En iyisi: Özel kimlik doğrulama senaryoları
// Acquire token through custom mechanism
String accessToken = acquireTokenFromCustomSource();
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=5;" + // Access token authentication
"AuthAccessToken=" + accessToken + ";" +
"LogLevel=INFO";
Connection conn = DriverManager.getConnection(url);
Kimlik Doğrulaması Önbellekleme
Sürücü, performansı geliştirmek için kimlik doğrulama belirteçlerini otomatik olarak önbelleğe alır:
// Enable/disable caching (enabled by default)
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=2;" +
"AuthEnableCaching=true;" + // Enable token caching
"AuthCacheTTLMS=3600000"; // Cache TTL: 1 hour
Connection conn = DriverManager.getConnection(url);
Yapılandırma Parametreleri
Gerekli Parametreler
Bu parametreler her bağlantı dizesinde bulunmalıdır:
| Parametre | Türü | Description | Example |
|---|---|---|---|
FabricWorkspaceID |
UUID | Doku çalışma alanı tanımlayıcısı | <workspace-id> |
FabricLakehouseID |
UUID | Fabric göl evi tanımlayıcısı | <lakehouse-id> |
AuthFlow |
Integer | Kimlik doğrulama akışı türü (1-5) | 2 |
İsteğe Bağlı Parametreler
API Sürüm Yapılandırması
| Parametre | Türü | Varsayılan | Description |
|---|---|---|---|
FabricVersion |
String | v1 |
Fabric API sürümü |
LivyApiVersion |
String | 2023-12-01 |
Livy API sürümü |
Ortam Yapılandırması
| Parametre | Türü | Varsayılan | Description |
|---|---|---|---|
FabricEnvironmentID |
UUID | Hiç kimse | Spark oturumu için bir ortam öğesine başvurmak amacıyla doku ortamı tanımlayıcısı. |
Spark Yapılandırması
Oturum Kaynağı Yapılandırması
Spark oturum kaynaklarını en iyi performans için yapılandırın:
| Parametre | Türü | Varsayılan | Description | Example |
|---|---|---|---|---|
DriverCores |
Integer | Spark varsayılanı | Sürücü için CPU çekirdeği sayısı | 4 |
DriverMemory |
String | Spark varsayılanı | Sürücü için bellek ayırma | 4g |
ExecutorCores |
Integer | Spark varsayılanı | Yürütücü başına CPU çekirdeği sayısı | 4 |
ExecutorMemory |
String | Spark varsayılanı | Yürütücü başına bellek ayırma | 8g |
NumExecutors |
Integer | Spark varsayılanı | Yürütücü sayısı | 2 |
Example:
DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2
Özel Spark Oturumu Özellikleri
Öneki spark. olan tüm parametreler Spark oturumuna otomatik olarak uygulanır:
Örnek Spark Yapılandırmaları:
spark.sql.adaptive.enabled=true
spark.sql.adaptive.coalescePartitions.enabled=true
spark.sql.shuffle.partitions=200
spark.sql.autoBroadcastJoinThreshold=10485760
spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.minExecutors=1
spark.dynamicAllocation.maxExecutors=10
spark.executor.memoryOverhead=1g
Yerel Yürütme Altyapısı (NEE):
spark.nee.enabled=true
Tam Örnek:
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<guid>;FabricLakehouseID=<guid>;DriverMemory=4g;ExecutorMemory=8g;NumExecutors=2;spark.sql.adaptive.enabled=true;spark.nee.enabled=true;AuthFlow=2
HTTP istemci bağlantı ayarları
Sürücünün HTTP taşıma bağlantılarını en iyi ağ performansı için yapılandırın. Bu ayarlar JDBC bağlantı havuzunu yapılandırmaz veya yönetmez:
| Parametre | Türü | Varsayılan | Description |
|---|---|---|---|
HttpMaxTotalConnections |
Integer | 100 | Toplam HTTP bağlantısı sayısı üst sınırı |
HttpMaxConnectionsPerRoute |
Integer | 50 | Yol başına en fazla bağlantı sayısı |
HttpConnectionTimeoutInSeconds |
Integer | 30 | Bağlantı zaman aşımı |
HttpSocketTimeoutInSeconds |
Integer | 60 | Socket okuma zaman aşımı |
HttpReadTimeoutInSeconds |
Integer | 60 | HTTP okuma zaman aşımı |
HttpConnectionRequestTimeoutSeconds |
Integer | 30 | Havuzdan bağlantı isteği zaman aşımı hatası |
HttpEnableKeepAlive |
Boolean | true | HTTP etkin tutma özelliğini etkinleştirme |
HttpKeepAliveTimeoutSeconds |
Integer | 60 | Bağlantıyı açık tutma zaman aşımı |
HttpFollowRedirects |
Boolean | true | HTTP yeniden yönlendirmelerini takip et |
HttpUseAsyncIO |
Boolean | false | Asenkron HTTP G/Ç kullanımı |
Example:
HttpMaxTotalConnections=200;HttpMaxConnectionsPerRoute=100;HttpConnectionTimeoutInSeconds=60
Ara Sunucu Yapılandırması
Kurumsal ortamlar için HTTP ve SOCKS proxy ayarlarını yapılandırın:
| Parametre | Türü | Varsayılan | Description |
|---|---|---|---|
UseProxy |
Boolean | false | Ara sunucuyu etkinleştirme |
ProxyTransport |
String | http |
Ara sunucu aktarım türü (http/tcp) |
ProxyHost |
String | Hiç kimse | Proxy ana bilgisayar adı |
ProxyPort |
Integer | Hiç kimse | Proxy bağlantı noktası |
ProxyAuthEnabled |
Boolean | false | Proxy kimlik doğrulamasını etkinleştirme |
ProxyUsername |
String | Hiç kimse | Proxy kimlik doğrulaması kullanıcı adı |
ProxyPassword |
String | Hiç kimse | Proxy kimlik doğrulama parolası |
ProxyAuthScheme |
String | basic |
Kimlik doğrulama düzeni (temel/özet/ntlm) |
ProxySocksVersion |
Integer | 5 | SOCKS sürümü (4/5) |
HTTP Proxy Örneği:
UseProxy=true;ProxyTransport=http;ProxyHost=proxy.company.com;ProxyPort=8080;ProxyAuthEnabled=true;ProxyUsername=user;ProxyPassword=pass
SOCKS Proxy Örneği:
UseProxy=true;ProxyTransport=tcp;ProxyHost=socks.company.com;ProxyPort=1080;ProxySocksVersion=5
Günlük Kaydı Yapılandırması
| Parametre | Türü | Varsayılan | Description |
|---|---|---|---|
LogLevel |
String | INFO |
Günlük düzeyi: İZLEME, HATA AYıKLAMA, BİlGİ, UYARI, HATA |
Example:
LogLevel=DEBUG
Varsayılan Günlük Konumu:
${user.home}/.microsoft/livy-jdbc-driver/driver.log
Özel Günlük Yapılandırması: Sınıf yolunuzda log4j2.xml veya logback.xml adlı özel bir dosya kullanın.
Kullanım Örnekleri
Temel Bağlantı
import java.sql.*;
public class BasicConnectionExample {
public static void main(String[] args) {
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=2";
try (Connection conn = DriverManager.getConnection(url)) {
System.out.println("Connected successfully!");
System.out.println("Database: " + conn.getMetaData().getDatabaseProductName());
System.out.println("Driver: " + conn.getMetaData().getDriverName());
System.out.println("Driver Version: " + conn.getMetaData().getDriverVersion());
} catch (SQLException e) {
System.err.println("Connection failed: " + e.getMessage());
e.printStackTrace();
}
}
}
Sorgu Çalıştırma
Basit Sorgu
public void executeSimpleQuery(Connection conn) throws SQLException {
String sql = "SELECT current_timestamp() as now";
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
if (rs.next()) {
Timestamp now = rs.getTimestamp("now");
System.out.println("Current timestamp: " + now);
}
}
}
Filtreli Sorgu
public void executeQueryWithFilter(Connection conn) throws SQLException {
String sql = "SELECT * FROM sales WHERE amount > 1000 ORDER BY amount DESC";
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
int id = rs.getInt("id");
double amount = rs.getDouble("amount");
Date date = rs.getDate("sale_date");
System.out.printf("ID: %d, Amount: %.2f, Date: %s%n",
id, amount, date);
}
}
}
Sınıra Sahip Sorgu
public void executeQueryWithLimit(Connection conn) throws SQLException {
String sql = "SELECT * FROM customers LIMIT 10";
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
// Print column names
for (int i = 1; i <= columnCount; i++) {
System.out.print(metaData.getColumnName(i) + "\t");
}
System.out.println();
// Print rows
while (rs.next()) {
for (int i = 1; i <= columnCount; i++) {
System.out.print(rs.getString(i) + "\t");
}
System.out.println();
}
}
}
Sonuç Kümeleriyle Çalışma
Sonuç Kümelerine Gezinme
public void navigateResultSet(Connection conn) throws SQLException {
String sql = "SELECT id, name, amount FROM orders";
try (Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(sql)) {
// Move to first row
if (rs.first()) {
System.out.println("First row: " + rs.getString("name"));
}
// Move to last row
if (rs.last()) {
System.out.println("Last row: " + rs.getString("name"));
System.out.println("Total rows: " + rs.getRow());
}
// Move to specific row
if (rs.absolute(5)) {
System.out.println("Row 5: " + rs.getString("name"));
}
}
}
Büyük Sonuç Kümelerini İşleme
public void processLargeResultSet(Connection conn) throws SQLException {
String sql = "SELECT * FROM large_table";
try (Statement stmt = conn.createStatement()) {
// Set fetch size for efficient memory usage
stmt.setFetchSize(1000);
try (ResultSet rs = stmt.executeQuery(sql)) {
int rowCount = 0;
while (rs.next()) {
// Process row
processRow(rs);
rowCount++;
if (rowCount % 10000 == 0) {
System.out.println("Processed " + rowCount + " rows");
}
}
System.out.println("Total rows processed: " + rowCount);
}
}
}
private void processRow(ResultSet rs) throws SQLException {
// Process individual row
}
Hazırlanmış Deyimleri Kullanma
public void usePreparedStatement(Connection conn) throws SQLException {
String sql = "SELECT * FROM products WHERE category = ? AND price > ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
// Set parameters
pstmt.setString(1, "Electronics");
pstmt.setDouble(2, 100.0);
try (ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
String name = rs.getString("name");
double price = rs.getDouble("price");
System.out.printf("Product: %s, Price: $%.2f%n", name, price);
}
}
}
}
Toplu İşlemler
public void executeBatchInsert(Connection conn) throws SQLException {
String sql = "INSERT INTO logs (timestamp, level, message) VALUES (?, ?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
conn.setAutoCommit(false); // Disable auto-commit for batch
// Add multiple statements to batch
for (int i = 0; i < 1000; i++) {
pstmt.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
pstmt.setString(2, "INFO");
pstmt.setString(3, "Log message " + i);
pstmt.addBatch();
// Execute batch every 100 statements
if (i % 100 == 0) {
pstmt.executeBatch();
pstmt.clearBatch();
}
}
// Execute remaining statements
pstmt.executeBatch();
conn.commit();
System.out.println("Batch insert completed successfully");
} catch (SQLException e) {
conn.rollback();
throw e;
} finally {
conn.setAutoCommit(true);
}
}
HikariCP ile bağlantı havuzu
HikariCP'yi JDBC URL'si ile yapılandırın ki bağlantı üzerinden LivyDriverbağlantı kurulsun. Bir HikariCP örneği oluşturun ve uygulama ömrü boyunca tekrar kullanın.
Maven bağımlılığı
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
JDBC URL'si ile HikariCP'yi yapılandırın
JDBC URL ve sürücü sınıfını HikariCP'nin fiziksel bağlantılar oluşturmasını sağlayacak LivyDriverşekilde yapılandırın. JDBC servis sağlayıcısı otomatik keşif mevcut olduğunda sürücü sınıfının açıkça ayarlanması isteğe bağlıdır:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public final class DriverConnectionPoolExample {
public static HikariDataSource createPool(String url) {
HikariConfig config = new HikariConfig();
config.setDriverClassName("com.microsoft.spark.livy.jdbc.LivyDriver");
config.setJdbcUrl(url);
// Keep pool sizes small: each classic-mode physical connection owns a Livy session.
config.setMaximumPoolSize(2);
config.setMinimumIdle(0);
config.setConnectionTimeout(900000); // Wait up to 15 minutes to borrow a connection
config.setInitializationFailTimeout(-1); // Skip startup validation; connect on demand
config.setIdleTimeout(600000); // 10 minutes
config.setMaxLifetime(1800000); // 30 minutes
config.setPoolName("FabricSparkDriverPool");
return new HikariDataSource(config);
}
public static void main(String[] args) throws SQLException {
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=AZURE_CLI;" + // Uses the DefaultAzureCredential chain
"LivySessionTimeoutSeconds=600"; // Poll up to 10 minutes for session readiness
// Reuse this pool for the application lifetime; main closes it at process exit.
try (HikariDataSource pool = createPool(url);
Connection conn = pool.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 'Pooled LivyDriver connection!' as message")) {
if (rs.next()) {
System.out.println(rs.getString("message"));
}
}
}
}
Havuzu yapılandırırken aşağıdaki rehberliği kullanın:
| Ortam veya davranış | Guidance |
|---|---|
connectionTimeout |
Arayan kişinin bağlantı ödünç almak için ne kadar beklediğini kontrol eder, ancak devam eden bir bağlantı girişimini iptal etmez. Kimlik doğrulama, oturum oluşturma, HTTP denemeleri ve ilk doğrulama için zaman tanımak için daha LivySessionTimeoutSeconds yüksek bir süre ayarlayın. |
| Bağlantı doğrulaması | HikariCP .Connection.isValid() Etkili süresi, sürücünün HTTP zaman aşımına ve tekrar deneme/geri alma ayarlarıyla kontrol edilir, HikariCP'nin validationTimeoutayarları ile değil. Bağlantı testi sorgusunu yapılandırmayın çünkü daha hafif doğrulama kontrolünü Spark ifadesi ile değiştirir. |
HikariCP yapılandırma seçeneklerinin tam listesi için bakınız:
Veri Türü Eşleme
Sürücü Spark SQL veri türlerini JDBC SQL türleri ve Java türleriyle eşler:
| Spark SQL Türü | JDBC SQL Türü | Java Türü | Notes |
|---|---|---|---|
BOOLEAN |
BOOLEAN |
Boolean |
|
BYTE |
TINYINT |
Byte |
|
SHORT |
SMALLINT |
Short |
|
INT |
INTEGER |
Integer |
|
LONG |
BIGINT |
Long |
|
FLOAT |
FLOAT |
Float |
|
DOUBLE |
DOUBLE |
Double |
|
DECIMAL |
DECIMAL |
BigDecimal |
Hassaslık ve ölçek korunur |
STRING |
VARCHAR |
String |
|
VARCHAR(n) |
VARCHAR |
String |
|
CHAR(n) |
CHAR |
String |
|
BINARY |
BINARY |
byte[] |
|
DATE |
DATE |
java.sql.Date |
|
TIMESTAMP |
TIMESTAMP |
java.sql.Timestamp |
|
ARRAY |
VARCHAR |
String |
JSON olarak seri hale getirilmiş |
MAP |
VARCHAR |
String |
JSON olarak seri hale getirilmiş |
STRUCT |
VARCHAR |
String |
JSON olarak seri hale getirilmiş |