Microsoft JDBC-drivrutin för Microsoft Fabric Data Engineering

JDBC (Java Database Connectivity) är en allmänt antagen standard som gör det möjligt för klientprogram att ansluta till och arbeta med data från databaser och stordataplattformar.

Microsoft JDBC Driver för Fabric Data Engineering låter dig koppla samman, fråga och hantera Spark-arbetsbelastningar i Fabric med samma tillförlitlighet och enkelhet som JDBC-standarden. Byggd på Fabric:s Livy-API:er erbjuder drivrutinen säker och flexibel Spark SQL-anslutning till dina Java-applikationer och BI-verktyg. Denna integration gör det möjligt att skicka in och köra Spark-kod direkt utan att behöva skapa separata notebook- eller Spark-jobbdefinitionsobjekt. Drivrutinen är kompatibel med populära JDBC-klienter som DbVisualizer och DBeaver, samt BI-verktyg som stöder JDBC-anslutning, inklusive Tableau.

Huvudfunktioner    

  • JDBC 4.2-kompatibel: Fullständig implementering av JDBC 4.2-specifikation
  • Microsoft Entra-ID-autentisering: Flera autentiseringsflöden, inklusive interaktiva klientautentiseringsuppgifter och certifikatbaserad autentisering
  • HikariCP-integration: Använd HikariCP för att hantera och återanvända JDBC-anslutningar för produktionsapplikationer
  • Stöd för Spark SQL Native Query: Direkt körning av Spark SQL-instruktioner utan översättning
  • Omfattande stöd för datatyper: Stöd för alla Spark SQL-datatyper, inklusive komplexa typer (ARRAY, MAP, STRUCT)
  • Asynkron förinläsning av resultatuppsättning: Inläsning av bakgrundsdata för bättre prestanda
  • Kretsbrytarmönster: Skydd mot sammanhängande fel med automatiskt återförsök
  • Automatisk återanslutning: Transparent sessionsåterställning vid anslutningsfel
  • Avancerad logik för återförsök: Försök igen med exponentiell backoff och sessionsåterställning för bättre motståndskraft
  • Proxystöd: HTTP- och SOCKS-proxykonfiguration för företagsmiljöer

Förutsättningar

Innan du använder Microsoft JDBC Driver för Fabric Data Engineering, se till att du har:

  • Java Development Kit (JDK): Version 11 eller senare (Java 21 rekommenderas)
  • Fabric Access: Tillgång till en arbetsyta för Fabric
  • Microsoft Entra ID-autentiseringsuppgifter: Lämpliga uppgifter för autentisering
  • Workspace- och Lakehouse-ID: GUID-identifierare för din Fabric-arbetsyta och lakehouse

Ladda ned och installera

Microsoft JDBC Driver for Fabric Data Engineering version 1.0.0 stöder Java 11, 17 och 21. Vi förbättrar kontinuerligt Java-anslutningssupporten och rekommenderar att du arbetar med den senaste versionen av Microsoft JDBC-drivrutinen.

  1. Ladda ned zip- eller tar-filen från länkarna ovan.
  2. Extrahera den nedladdade filen för att få åtkomst till drivrutins-JAR-filerna.
  3. Välj DEN JAR-fil som matchar din JRE-version:
    • För Java 11: ms-sparksql-jdbc-1.0.1.jre11.jar
    • För Java 17: ms-sparksql-jdbc-1.0.1.jre17.jar
    • För Java 21: ms-sparksql-jdbc-1.0.1.jre21.jar
  4. Lägg till den valda JAR-filen i programmets klassökväg.
  5. För JDBC-klienter konfigurerar du JDBC-drivrutinsklassen: com.microsoft.spark.livy.jdbc.LivyDriver

Snabbstartsexempel

Detta exempel visar hur man ansluter till Fabric och kör en fråga med Microsoft JDBC Driver for Fabric Data Engineering. Innan du kör den här koden kontrollerar du att du har slutfört förutsättningarna och installerat drivrutinen.

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();
        }
    }
}

Format för anslutningssträng

Grundläggande anslutningssträng

Microsoft JDBC Driver for Fabric Data Engineering använder följande reťazec pripojenia-format:

jdbc:fabricspark://<hostname>[:<port>][;<parameter1>=<value1>;<parameter2>=<value2>;...]

Komponenter för anslutningssträngar

Komponent Description Example
Protocol JDBC URL-protokollidentifierare jdbc:fabricspark://
Värdnamn Fabric-endpointens värdnamn api.fabric.microsoft.com
Hamn Valfritt portnummer (standard: 443) :443
Parameters Semikolonavgränsad nyckel=värdepar FabricWorkspaceID=<guid>

Exempel på anslutningssträngar

Grundläggande anslutning (interaktiv webbläsarbaserad autentisering)

jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=1

Med Spark-resurskonfiguration

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 Egenskaper för Spark-sessioner

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 stöder flera autentiseringsmetoder via Microsoft Entra ID (tidigare Azure Active Directory). Autentisering konfigureras med hjälp av parametern AuthFlow i anslutningssträngen.

