Udostępnij przez


Sterownik JDBC firmy Microsoft dla inżynierii danych usługi Microsoft Fabric (wersja zapoznawcza)

Uwaga / Notatka

Ta funkcja jest w wersji zapoznawczej.

JDBC (łączność z bazą danych Java) to powszechnie przyjęty standard, który umożliwia aplikacjom klienckim łączenie się z danymi z baz danych i platform danych big data oraz pracę z nimi.

Sterownik JDBC firmy Microsoft dla inżynierii danych Fabric pozwala na łączenie się, przeprowadzanie zapytań i zarządzanie obciążeniami Spark w usłudze Microsoft Fabric z zachowaniem niezawodności i prostoty standardu JDBC. Oparty na interfejsach API Livy z Microsoft Fabric, sterownik zapewnia bezpieczne i elastyczne połączenie Spark SQL z aplikacjami Java i narzędziami analizy biznesowej. Ta integracja umożliwia przesyłanie i wykonywanie kodu platformy Spark bezpośrednio bez konieczności tworzenia oddzielnych artefaktów notesu lub definicji zadań platformy Spark.

Najważniejsze funkcje    

  • Zgodność JDBC 4.2: pełna implementacja specyfikacji JDBC 4.2
  • Uwierzytelnianie Microsoft Entra ID: wiele przepływów uwierzytelniania, w tym interakcyjne, poświadczenia klienta i uwierzytelnianie oparte na certyfikatach
  • Buforowanie połączeń korporacyjnych: wbudowane buforowanie połączeń z monitorowaniem kondycji i automatycznym odzyskiwaniem.
  • Obsługa zapytań natywnych spark SQL: bezpośrednie wykonywanie instrukcji Spark SQL bez tłumaczenia
  • Kompleksowa obsługa typów danych: obsługa wszystkich typów danych Spark SQL, w tym typów złożonych (ARRAY, MAP, STRUCT)
  • Asynchroniczne pobieranie zestawu wyników: ładowanie danych w tle w celu zwiększenia wydajności
  • Wzorzec obwodu przerywającego: Ochrona przed awariami kaskadowymi z automatycznym ponawianiem
  • Automatyczne ponowne nawiązywanie połączenia: Przezroczyste odzyskiwanie sesji w przypadku niepowodzeń połączenia
  • Obsługa serwera proxy: konfiguracja serwera proxy HTTP i SOCKS dla środowisk przedsiębiorstwa

Wymagania wstępne

Przed użyciem sterownika JDBC firmy Microsoft dla inżynierii danych usługi Microsoft Fabric upewnij się, że:

  • Zestaw Java Development Kit (JDK): wersja 11 lub nowsza (zalecane środowisko Java 21)
  • Microsoft Fabric Access: dostęp do obszaru roboczego usługi Microsoft Fabric
  • Poświadczenia Azure Entra ID: odpowiednie poświadczenia do uwierzytelniania
  • Identyfikatory obszaru roboczego i lakehouse: identyfikatory GUID dla obszaru roboczego Fabric i lakehouse

Pobieranie i instalacja

Sterownik JDBC firmy Microsoft dla usługi Microsoft Fabric Data Engineering w wersji 1.0.0 to publiczna wersja zapoznawcza i obsługuje środowisko Java 11, 17 i 21. Stale ulepszamy obsługę łączności w języku Java i zalecamy pracę z najnowszą wersją sterownika JDBC firmy Microsoft.

  1. Pobierz plik zip lub tar z powyższych linków.
  2. Wyodrębnij pobrany plik, aby uzyskać dostęp do plików JAR sterownika.
  3. Wybierz plik JAR zgodny z wersją środowiska JRE:
    • W przypadku języka Java 11: ms-sparksql-jdbc-1.0.0.jre11.jar
    • Dla środowiska Java 17: ms-sparksql-jdbc-1.0.0.jre17.jar
    • Dla środowiska Java 21: ms-sparksql-jdbc-1.0.0.jre21.jar
  4. Dodaj wybrany plik JAR do ścieżki klasy aplikacji.
  5. W przypadku klientów JDBC skonfiguruj klasę sterowników JDBC: com.microsoft.spark.livy.jdbc.LivyDriver

