Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
JDBC (Java Database Connectivity) er en mye brukt standard som gjør det mulig for klientapplikasjoner å koble til og arbeide med data fra databaser og big data-plattformer.
Microsoft JDBC Driver for Fabric Data Engineering lar deg koble til, spørre og administrere Spark-arbeidsbelastninger i Fabric med påliteligheten og enkelheten til JDBC-standarden. Bygget på Fabric sine Livy-API-er, gir driveren sikker og fleksibel Spark SQL-tilkobling til dine Java-applikasjoner og BI-verktøy. Denne integrasjonen lar deg sende inn og kjøre Spark-kode direkte uten å måtte lage separate notatbok- eller Spark-jobbdefinisjonselementer. Driveren er kompatibel med populære JDBC-klienter som DbVisualizer og DBeaver, samt BI-verktøy som støtter JDBC-tilkobling, inkludert Tableau.
Viktige funksjoner
- JDBC 4.2 API-er: Implementerer JDBC 4.2 API-er for Spark SQL-tilkobling, med Spark- og Livy-begrensninger som ingen JDBC-transaksjoner og fremoverbeskyttet, skrivebeskyttet resultatsett
- Microsoft Entra ID-autentisering: Flere autentiseringsflyter inkludert interaktiv, klientlegitimasjon og sertifikatbasert autentisering
- Høysamtidige økter: Opt-in Fabric-sesjonsdeling for samtidige arbeidsbelastninger
-
Eksplisitt tilkoblingspooling: Velg HikariCP, en standard poolmanager, eller
LivyBuiltInPooledDataSource; direkte inngangspunkter pooler aldri pool - Spark SQL native spørringsstøtte: Direkte kjøring av Spark SQL-setninger uten oversettelse
- Omfattende støtte for datatyper: Støtte for alle Spark SQL-datatyper, inkludert komplekse typer (ARRAY, MAP, STRUCT)
- Asynkron resultatsett-prefetching: Bakgrunnsdatainnlasting for bedre ytelse
- Sikringsmønster: Beskyttelse mot kaskaderende feil med automatisk omprøving
- Auto-retilkobling: Transparent sesjonsgjenoppretting ved tilkoblingsfeil
- Avansert retry-logikk: Retry med eksponentiell backoff og sesjonsgjenoppretting for bedre motstandskraft
- Proxy-støtte: HTTP- og SOCKS-proxykonfigurasjon for bedriftsmiljøer
Forutsetning
Før du bruker Microsoft JDBC Driver for Fabric Data Engineering, sørg for at du har:
- Java Development Kit (JDK): Java 11, 17 og 21 (Java 21 anbefalt)
- Fabric Access: Tilgang til et Fabric-arbeidsområde
- Microsoft Entra ID legitimasjon: Passende legitimasjon for autentisering
- Workspace- og Lakehouse-ID-er: GUID-identifikatorer for ditt Fabric workspace og lakehouse
Nedlasting og installasjon
Microsoft JDBC Driver for Fabric Data Engineering versjon 2.0.1 støtter Java 11, 17 og 21. Bruk den nyeste tilgjengelige versjonen.
- Last ned Microsoft JDBC Driver for Fabric Data Engineering (zip)
- Last ned Microsoft JDBC Driver for Fabric Data Engineering (tar)
- Last ned enten zip- eller tar-filen fra lenkene ovenfor.
- Pakk ut den nedlastede filen for å få tilgang til driverens JAR-filer.
- Velg JAR-filen som matcher din JRE-versjon:
- For Java 11:
ms-sparksql-jdbc-2.0.1.jre11.jar - For Java 17:
ms-sparksql-jdbc-2.0.1.jre17.jar - For Java 21:
ms-sparksql-jdbc-2.0.1.jre21.jar
- For Java 11:
- Legg til den valgte JAR-filen i applikasjonens klassesti.
- For JDBC-klienter, konfigurer JDBC-driverklassen:
com.microsoft.spark.livy.jdbc.LivyDriver
Eksempel på Quick Start
Dette eksempelet demonstrerer hvordan man kobler til Fabric og kjører en spørring ved å bruke Microsoft JDBC Driver for Fabric Data Engineering. Før du kjører denne koden, sørg for at du oppfyller forutsetningene og installerer driveren. Ved å bruke AuthFlow=2, bruker DefaultAzureCredentialdriveren . For å bruke Azure CLI som kilde til legitimasjon, installer Azure CLI og kjør az login.
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;" + // DefaultAzureCredential; Azure CLI can be one source
"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();
}
}
}
Tilkoblingsstrengformat
Grunnleggende tilkoblingsstreng
Microsoft JDBC Driver for Fabric Data Engineering bruker følgende tilkoblingsstreng-format:
jdbc:fabricspark://<hostname>[:<port>][;<parameter1>=<value1>;<parameter2>=<value2>;...]
Tilkoblingsstrengkomponenter
| Komponent | Beskrivelse | Eksempel |
|---|---|---|
| Protokoll | JDBC URL-protokollidentifikator | jdbc:fabricspark:// |
| Vertsnavn | Fabric-endepunktets vertsnavn | api.fabric.microsoft.com |
| Havn | Valgfritt portnummer (standard: 443) | :443 |
| Parametere | Semikolon-separert nøkkel=verdipar | FabricWorkspaceID=<guid> |
Eksempler på tilkoblingsstrenger
Grunnleggende tilkobling (interaktiv nettleserbasert autentisering)
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=1
Med Spark Resource Configuration
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2;AuthFlow=2
Med Spark Session-egenskaper
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;spark.sql.adaptive.enabled=true;spark.sql.shuffle.partitions=200;AuthFlow=2
Med høy samtidighetsmodus
High-concurrency (HC)-modus er tilgjengelig for Microsoft Fabric-tilkoblinger i driverversjon 1.1.0 og nyere. Legg til hcEnabled=true for å få en HC-økt i stedet for en klassisk Livy-økt:
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=2;hcEnabled=true
Du kan valgfritt identifisere arbeidsmengden med en session-tag og velge et Fabric-miljø:
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=2;hcEnabled=true;sessionTag=orders_etl;FabricEnvironmentID=<environment-id>
HC-modus er frivillig. Hvis hcEnabled er utelatt eller satt til false, bruker driveren den klassiske Livy-sesjonsstien.
Se seksjonen omHigh-Concurrency (HC) Mode for fullstendig konfigurasjonsveiledning.
Autentisering
Microsoft JDBC Driver for Fabric Data Engineering støtter flere autentiseringsmetoder gjennom Microsoft Entra ID (tidligere Azure Active Directory). Autentisering konfigureres ved å bruke parameteren AuthFlow i tilkoblingsstrengen.
Autentiseringsflyter
| AuthFlow | Godkjenningsmetode | Bruk sak |
|---|---|---|
| 1 | Interaktiv nettleser | Interaktiv brukerautentisering ved bruk av OAuth 2.0 |
| 2 | Default Azure credential chain | Utvikling og administrert applikasjonsautentisering; Azure CLI kan være én kilde til legitimasjon |
| 3 | Klienthemmelige legitimasjoner (tjenesteleder) | Automatisert/tjeneste-til-tjeneste-autentisering |
| 4 | Klientsertifikat | Sertifikatbasert autentisering av tjenestehovedpersoner |
| 5 | Tilgangstoken | Forhåndsanskaffet bærertilgangstoken |
Interaktiv nettleserautentisering
Best for: Utvikling og interaktive applikasjoner
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=1;" +
"LogLevel=INFO";
Connection conn = DriverManager.getConnection(url);
Parametere:
-
AuthFlow=1: Spesifiserer interaktiv nettleserautentisering
Oppførsel:
- Åpner et nettleservindu for brukerautentisering
- Cacher legitimasjon for påfølgende tilkoblinger til de utløper
- Egnet for enkeltbrukerapplikasjoner
Klientlegitimasjon eller autentisering av tjenestehovedpersoner
Best for: Automatiserte tjenester og bakgrunnsjobber
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);
Nødvendige parametere:
-
AuthFlow=3: Spesifiserer autentisering av klientlegitimasjon -
AuthClientID: Applikasjons-(klient-)ID fra Microsoft Entra-ID -
AuthClientSecret: Klienthemmelighet fra Microsoft Entra-ID -
AuthTenantID: Microsoft Entra leietaker-ID
Beste praksis:
- Lagre hemmeligheter sikkert (Azure Key Vault, miljøvariabler)
- Bruk administrerte identiteter når det er mulig
- Roter hemmeligheter regelmessig
Certificate-Based Autentisering
Best for: Bedriftsapplikasjoner som krever sertifikatbasert autentisering
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=4;" +
"AuthClientID=<client-id>;" +
"AuthCertificatePath=/path/to/certificate.pem;" +
"AuthCertificatePassword=<certificate-password>;" +
"AuthTenantID=<tenant-id>;" +
"LogLevel=INFO";
Connection conn = DriverManager.getConnection(url);
Nødvendige parametere:
-
AuthFlow=4: Spesifiserer sertifikatbasert autentisering -
AuthClientID: Applikasjons-ID (klient-ID) -
AuthCertificatePath: Bane til en PEM-sertifikatfil -
AuthCertificatePassword: Sertifikatpassord -
AuthTenantID: Microsoft Entra leietaker-ID
Autentisering av tilgangstoken
Best for: Tilpassede autentiseringsscenarier
// 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);
Autentiseringscache
Driveren cacher autentiseringstokens og oppdaterer dem basert på tokenets utløp. Parsed AuthEnableCaching og AuthCacheTTLMS egenskaper styrer ikke denne oppførselen i versjon 2.0.0.
Konfigurasjonsparametere
Obligatoriske parametere
Disse parameterne må være til stede i hver tilkoblingsstreng:
| Parameter | Type | Beskrivelse | Eksempel |
|---|---|---|---|
FabricWorkspaceID |
UUID | Identifikator for stoffarbeidsområde | <workspace-id> |
FabricLakehouseID |
UUID | Fabric lakehouse-identifikator | <lakehouse-id> |
AuthFlow |
Integer | Autentiseringsflyttype (1-5) | 2 |
Valgfrie parametere
API-versjonskonfigurasjon
| Parameter | Type | Default | Beskrivelse |
|---|---|---|---|
FabricVersion |
Streng | v1 |
Fabric API-versjon |
LivyApiVersion |
Streng | 2023-12-01 |
Livy API-versjon |
Miljøkonfigurasjon
| Parameter | Type | Default | Beskrivelse |
|---|---|---|---|
FabricEnvironmentID |
UUID | Ingen | Fabric-miljøidentifikator for referanse til miljøelement for Spark-sesjon |
Høy-samtidig-sesjonskonfigurasjon
Satt hcEnabled=true til å bruke HC-modus. De gjenværende HC-egenskapene brukes kun når HC-modus er aktivert.
| Parameter | Type | Default | Beskrivelse |
|---|---|---|---|
hcEnabled |
boolsk | false |
Bruker en Fabric høy-samtidig-sesjon. |
sessionTag |
Streng | Ingen | Valgfri serverside sesjonstagg. Bruk 1 til 64 bokstaver, sifre, understreker eller bindestreker. |
hcAcquireTimeoutSeconds |
Integer | 300 |
Maksimal tid til å vente på at HC-økten skal bli klar. Gyldige verdier varierer fra 120 til 3 600 sekunder. |
hcAcquirePollingIntervalMs |
Integer | 1000 |
Intervall mellom statussjekker for HC-økter. Aksepterte verdier varierer fra 50 til 30 000 millisekunder og klemmes ved kjøring til 100 til 5 000 millisekunder. |
Eksempel:
hcEnabled=true;sessionTag=interactive_reporting;hcAcquireTimeoutSeconds=600;hcAcquirePollingIntervalMs=2000;FabricEnvironmentID=<environment-id>
-
FabricEnvironmentIDgjelder både HC- og klassiske økter -
EnvironmentIDer også akseptert som et kryssdriver-alias. Eiendomsnavn er ikke små og små bokstaver.
Important
Bruk sessionTag kun for ikke-sensitive operasjonsetiketter. Ikke inkluder hemmeligheter, tilgangstokens, personopplysninger, kundeidentifikatorer eller spørringstekst.
Se seksjonen omHigh-Concurrency (HC) Mode for fullstendig konfigurasjonsveiledning.
Spark-konfigurasjon
Sesjonsressurskonfigurasjon
Konfigurer Spark-sesjonsressurser for optimal ytelse:
| Parameter | Type | Default | Beskrivelse | Eksempel |
|---|---|---|---|---|
DriverCores |
Integer | Spark-standard | Antall CPU-kjerner for driver | 4 |
DriverMemory |
Streng | Spark-standard | Minneallokering for driver | 4g |
ExecutorCores |
Integer | Spark-standard | Antall CPU-kjerner per utøver | 4 |
ExecutorMemory |
Streng | Spark-standard | Minneallokering per utøver | 8g |
NumExecutors |
Integer | Spark-standard | Antall eksekutorer | 2 |
SessionName |
Streng | Automatisk generert | Egendefinert sesjonsnavn | MySparkSession |
Eksempel:
DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2; SessionName=MySparkSession
Egendefinerte Spark-sesjonsegenskaper
Enhver parameter med prefikset spark. brukes automatisk på Spark-økten:
Eksempler på Spark-konfigurasjoner:
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
Innebygd utførelsesmotor (NEE):
spark.nee.enabled=true
Fullstendig eksempel:
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-klienttilkoblingsinnstillinger
Konfigurer driverens HTTP-transportforbindelser for optimal nettverksytelse. Disse innstillingene konfigurerer eller administrerer ikke JDBC-tilkoblingspooling:
| Parameter | Type | Default | Beskrivelse |
|---|---|---|---|
HttpMaxTotalConnections |
Integer | 100 | Maksimalt antall HTTP-tilkoblinger |
HttpMaxConnectionsPerRoute |
Integer | 20 | Maksimalt antall forbindelser per rute |
HttpConnectionTimeoutInSeconds |
Integer | 30 | Tidsavbrudd for tilkobling |
HttpSocketTimeoutInSeconds |
Integer | 60 | Sokkellesetidsavbrudd |
HttpReadTimeoutInSeconds |
Integer | 60 | HTTP-lesetidsavbrudd |
HttpConnectionRequestTimeoutSeconds |
Integer | 10 | Timeout for tilkoblingsforespørsel fra poolen |
HttpEnableKeepAlive |
boolsk | sann | Aktiver HTTP keep-alive |
HttpKeepAliveTimeoutSeconds |
Integer | 60 | Hold i live-timeout |
HttpFollowRedirects |
boolsk | sann | Følg HTTP-omdirigeringer |
HttpUseAsyncIO |
boolsk | sann | Bruk asynkron HTTP I/O |
Eksempel:
HttpMaxTotalConnections=200;HttpMaxConnectionsPerRoute=100;HttpConnectionTimeoutInSeconds=60
Proxy-konfigurasjon
Konfigurer HTTP- og SOCKS-proxyinnstillinger for bedriftsmiljøer:
| Parameter | Type | Default | Beskrivelse |
|---|---|---|---|
UseProxy |
boolsk | falsk | Aktiver proxy |
ProxyTransport |
Streng | http |
Proxy-transporttype (http/tcp) |
ProxyHost |
Streng | Ingen | Proxy-vertsnavn |
ProxyPort |
Integer | Ingen | Proxy-port |
ProxyAuthEnabled |
boolsk | falsk | Aktiver proxy-autentisering |
ProxyUsername |
Streng | Ingen | Proxy-autentiseringsbrukernavn |
ProxyPassword |
Streng | Ingen | Proxy-autentiseringspassord |
ProxyAuthScheme |
Streng | basic |
Auth-skjema (basic/digest/ntlm) |
ProxySocksVersion |
Integer | 5 | SOCKS-versjonen (4/5) |
Eksempel på HTTP-proxy:
UseProxy=true;ProxyTransport=http;ProxyHost=proxy.company.com;ProxyPort=8080;ProxyAuthEnabled=true;ProxyUsername=user;ProxyPassword=pass
SOCKS-proxy-eksempel:
UseProxy=true;ProxyTransport=tcp;ProxyHost=socks.company.com;ProxyPort=1080;ProxySocksVersion=5
Konfigurasjon av logging
| Parameter | Type | Default | Beskrivelse |
|---|---|---|---|
LogLevel |
Streng | WARN |
Loggingsnivå: SPOR, FEILSØK, INFO, ADVARSEL, FEIL |
Eksempel:
LogLevel=DEBUG
Standard loggplassering:
${user.home}/.microsoft/livy-jdbc-driver/logs/driver.log
Egendefinert loggkonfigurasjon: Bruk en egendefinert log4j2.xml fil eller logback.xml fil på klassestien din.
Høy-samtidighet (HC) modus
High-concurrency (HC)-modus er designet for JDBC-applikasjoner som åpner flere tilkoblinger til samme Fabric-arbeidsområde og lakehouse. I stedet for å opprette en egen klassisk Spark-økt for hver tilkobling, betjener Fabric disse forbindelsene med delt, serverstyrt Spark-kapasitet.
HC-modus kan redusere oppstartstiden for tilkoblingen, unngå gjentatt Spark-sesjonsoppsetting, og bruke tilgjengelig kapasitet mer effektivt for samtidige arbeidsbelastninger. Hver JDBC-tilkobling fortsetter å utføre setninger gjennom sin tildelte kontekst i HC-økten.
HC-modus er opt-in og utfyller JDBC-tilkoblingspooling. HC-modus håndterer Fabric Spark-økter på serveren, mens JDBC-tilkoblingspooling håndterer tilkoblinger i klientapplikasjonen. Hvis du ikke aktiverer HC-modus, lager driveren en klassisk Livy-økt.
Velg mellom HC og klassisk modus
Bruk HC-modus når:
- En applikasjonstjeneste håndterer samtidige forespørsler som kjører Spark SQL gjennom flere JDBC-tilkoblinger.
- Et BI- eller rapporteringsverktøy åpner flere tilkoblinger til samme arbeidsområde og lakehouse.
- Parallelle ETL-oppgaver eller planlagte jobber skaper utbrudd av JDBC-tilkoblinger.
- Tilkoblinger bruker kompatible Spark-konfigurasjoner og kan dele serveradministrert Spark-kapasitet.
- Å redusere oppstartstid for tilkoblingen og gjentatt Spark-sesjonsoppsetting er viktig.
Bruk klassisk modus når:
- Applikasjonen din bruker bare én eller noen få langvarige JDBC-tilkoblinger.
- Hver tilkobling krever en dedikert Spark-økt for streng arbeidsmengde eller ressursisolasjon.
- Tilkoblinger krever vesentlig forskjellige Spark-konfigurasjoner eller Fabric-miljøer.
- Fabric Livy-endepunktet for målarbeidsområdet og lakehouse støtter ikke HC-modus.
Aktiver høy-samtidighetsmodus
HC-modus er frivillig. Hvis du utelater hcEnabled eller setter den til falsk, bruker driveren den klassiske Livy-sesjonsruten. Sett hcEnabled til true for å få en HC-økt:
hcEnabled=true;
Nødvendige parametere i HC-modus
HC-aktivering krever følgende gyldige identifikatorer:
| Parameter | Notater |
|---|---|
WorkspaceId |
Må være en gyldig Fabric workspace GUID. |
LakehouseId |
Må være en gyldig Fabric lakehouse GUID. |
Inkluder SessionTag fordi det påvirker server-side matching for varme økter.
Sesjonsmatching
HC-modus garanterer ikke at hver tilkobling gjenbruker en eksisterende økt. For hver forespørsel om sesjonsinnhenting sender driveren:
- Verdien
SessionTag. - Den effektive Spark-konfigurasjonen, inkludert
conf.*innstillinger ogEnvironmentId.
Fabric Livy-tjenesten vurderer disse verdiene og bestemmer om forbindelsen skal knyttes til en varm sesjon eller opprettes en ny. For å forbedre gjenbruk av sesjoner, bruk konsistente verdier på tvers av tilkoblinger som er ment å dele serveradministrert Spark-kapasitet.
Deaktiver HC-modus
Du kan deaktivere nye HC-sesjonsinnhentinger uten å redeployere driveren ved å sette HC-tilkoblingsstreng til false eller ved å fjerne HC-parameterne:
hcEnabled=false;
Nødtilbakerullinger: For nødtilbakerulling, start JVM med -Dcom.microsoft.fabric.jdbc.hc.disable=true. Denne JVM-omfattende bryteren tvinger klassisk modus selv når en tilkoblingsstreng inneholder hcEnabled=true.
Forstå HC sin kjøretidsoppførsel
- HC-sesjonsinnhentingsblokker til økten er klar eller
hcAcquireTimeoutSecondsutløper. - Å lukke en tilkobling mens anskaffelsen pågår, avbryter anskaffelsen og utløser opprydding av beste innsats i HC-økten.
- Autentisering, spørringsutførelse, kansellering, forberedte setninger, resultathåndtering og
FabricEnvironmentIDarbeid gjennom standard JDBC-grensesnitt i begge moduser.
Brukseksempler
Grunnleggende tilkobling
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();
}
}
}
Høy-samtidighetsmodus-tilkobling
Følgende eksempel åpner en JDBC-tilkobling i HC-modus, kjører en spørring, og frigjør tilkoblingen automatisk:
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=2;" +
"hcEnabled=true;" +
"sessionTag=dashboard_queries;" +
"FabricEnvironmentID=<environment-id>";
try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT current_timestamp()")) {
while (rs.next()) {
System.out.println(rs.getTimestamp(1));
}
}
Utførelse av forespørsler
Enkel spørring
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);
}
}
}
Søk med 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);
}
}
}
Søk med grense
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();
}
}
}
Arbeid med resultatsett
Traverseringsresultatsett
public void navigateResultSet(Connection conn) throws SQLException {
String sql = "SELECT id, name, amount FROM orders";
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
System.out.printf(
"Order %d: %s, %.2f%n",
rs.getInt("id"),
rs.getString("name"),
rs.getDouble("amount"));
}
}
}
Resultatsettene er kun fremover- og skrivebeskyttet. Driveren støtter ikke metoder som first(), last(), og absolute().
Behandling av store resultatsett
Driverens paginerer resultatene etter svarstørrelse. Konfigurer LivyStatementPageSize JDBC-URL-en til å sette den ønskede sidestørrelsen i bytes. Metoden Statement.setFetchSize() styrer ikke henting eller minnebruk.
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=2;LivyStatementPageSize=1048576
public void processLargeResultSet(Connection conn) throws SQLException {
String sql = "SELECT * FROM large_table";
try (Statement stmt = conn.createStatement()) {
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
}
Bruk av forberedte utsagn
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);
}
}
}
}
Batchoperasjoner
Driveren støtter ikke JDBC-transaksjoner. Batch-utførelse er ikke-transaksjonell og kan delvis lykkes. En senere feil ruller ikke tilbake tidligere vellykkede uttalelser.
public void executeBatchInsert(Connection conn) throws SQLException {
String sql = "INSERT INTO logs (timestamp, level, message) VALUES (?, ?, ?)";
int pendingStatements = 0;
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
// 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();
pendingStatements++;
// Execute batch every 100 statements
if ((i + 1) % 100 == 0) {
pstmt.executeBatch();
pstmt.clearBatch();
pendingStatements = 0;
}
}
if (pendingStatements > 0) {
pstmt.executeBatch();
}
System.out.println("Batch insert completed successfully");
}
}
Velg en tilkoblingseier
Velg én komponent for å eie forbindelsens livssyklus. Ikke plasser én tilkoblingspool i en annen.
| Bruksmodell | Inngangspunkt | Bassengeier | Å lukke en lånt Connection |
Nedstengt eier |
|---|---|---|---|---|
| Direkte |
DriverManager, LivyDrivereller LivyDataSource |
Ingen | Fysisk avslutter sin uavhengige Livy-forbindelse og sesjon. | Applikasjonen lukker alle tilkoblinger. En direkte LivyDataSource har ingen separat nær livssyklus. |
| Ekstern HikariCP |
HikariDataSource støttet av en JDBC-URL eller LivyDataSource |
Kun HikariCP | Returnerer Hikari-proxy-forbindelsen til HikariCP. | Applikasjonen avslutter sin retained HikariDataSource. |
| Eksplisitt innebygd pool | LivyBuiltInPooledDataSource |
En lat laget LivyConnectionPool for hver konfigurert datakildegenerering |
Pensjonerer den logiske leiekontrakten og gjenbruker den fysiske økten kun etter sikker opprydding. | Applikasjonen lukker sin innebygde datakilde. |
| Standard pooling SPI |
LivyConnectionPoolDataSource Lager PooledConnection objekter for en poolmanager på mellomnivå |
Mellomlederen for bassenget, ikke fabrikken | Lukker det logiske håndtaket og varsler samtidig lederen etter opprydding. | Lederen ringer PooledConnection.close() for å ødelegge hver fysisk tilkobling. |
ConnectionPoolEnabled som standard både false i driverkoden og de sendte egenskapene. Det er ikke en opt-in-bryter for de nåværende inngangspunktene. Bruk LivyBuiltInPooledDataSource når driveren skal eie poolen, eller konfigurer en ekstern pool som HikariCP. De andre inngangspunktene skaper direkte, ikke-pool-eiere forbindelser.
Tilkoblingspooling med HikariCP
HikariCP kan opprette forbindelser fra enten LivyDataSource eller JDBC-URL-en gjennom LivyDriver. Opprett én HikariCP-instans, gjenbruk den for applikasjonens levetid, og bruk kun én tilkoblingspool i hver konfigurasjon.
Maven-avhengighet
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
Bruk LivyDataSource
LivyDataSource Skaper uavhengige fysiske forbindelser og eier ikke en tilkoblingspool eller en separat nær livssyklus. Gi det direkte til HikariCP slik at HikariCP er den eneste bassengeieren:
import com.microsoft.spark.livy.jdbc.LivyDataSource;
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 ConnectionPoolExample implements AutoCloseable {
private final HikariDataSource hikariDataSource;
public ConnectionPoolExample(String url) {
LivyDataSource configuredDataSource = new LivyDataSource();
configuredDataSource.setUrl(url);
HikariConfig config = new HikariConfig();
config.setDataSource(configuredDataSource);
config.setMaximumPoolSize(2);
config.setMinimumIdle(0);
config.setConnectionTimeout(900000); // Wait up to 15 minutes for a connection
config.setInitializationFailTimeout(-1); // Connect on demand
config.setIdleTimeout(600000); // 10 minutes
config.setMaxLifetime(1800000); // 30 minutes
config.setPoolName("FabricSparkPool");
hikariDataSource = new HikariDataSource(config);
}
public Connection getConnection() throws SQLException {
return hikariDataSource.getConnection();
}
@Override
public void close() {
hikariDataSource.close();
}
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;" +
"hcEnabled=true;" +
"sessionTag=pooled_app;" +
"hcAcquireTimeoutSeconds=600";
try (ConnectionPoolExample pool = new ConnectionPoolExample(url);
Connection conn = pool.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 'Pooled connection!' as message")) {
if (rs.next()) {
System.out.println(rs.getString("message"));
}
}
}
}
Eksempelet aktiverer HC-modus i JDBC-URL-en. HikariCP håndterer klienttilkoblinger, mens HC-modus håndterer delte Spark-økter i Fabric. Fjern hcEnabled og sessionTag hvis applikasjonen krever klassiske økter.
Bruk LivyDriver direkte
Konfigurer JDBC-URL-en og driverklassen slik at HikariCP oppretter fysiske forbindelser gjennom LivyDriver. Å sette driver-klassen eksplisitt er valgfritt når JDBC-tjenesteleverandørens auto-discovery er tilgjengelig. Denne konfigurasjonen instansierer LivyDataSourceikke , så dens innebygde pool er ikke involvert:
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
"hcEnabled=true;" +
"sessionTag=pooled_app;" +
"hcAcquireTimeoutSeconds=600"; // Poll up to 10 minutes for HC 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"));
}
}
}
}
Bruk følgende veiledning når du konfigurerer poolen:
| Setting eller atferd | Veiledning |
|---|---|
| Bassengeierskap |
LivyDataSource er kun direkte. Når du leverer det til HikariCP, eier HikariCP bassenget. Bruk LivyBuiltInPooledDataSource i stedet når sjåføren skal eie bassenget. |
| Bassengstørrelse | Start med en liten pool og øk den først etter å ha målt arbeidsmengdens samtidighet og kapasitetsbruk. I klassisk modus eier hver fysisk forbindelse en Livy-økt. I HC-modus kan tilkoblinger dele serveradministrert Spark-kapasitet. |
connectionTimeout |
Styrer hvor lenge en innringer venter på å låne en tilkobling, men avbryter ikke et tilkoblingsforsøk som allerede pågår. For HC-URL-er, tillat hcAcquireTimeoutSeconds; for klassisk modus, tillat LivySessionTimeoutSeconds, autentisering, HTTP-forsøk og validering. HikariCP uttrykker denne innstillingen i millisekunder. |
initializationFailTimeout |
En negativ verdi hopper over oppstartstilkoblingen og valideringsforsøket. Tilkoblingsfeil dukker opp når applikasjonen først ber om en tilkobling. Bruk en positiv verdi hvis applikasjonen må verifisere tilkoblingen under oppstart. |
| Bekreftelse av tilkobling | HikariCP bruker Connection.isValid(). Den effektive varigheten styres av driverens HTTP-timeout og retry/backoff-innstillinger, ikke HikariCPs validationTimeout. Ikke konfigurer en tilkoblingstestspørring, fordi den erstatter den lettere valideringssjekken med en Spark-setning. |
For den komplette listen over HikariCP-konfigurasjonsalternativer, se:
Datatypekartlegging
Driveren tilordner Spark SQL-datatyper til JDBC SQL-typer og Java-typer:
| Spark SQL Type | JDBC SQL Type | Java-type | Notater |
|---|---|---|---|
BOOLEAN |
BOOLEAN |
Boolean |
|
BYTE |
TINYINT |
Byte |
|
SHORT |
SMALLINT |
Short |
|
INT |
INTEGER |
Integer |
|
LONG |
BIGINT |
Long |
|
FLOAT |
FLOAT |
Float |
|
DOUBLE |
DOUBLE |
Double |
|
DECIMAL |
DECIMAL |
BigDecimal |
Presisjon og skala bevart |
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 |
ARRAY |
String |
Hentet som JSON-tekst; metadatatypen garanterer ikke full java.sql.Array støtte for accessorer |
MAP |
JAVA_OBJECT |
String |
Hentet som JSON-tekst |
STRUCT |
STRUCT |
String |
Hentet som JSON-tekst; metadatatypen garanterer ikke full java.sql.Struct støtte for accessorer |