Autentiseringsflöden

AuthFlow Autentiseringsmetod Användningsfall
1 Interaktiv webbläsare Interaktiv användarautentisering med OAuth 2.0
2 Azure CLI (kommandoradsgränssnittet för Azure) Utveckling med Hjälp av Azure CLI
3 Autentiseringsuppgifter för klienthemlighet (tjänstens huvudidentifierare) Automatiserad/tjänst-till-tjänst-autentisering
4 Autentiseringsuppgifter för klientcertifikat Certifikatbaserad autentisering av tjänstekonto
5 Åtkomsttoken Fördefinierad ägaråtkomsttoken

Interaktiv webbläsarautentisering

Bäst för: Utveckling och interaktiva program

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: Anger interaktiv webbläsarautentisering
  • AuthTenantID (valfritt): Microsoft Entra tenant-ID
  • AuthClientID (valfritt): Program-ID (klient)-ID

Uppförande:

  • Öppnar ett webbläsarfönster för användarautentisering
  • Autentiseringsuppgifter cachelagras för efterföljande anslutningar tills de har upphört att gälla
  • Lämplig för enanvändarprogram

Klientautentiseringsuppgifter eller tjänstehuvudkontoautentisering

Bäst för: Automatiserade tjänster och bakgrundsjobb

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);

Obligatoriska parametrar:

  • AuthFlow=3: Anger autentiseringsuppgifter för klienten
  • AuthClientID: Program-ID (klient) från Microsoft Entra-ID
  • AuthClientSecret: Klienthemlighet från Microsoft Entra-ID
  • AuthTenantID: Microsoft Entra klientorganisations-ID

Metodtips:

  • Lagra hemligheter på ett säkert sätt (Azure Key Vault, miljövariabler)
  • Använda hanterade identiteter när det är möjligt
  • Rotera hemligheter regelbundet

Certifikatbaserad autentisering

Bäst för: Företagsprogram som kräver certifikatbaserad autentisering

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);

Obligatoriska parametrar:

  • AuthFlow=4: Anger certifikatbaserad autentisering
  • AuthClientID: Program-ID (klient)-ID
  • AuthCertificatePath: Sökväg till PFX/PKCS12-certifikatfilen
  • AuthCertificatePassword: Certifikatlösenord
  • AuthTenantID: Microsoft Entra klientorganisations-ID

Åtkomsttokenautentisering

Bäst för: Scenarier för anpassad autentisering

// 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);

Cachelagring av autentisering

Drivrutinen cachelagrar automatiskt autentiseringstoken för att förbättra prestandan:

// 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);

Konfigurationsparametrar

Obligatoriska parametrar

Dessa parametrar måste finnas i varje anslutningssträng:

Parameter Typ Description Example
FabricWorkspaceID universellt unik identifierare (UUID) Identifierare för Fabric-arbetsyta <workspace-id>
FabricLakehouseID universellt unik identifierare (UUID) Fabric lakehouse-identifierare <lakehouse-id>
AuthFlow Integer Typ av autentiseringsflöde (1–5) 2

Valfria parametrar

Konfiguration av API-version

Parameter Typ Förinställning Description
FabricVersion String v1 Fabric API-versionen
LivyApiVersion String 2023-12-01 Livy API-version

Miljökonfiguration

Parameter Typ Förinställning Description
FabricEnvironmentID universellt unik identifierare (UUID) None Infrastrukturmiljöidentifierare för referens av miljöobjekt för Spark-session

Spark-konfiguration

Sessionsresurskonfiguration

Konfigurera Spark-sessionsresurser för optimala prestanda:

Parameter Typ Förinställning Description Example
DriverCores Integer Standardvärde för Spark Antal CPU-kärnor för drivrutin 4
DriverMemory String Standardvärde för Spark Minnesallokering för drivrutin 4g
ExecutorCores Integer Standardvärde för Spark Antal CPU-kärnor per köre 4
ExecutorMemory String Standardvärde för Spark Minnesallokering per exekverare 8g
NumExecutors Integer Standardvärde för Spark Antal utförare 2

Example:

DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2

Egenskaper för anpassad Spark-session

Alla parametrar med prefixet spark. tillämpas automatiskt på Spark-sessionen:

Exempel på Spark-konfigurationer:

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

Inbyggd exekveringsmotor (NEE):

spark.nee.enabled=true

Fullständigt exempel:

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-klientanslutningsinställningar

Konfigurera drivrutinens HTTP-transportanslutningar för optimal nätverksprestanda. Dessa inställningar konfigurerar eller hanterar inte JDBC:s anslutningspoolning:

