Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
JDBC (Java Database Connectivity) is een veelgebruikte standaard waarmee clienttoepassingen verbinding kunnen maken met en kunnen werken met gegevens uit databases en big data-platforms.
De Microsoft JDBC Driver for Fabric Data Engineering stelt je in staat om Spark-workloads in Fabric te verbinden, te bevragen en te beheren met de betrouwbaarheid en eenvoud van de JDBC-standaard. Gebouwd op Fabric's Livy-API's biedt de driver veilige en flexibele Spark SQL-connectiviteit naar je Java-applicaties en BI-tools. Deze integratie stelt je in staat om Spark-code direct in te dienen en uit te voeren zonder aparte notebook- of Spark-taakdefinitie-items te hoeven maken. Het stuurprogramma is compatibel met populaire JDBC-clients, zoals DbVisualizer en DBeaver, evenals BI-hulpprogramma's die ondersteuning bieden voor JDBC-connectiviteit, waaronder Tableau.
Belangrijke functies
- JDBC 4.2 Compatibel: volledige implementatie van JDBC 4.2-specificatie
- Microsoft Entra ID-verificatie: meerdere verificatiestromen, waaronder interactieve, clientreferenties en verificatie op basis van certificaten
- HikariCP-integratie: Gebruik HikariCP om JDBC-verbindingen te beheren en opnieuw te gebruiken voor productieapplicaties
- Ondersteuning voor systeemeigen Spark SQL-query's: directe uitvoering van Spark SQL-instructies zonder vertaling
- Uitgebreide ondersteuning voor gegevenstypen: ondersteuning voor alle Spark SQL-gegevenstypen, waaronder complexe typen (ARRAY, MAP, STRUCT)
- Asynchrone resultatenset prefetching: achtergrondgegevens laden voor verbeterde prestaties
- Circuit Breaker-patroon: beveiliging tegen cascaderende fouten met automatische pogingen
- Automatisch opnieuw verbinding maken: Transparant sessieherstel bij verbindingsfouten
- Geavanceerde logica voor opnieuw proberen: Opnieuw proberen met exponentieel uitstel en sessieherstel voor verbeterde tolerantie
- Proxyondersteuning: HTTP- en SOCKS-proxyconfiguratie voor bedrijfsomgevingen
Vereiste voorwaarden
Voordat je de Microsoft JDBC Driver for Fabric Data Engineering gebruikt, zorg ervoor dat je:
- Java Development Kit (JDK): versie 11 of hoger (Java 21 aanbevolen)
- Fabric Access: Toegang tot een Fabric werkruimte
- Microsoft Entra ID referenties: juiste referenties voor verificatie
- Werkruimte- en Lakehouse-id's: GUID-id's voor uw Fabric-werkruimte en Lakehouse
Downloaden en installeren
Microsoft JDBC Driver for Fabric Data Engineering versie 1.0.0 ondersteunt Java 11, 17 en 21. We verbeteren voortdurend ondersteuning voor Java-connectiviteit en raden u aan met de nieuwste versie van het Microsoft JDBC-stuurprogramma te werken.
- Download Microsoft JDBC Driver for Fabric Data Engineering (zip)
- Download Microsoft JDBC Driver for Fabric Data Engineering (tar)
- Download het zip- of tar-bestand via de bovenstaande koppelingen.
- Pak het gedownloade bestand uit om toegang te krijgen tot de JAR-bestanden van het stuurprogramma.
- Selecteer het JAR-bestand dat overeenkomt met uw JRE-versie:
- Voor Java 11:
ms-sparksql-jdbc-1.0.1.jre11.jar - Voor Java 17:
ms-sparksql-jdbc-1.0.1.jre17.jar - Voor Java 21:
ms-sparksql-jdbc-1.0.1.jre21.jar
- Voor Java 11:
- Voeg het geselecteerde JAR-bestand toe aan het klassepad van uw toepassing.
- Voor JDBC-clients configureert u de JDBC-stuurprogrammaklasse:
com.microsoft.spark.livy.jdbc.LivyDriver
Snelstartvoorbeeld
Dit voorbeeld laat zien hoe je verbinding maakt met Fabric en een query uitvoert met de Microsoft JDBC Driver for Fabric Data Engineering. Voordat u deze code uitvoert, moet u ervoor zorgen dat u de vereisten hebt voltooid en het stuurprogramma hebt geïnstalleerd.
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();
}
}
}
Formaat van verbindingsstring
Basisverbindingsreeks
De Microsoft JDBC Driver for Fabric Data Engineering gebruikt het volgende verbindingsreeks-formaat:
jdbc:fabricspark://<hostname>[:<port>][;<parameter1>=<value1>;<parameter2>=<value2>;...]
Componenten van de connection string
| Onderdeel | Description | Example |
|---|---|---|
| Protocol | JDBC URL-protocolidentificatie | jdbc:fabricspark:// |
| Hostnaam | Hostnaam van het Fabric-eindpunt | api.fabric.microsoft.com |
| port | Optioneel poortnummer (standaard: 443) | :443 |
| Parameters | Door puntkomma's gescheiden sleutel=waarde paren | FabricWorkspaceID=<guid> |
Voorbeeld van verbindingsreeksen
Basisverbinding (verificatie op basis van interactieve browser)
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=1
Met Spark-resourceconfiguratie
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2;AuthFlow=2
Met eigenschappen van Spark-sessie
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;spark.sql.adaptive.enabled=true;spark.sql.shuffle.partitions=200;AuthFlow=2
Authenticatie
De Microsoft JDBC Driver for Fabric Data Engineering ondersteunt meerdere authenticatiemethoden via Microsoft Entra ID (voorheen Azure Active Directory). Verificatie wordt geconfigureerd met behulp van de AuthFlow parameter in de verbindingsreeks.
Verificatiestromen
| AuthFlow | Verificatiemethode | Gebruikssituatie |
|---|---|---|
| 1 | Interactieve browser | Interactieve gebruikersverificatie met OAuth 2.0 |
| 2 | Azure-opdrachtregelinterface (CLI) | Ontwikkeling met behulp van Azure CLI |
| 3 | Referenties voor clientgeheim (service-principal) | Geautomatiseerde/service-naar-service-authenticatie |
| 4 | Referentie voor clientcertificaat | Authenticatie van een service-principal op basis van certificaat |
| 5 | Toegangstoken | Vooraf verkregen bearer-toegangstoken |
Interactieve browserverificatie
Geschikt voor: Ontwikkeling en interactieve toepassingen
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);
Parameters:
-
AuthFlow=1: Specificeert interactieve browserverificatie -
AuthTenantID(optioneel): Microsoft Entra tenant-ID -
AuthClientID(optioneel): Toepassing (client) ID
Gedrag:
- Hiermee opent u een browservenster voor gebruikersverificatie
- Referenties worden opgeslagen in de cache voor volgende verbindingen totdat deze verlopen is
- Geschikt voor toepassingen met één gebruiker
Client- of Servicegebruikerauthenticatie
Geschikt voor: Geautomatiseerde services en achtergrondtaken
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);
Vereiste parameters:
-
AuthFlow=3: Hiermee specificeert u client-credentials-authenticatie -
AuthClientID: Toepassings-ID (client) van Microsoft Entra ID -
AuthClientSecret: Clientgeheim van Microsoft Entra-id -
AuthTenantID: Microsoft Entra-tenant-id
Best practices:
- Geheimen veilig opslaan (Azure Key Vault, omgevingsvariabelen)
- Beheerde identiteiten gebruiken indien mogelijk
- Geheimen regelmatig roteren
Certificate-Based Authenticatie
Geschikt voor: Bedrijfstoepassingen waarvoor verificatie op basis van certificaten is vereist
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);
Vereiste parameters:
-
AuthFlow=4: Hiermee geeft u verificatie op basis van certificaten op -
AuthClientID: Applicatie-ID (client) -
AuthCertificatePath: Pad naar PFX-/PKCS12-certificaatbestand -
AuthCertificatePassword: Certificaatwachtwoord -
AuthTenantID: Microsoft Entra-tenant-id
Verificatie van toegangstokens
Geschikt voor: Scenario's voor aangepaste verificatie
// 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);
Verificatiecaching
Het stuurprogramma slaat verificatietokens automatisch in de cache op om de prestaties te verbeteren:
// 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);
Configuratieparameters
Vereiste parameters
Deze parameters moeten aanwezig zijn in elke verbindingsreeks:
| Kenmerk | Typologie | Description | Example |
|---|---|---|---|
FabricWorkspaceID |
UUID (universeel unieke identificator) | Fabric-werkruimte-id | <workspace-id> |
FabricLakehouseID |
UUID (universeel unieke identificator) | Fabric-lakehouse-id | <lakehouse-id> |
AuthFlow |
Integer | Verificatiestroomtype (1-5) | 2 |
Optionele parameters
API-versieconfiguratie
| Kenmerk | Typologie | Verstek | Description |
|---|---|---|---|
FabricVersion |
Snaar / Touwtje | v1 |
Fabric API-versie |
LivyApiVersion |
Snaar / Touwtje | 2023-12-01 |
Livy-API-versie |
Omgevingsconfiguratie
| Kenmerk | Typologie | Verstek | Description |
|---|---|---|---|
FabricEnvironmentID |
UUID (universeel unieke identificator) | Geen | Fabric-omgeving-ID voor het refereren aan een item binnen de omgeving voor een Spark-sessie |
Spark-configuratie
Configuratie van sessieresource
Spark-sessiebronnen configureren voor optimale prestaties:
| Kenmerk | Typologie | Verstek | Description | Example |
|---|---|---|---|---|
DriverCores |
Integer | Spark-standaardwaarde | Aantal CPU-kernen voor stuurprogramma | 4 |
DriverMemory |
Snaar / Touwtje | Spark-standaardwaarde | Geheugentoewijzing voor stuurprogramma | 4g |
ExecutorCores |
Integer | Spark-standaardwaarde | Aantal CPU-kernen per uitvoerder | 4 |
ExecutorMemory |
Snaar / Touwtje | Spark-standaardwaarde | Geheugentoewijzing per uitvoerder | 8g |
NumExecutors |
Integer | Spark-standaardwaarde | Aantal uitvoerders | 2 |
Example:
DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2
Eigenschappen van aangepaste Spark-sessie
Elke parameter met het voorvoegsel spark. wordt automatisch toegepast op de Spark-sessie:
Voorbeeld van Spark-configuraties:
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
Systeemeigen uitvoeringsengine (NEE):
spark.nee.enabled=true
Volledig voorbeeld:
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-clientverbindingsinstellingen
Configureer de HTTP-transportverbindingen van de driver voor optimale netwerkprestaties. Deze instellingen configureren of beheren de JDBC-verbindingspooling niet:
| Kenmerk | Typologie | Verstek | Description |
|---|---|---|---|
HttpMaxTotalConnections |
Integer | 100 | Maximumaantal HTTP-verbindingen |
HttpMaxConnectionsPerRoute |
Integer | 50 | Maximum aantal verbindingen per route |
HttpConnectionTimeoutInSeconds |
Integer | 30 | Verbindingstijd is verlopen |
HttpSocketTimeoutInSeconds |
Integer | 60 | Time-out voor socketleesbewerking |
HttpReadTimeoutInSeconds |
Integer | 60 | Time-out voor HTTP-leesbewerking |
HttpConnectionRequestTimeoutSeconds |
Integer | 30 | Time-out van verbindingsaanvraag vanuit pool |
HttpEnableKeepAlive |
Booleaan | true | HTTP-keep-alive inschakelen |
HttpKeepAliveTimeoutSeconds |
Integer | 60 | Keep-alive time-out |
HttpFollowRedirects |
Booleaan | true | HTTP-omleidingen volgen |
HttpUseAsyncIO |
Booleaan | false | Asynchrone HTTP I/O gebruiken |
Example:
HttpMaxTotalConnections=200;HttpMaxConnectionsPerRoute=100;HttpConnectionTimeoutInSeconds=60
Proxyconfiguratie
HTTP- en SOCKS-proxyinstellingen configureren voor bedrijfsomgevingen:
| Kenmerk | Typologie | Verstek | Description |
|---|---|---|---|
UseProxy |
Booleaan | false | Proxy inschakelen |
ProxyTransport |
Snaar / Touwtje | http |
Proxy-transporttype (http/tcp) |
ProxyHost |
Snaar / Touwtje | Geen | Proxyhostnaam |
ProxyPort |
Integer | Geen | Proxypoort |
ProxyAuthEnabled |
Booleaan | false | Proxyverificatie inschakelen |
ProxyUsername |
Snaar / Touwtje | Geen | Gebruikersnaam voor proxyverificatie |
ProxyPassword |
Snaar / Touwtje | Geen | Wachtwoord voor proxyverificatie |
ProxyAuthScheme |
Snaar / Touwtje | basic |
Authenticatieschema (basic/digest/ntlm) |
ProxySocksVersion |
Integer | 5 | SOCKS-versie (4/5) |
Voorbeeld van HTTP-proxy:
UseProxy=true;ProxyTransport=http;ProxyHost=proxy.company.com;ProxyPort=8080;ProxyAuthEnabled=true;ProxyUsername=user;ProxyPassword=pass
Voorbeeld van SOCKS-proxy:
UseProxy=true;ProxyTransport=tcp;ProxyHost=socks.company.com;ProxyPort=1080;ProxySocksVersion=5
Configuratie van logboekregistratie
| Kenmerk | Typologie | Verstek | Description |
|---|---|---|---|
LogLevel |
Snaar / Touwtje | INFO |
Niveau van logboekregistratie: TRACE, DEBUG, INFO, WAARSCHUWING, FOUT |
Example:
LogLevel=DEBUG
Standaardlocatie van logboek:
${user.home}/.microsoft/livy-jdbc-driver/driver.log
Aangepaste logboekconfiguratie: Gebruik een aangepast log4j2.xml bestand of logback.xml bestand in uw klaspad.
Gebruiksvoorbeelden
Basisverbinding
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();
}
}
}
Queries uitvoeren
Eenvoudige query
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);
}
}
}
Query met filter
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);
}
}
}
Query met limiet
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();
}
}
}
Werken met resultatensets
Navigeren in resultatensets
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"));
}
}
}
Grote resultatensets verwerken
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
}
Voorbereide instructies gebruiken
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);
}
}
}
}
Batchverwerkingen
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);
}
}
Verbindingspooling met HikariCP
Configureer HikariCP met de JDBC-URL zodat het verbindingen maakt via LivyDriver. Maak één HikariCP-instantie aan en hergebruik deze gedurende de levensduur van de applicatie.
Maven-afhankelijkheid
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
Configureer HikariCP met de JDBC-URL
Configureer de JDBC-URL en driverklasse zodat HikariCP fysieke verbindingen maakt via LivyDriver. Het expliciet instellen van de driverklasse is optioneel wanneer automatische ontdekking van JDBC-serviceproviders beschikbaar is:
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"));
}
}
}
}
Gebruik de volgende richtlijnen bij het configureren van de pool:
| Instelling of gedrag | Guidance |
|---|---|
connectionTimeout |
Bepaalt hoe lang een beller wacht om een verbinding te lenen, maar annuleert een verbindingspoging die al bezig is niet. Stel het hoger in dan LivySessionTimeoutSeconds om tijd toe te staan voor authenticatie, sessiecreatie, HTTP-herhalingen en initiële validatie. |
| Verificatie van de verbinding | HikariCP gebruikt Connection.isValid(). De effectieve duur wordt bepaald door de HTTP-timeout en retry/backoff-instellingen van de driver, niet door die validationTimeoutvan HikariCP. Configureer geen verbindingstestquery, want die vervangt de lichtere validatiecheck door een Spark-instructie. |
Voor de volledige lijst van HikariCP-configuratieopties, zie:
Gegevenstypemapping
Het stuurprogramma wijst Spark SQL-gegevenstypen toe aan JDBC SQL-typen en Java-typen:
| Spark SQL-type | JDBC SQL-type | Java type | Opmerkingen |
|---|---|---|---|
BOOLEAN |
BOOLEAN |
Boolean |
|
BYTE |
TINYINT |
Byte |
|
SHORT |
SMALLINT |
Short |
|
INT |
INTEGER |
Integer |
|
LONG |
BIGINT |
Long |
|
FLOAT |
FLOAT |
Float |
|
DOUBLE |
DOUBLE |
Double |
|
DECIMAL |
DECIMAL |
BigDecimal |
Precisie en schaal behouden |
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 |
Geserialiseerd als JSON |
MAP |
VARCHAR |
String |
Geserialiseerd als JSON |
STRUCT |
VARCHAR |
String |
Geserialiseerd als JSON |