Przykład szybkiego startu

W tym przykładzie pokazano, jak nawiązać połączenie z usługą Microsoft Fabric i wykonać zapytanie przy użyciu sterownika JDBC firmy Microsoft dla inżynierii danych usługi Microsoft Fabric. Przed uruchomieniem tego kodu upewnij się, że zostały spełnione wymagania wstępne i zainstalowano sterownik.

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;" +  // Interactive browser 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 ciągu połączenia

Podstawowy ciąg połączenia

Sterownik JDBC firmy Microsoft dla inżynierii danych usługi Microsoft Fabric używa następującego formatu parametrów połączenia:

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

Składniki ciągu połączenia

Składnik Description Example
Protocol Identyfikator protokołu URL JDBC jdbc:fabricspark://
Nazwa hosta Nazwa hosta punktu końcowego usługi Microsoft Fabric api.fabric.microsoft.com
Port Opcjonalny numer portu (domyślnie: 443) :443
Parametry Rozdzielane średnikami pary klucz=wartość FabricWorkspaceID=<guid>

Przykładowe ciągi połączenia

Połączenie podstawowe (uwierzytelnianie interakcyjne)

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

Za pomocą konfiguracji zasobów platformy Spark

jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2;AuthFlow=2

Za pomocą właściwości sesji Spark

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

Sterownik JDBC firmy Microsoft dla inżynierii danych usługi Microsoft Fabric obsługuje wiele metod uwierzytelniania za pośrednictwem identyfikatora Entra firmy Microsoft (dawniej Azure Active Directory). Uwierzytelnianie jest konfigurowane przy użyciu parametru AuthFlow w parametrach połączenia.

Przepływy uwierzytelniania

AuthFlow Metoda uwierzytelniania Przypadek użycia
0 Poświadczenia Azure CLI Programowanie przy użyciu interfejsu wiersza polecenia platformy Azure
1 Poświadczenia klienta (jednostka usługi) Automatyczne uwierzytelnianie między usługami
2 Przeglądarka interaktywna Uwierzytelnianie interakcyjne użytkownika (ustawienie domyślne)
3 główna nazwa usługi Uwierzytelnianie podmiotu usługi
4 Oparty na certyfikacie Uwierzytelnianie jednostki usługi opartej na certyfikatach
5 Token dostępu Wstępnie uzyskany token dostępu

Uwierzytelnianie za pomocą przeglądarki interakcyjnej

Najlepsze do: Rozwoju i interaktywnych aplikacji

String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
             "FabricWorkspaceID=<workspace-id>;" +
             "FabricLakehouseID=<lakehouse-id>;" +
             "AuthFlow=2;" +  // Interactive browser authentication
             "AuthTenantID=<tenant-id>;" +  // Optional
             "LogLevel=INFO";

Connection conn = DriverManager.getConnection(url);

Parametry:

  • AuthFlow=2: Określa uwierzytelnianie za pomocą przeglądarki interakcyjnej
  • AuthTenantID (opcjonalnie): identyfikator dzierżawy platformy Azure
  • AuthClientID (opcjonalnie): identyfikator aplikacji (klienta)

Zachowanie:

  • Otwiera okno przeglądarki na potrzeby uwierzytelniania użytkownika
  • Poświadczenia są buforowane dla kolejnych połączeń do momentu wygaśnięcia
  • Odpowiednie dla aplikacji z jednym użytkownikiem

Uwierzytelnianie poświadczeń klienta

Najlepsze dla: Zautomatyzowane usługi i zadania w tle

String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
             "FabricWorkspaceID=<workspace-id>;" +
             "FabricLakehouseID=<lakehouse-id>;" +
             "AuthFlow=1;" +  // Client credentials authentication
             "AuthClientID=<client-id>;" +
             "AuthClientSecret=<client-secret>;" +
             "AuthTenantID=<tenant-id>;" +
             "LogLevel=INFO";

Connection conn = DriverManager.getConnection(url);

Wymagane parametry:

  • AuthFlow=1: Określa uwierzytelnianie poświadczeń klienta
  • AuthClientID: Identyfikator aplikacji (klienta) z Microsoft Entra ID
  • AuthClientSecret: Tajny klucz klienta od Microsoft Entra ID
  • AuthTenantID: Identyfikator dzierżawy platformy Azure