Parameter Typ Förinställning Description
HttpMaxTotalConnections Integer 100 Maximalt antal HTTP-anslutningar
HttpMaxConnectionsPerRoute Integer 50 Maximalt antal anslutningar per väg
HttpConnectionTimeoutInSeconds Integer 30 Tidsgräns för anslutning
HttpSocketTimeoutInSeconds Integer 60 Tidsgräns för socket-läsning
HttpReadTimeoutInSeconds Integer 60 Tidsgräns för HTTP-läsning
HttpConnectionRequestTimeoutSeconds Integer 30 Tidsgräns för anslutningsbegäran från poolen
HttpEnableKeepAlive Boolean true Aktivera HTTP keep-alive
HttpKeepAliveTimeoutSeconds Integer 60 Timeout för keep-alive
HttpFollowRedirects Boolean true Följ HTTP-omdirigeringar
HttpUseAsyncIO Boolean false Använda asynkront HTTP I/O

Example:

HttpMaxTotalConnections=200;HttpMaxConnectionsPerRoute=100;HttpConnectionTimeoutInSeconds=60

Proxykonfiguration

Konfigurera HTTP- och SOCKS-proxyinställningar för företagsmiljöer:

Parameter Typ Förinställning Description
UseProxy Boolean false Aktivera proxy
ProxyTransport String http Proxytransporttyp (http/tcp)
ProxyHost String None Proxyvärdnamn
ProxyPort Integer None Proxyport
ProxyAuthEnabled Boolean false Aktivera proxyautentisering
ProxyUsername String None Användarnamn för proxyautentisering
ProxyPassword String None Proxyautentiseringslösenord
ProxyAuthScheme String basic Autentiseringsschema (basic/digest/ntlm)
ProxySocksVersion Integer 5 SOCKS-version (4/5)

HTTP-proxyexempel:

UseProxy=true;ProxyTransport=http;ProxyHost=proxy.company.com;ProxyPort=8080;ProxyAuthEnabled=true;ProxyUsername=user;ProxyPassword=pass

EXEMPEL på SOCKS-proxy:

UseProxy=true;ProxyTransport=tcp;ProxyHost=socks.company.com;ProxyPort=1080;ProxySocksVersion=5

Loggningskonfiguration

Parameter Typ Förinställning Description
LogLevel String INFO Loggningsnivå: TRACE, DEBUG, INFO, WARN, ERROR

Example:

LogLevel=DEBUG

Standardloggplats:

${user.home}/.microsoft/livy-jdbc-driver/driver.log

Anpassad loggkonfiguration: Använd en anpassad log4j2.xml fil eller logback.xml fil på din klasssökväg.


Användningsexempel

Grundläggande anslutning

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();
        }
    }
}

Utföra frågor

Enkel fråga

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);
        }
    }
}

Fråga 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);
        }
    }
}

Fråga med gräns

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();
        }
    }
}

Arbeta med resultatuppsättningar

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"));
        }
    }
}

Bearbeta stora resultatuppsättningar

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
}

Använda förberedda satser

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);
            }
        }
    }
}

Batch-åtgärder

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);
    }
}

Anslutningspoolning med HikariCP

Konfigurera HikariCP med JDBC-URL:en så att den skapar anslutningar genom LivyDriver. Skapa en HikariCP-instans och återanvänd den under applikationens livslängd.

Maven-beroende

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.1</version>
</dependency>

Konfigurera HikariCP med JDBC-URL:en

Konfigurera JDBC-URL:en och drivrutinsklassen så att HikariCP skapar fysiska anslutningar genom LivyDriver. Att uttryckligen ange drivrutinsklassen är valfritt när automatisk identifiering av JDBC-tjänstleverantörer stöds:

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"));
            }
        }
    }
}

Använd följande vägledning när du konfigurerar poolen:

Miljö eller beteende Guidance
connectionTimeout Styr hur länge en uppringare väntar på att låna en anslutning, men avbryter inte ett anslutningsförsök som redan pågår. Ställ in den högre än LivySessionTimeoutSeconds för att tillåta tid för autentisering, sessionsskapande, HTTP-omförsök och initial validering.
Anslutningsvalidering HikariCP använder Connection.isValid(). Dess effektiva varaktighet styrs av drivrutinens HTTP-timeout och återförsök/backoff-inställningar, inte HikariCP:s.validationTimeout Konfigurera inte en anslutningstestfråga eftersom den ersätter den lättare valideringskontrollen med en Spark-sats.

För den kompletta listan över HikariCP-konfigurationsalternativ, se:

Datatypsmappning

Drivrutinen mappar Spark SQL-datatyper till JDBC SQL-typer och Java-typer:

Spark SQL-typ JDBC SQL-typ Java-typ Noteringar
BOOLEAN BOOLEAN Boolean
BYTE TINYINT Byte
SHORT SMALLINT Short
INT INTEGER Integer
LONG BIGINT Long
FLOAT FLOAT Float
DOUBLE DOUBLE Double
DECIMAL DECIMAL BigDecimal Precision och skalning bevaras
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 Serialiserad som JSON
MAP VARCHAR String Serialiserad som JSON
STRUCT VARCHAR String Serialiserad som JSON