Najlepsze rozwiązania:

  • Bezpieczne przechowywanie wpisów tajnych (azure Key Vault, zmienne środowiskowe)
  • Używanie tożsamości zarządzanych, jeśli jest to możliwe
  • Regularne zmienianie sekretów

Uwierzytelnianie certyfikatem

Najlepsze rozwiązanie: Aplikacje dla przedsiębiorstw wymagające uwierzytelniania opartego na certyfikatach

String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
             "FabricWorkspaceID=<workspace-id>;" +
             "FabricLakehouseID=<lakehouse-id>;" +
             "AuthFlow=4;" +  // Certificate-based authentication
             "AuthClientID=<client-id>;" +
             "AuthCertificatePath=/path/to/certificate.pfx;" +
             "AuthCertificatePassword=<certificate-password>;" +
             "AuthTenantID=<tenant-id>;" +
             "LogLevel=INFO";

Connection conn = DriverManager.getConnection(url);

Wymagane parametry:

  • AuthFlow=4: Określa uwierzytelnianie oparte na certyfikatach
  • AuthClientID: Identyfikator aplikacji (klienta)
  • AuthCertificatePath: Ścieżka do pliku certyfikatu PFX/PKCS12
  • AuthCertificatePassword: Hasło certyfikatu
  • AuthTenantID: Identyfikator dzierżawy platformy Azure

Uwierzytelnianie jednostki usługi

Najlepsze rozwiązanie: środowiska bezgłówne i sesje zdalne

String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
             "FabricWorkspaceID=<workspace-id>;" +
             "FabricLakehouseID=<lakehouse-id>;" +
             "AuthFlow=3;" +  // Device code authentication
             "AuthClientID=<client-id>;" +
             "AuthTenantID=<tenant-id>;" +
             "LogLevel=INFO";

Connection conn = DriverManager.getConnection(url);

Zachowanie:

  • Wyświetla kod urządzenia i adres URL w konsoli
  • Użytkownik odwiedza adres URL i wprowadza kod
  • Uwierzytelnianie kończy się po weryfikacji użytkownika

Uwierzytelnianie tokenu dostępu

Najlepszy wybór dla: niestandardowe scenariusze uwierzytelniania

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

Buforowanie uwierzytelniania

Sterownik automatycznie buforuje tokeny uwierzytelniania w celu zwiększenia wydajności:

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

Parametry konfiguracji

Wymagane parametry

Te parametry muszą być obecne w każdym ciągu połączenia:

Parameter Typ Description Example
FabricWorkspaceID UUID Identyfikator obszaru roboczego usługi Microsoft Fabric <workspace-id>
FabricLakehouseID UUID Identyfikator usługi Lakehouse usługi Microsoft Fabric <lakehouse-id>
AuthFlow Integer Typ przepływu uwierzytelniania (0–5) 2

Parametry opcjonalne

Konfiguracja wersji interfejsu API

Parameter Typ Default Description
FabricVersion Sznurek v1 Wersja interfejsu API usługi Microsoft Fabric
LivyApiVersion Sznurek 2023-12-01 Wersja interfejsu API usługi Livy

Konfiguracja środowiska

Parameter Typ Default Description
FabricEnvironmentID UUID Żaden Identyfikator środowiska Fabric do odwoływania się do składnika środowiska dla sesji Spark

Konfiguracja platformy Spark

Konfiguracja zasobu sesji

Skonfiguruj zasoby sesji platformy Spark w celu uzyskania optymalnej wydajności:

Parameter Typ Default Description Example
DriverCores Integer Ustawienie domyślne platformy Spark Liczba rdzeni CPU dla sterownika 4
DriverMemory Sznurek Ustawienie domyślne platformy Spark Alokacja pamięci dla sterownika 4g
ExecutorCores Integer Ustawienie domyślne platformy Spark Liczba rdzeni procesora CPU na egzekutora 4
ExecutorMemory Sznurek Ustawienie domyślne platformy Spark Alokacja pamięci na wykonawcę 8g
NumExecutors Integer Ustawienie domyślne platformy Spark Liczba funkcji wykonawczych 2

Example:

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

Niestandardowe właściwości sesji platformy Spark

Dowolny parametr z prefiksem spark. jest automatycznie stosowany do sesji platformy Spark:

Przykładowe konfiguracje platformy Spark:

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

Natywny silnik wykonywania (NEE):

spark.nee.enabled=true

Kompletny przykład:

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

Konfiguracja puli połączeń HTTP

Skonfiguruj buforowanie połączeń HTTP w celu uzyskania optymalnej wydajności sieci:

Parameter Typ Default Description
HttpMaxTotalConnections Integer 100 Maksymalna łączna liczba połączeń HTTP
HttpMaxConnectionsPerRoute Integer 50 Maksymalna liczba połączeń na trasę
HttpConnectionTimeoutInSeconds Integer 30 Przekroczenie limitu czasu połączenia
HttpSocketTimeoutInSeconds Integer 60 Limit czasu odczytu gniazda
HttpReadTimeoutInSeconds Integer 60 Limit czasu oczekiwania na odczyt HTTP
HttpConnectionRequestTimeoutSeconds Integer 30 Przekroczenie czasu żądania połączenia z puli połączeń
HttpEnableKeepAlive logiczny true Włączanie utrzymywania aktywności protokołu HTTP
HttpKeepAliveTimeoutSeconds Integer 60 Limit czasu podtrzymania połączenia
HttpFollowRedirects logiczny true Śledź przekierowania HTTP
HttpUseAsyncIO logiczny false Używanie asynchronicznego I/O HTTP

Example:

HttpMaxTotalConnections=200;HttpMaxConnectionsPerRoute=100;HttpConnectionTimeoutInSeconds=60

Konfiguracja serwera proxy

Skonfiguruj ustawienia serwera proxy HTTP i SOCKS dla środowisk przedsiębiorstwa:

Parameter Typ Default Description
UseProxy logiczny false Włączanie serwera proxy
ProxyTransport Sznurek http Typ transportu serwera proxy (http/tcp)
ProxyHost Sznurek Żaden Nazwa hosta serwera proxy
ProxyPort Integer Żaden Port serwera proxy
ProxyAuthEnabled logiczny false Włączanie uwierzytelniania serwera proxy
ProxyUsername Sznurek Żaden Nazwa użytkownika uwierzytelniania serwera proxy
ProxyPassword Sznurek Żaden Hasło uwierzytelniania serwera proxy
ProxyAuthScheme Sznurek basic Schemat uwierzytelniania (basic/digest/ntlm)
ProxySocksVersion Integer 5 Wersja protokołu SOCKS (4/5)

Przykład serwera proxy HTTP:

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

Przykład serwera proxy SOCKS:

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

Konfiguracja rejestrowania

Parameter Typ Default Description
LogLevel Sznurek INFO Poziom rejestrowania: TRACE (śledzenie), DEBUG (debugowanie), INFO (informacja), WARN (ostrzeżenie), ERROR (błąd)

Example:

LogLevel=DEBUG

Domyślna lokalizacja dziennika:

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

Niestandardowa konfiguracja dziennika: Użyj niestandardowego pliku lub log4j2.xmllogback.xml na ścieżce klas.


Przykłady użycia

Połączenie podstawowe

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

Wykonywanie zapytań

Proste zapytanie

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

Zapytanie z filtrem

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

Wykonywanie zapytań z limitem

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

Praca z zestawami wyników

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

Przetwarzanie dużych zestawów wyników

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
}

Korzystanie z przygotowanych zapytań

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

Operacje wsadowe

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

Mapowanie typów danych

Sterownik mapuje typy danych Spark SQL na typy SQL JDBC i typy języka Java:

Typ Spark SQL Typ SQL JDBC Typ języka Java Notatki
BOOLEAN BOOLEAN Boolean
BYTE TINYINT Byte
SHORT SMALLINT Short
INT INTEGER Integer
LONG BIGINT Long
FLOAT FLOAT Float
DOUBLE DOUBLE Double
DECIMAL DECIMAL BigDecimal Precyzja i skalowanie zachowane
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 Serializowany jako kod JSON
MAP VARCHAR String Serializowany jako kod JSON
STRUCT VARCHAR String Serializowany jako kod JSON