Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
- Pobierz sterownik JDBC firmy Microsoft dla usługi Microsoft Fabric Data Engineering (zip)
- Pobierz sterownik JDBC firmy Microsoft dla Microsoft Fabric Data Engineering (tar)
- Pobierz plik zip lub tar z powyższych linków.
- Wyodrębnij pobrany plik, aby uzyskać dostęp do plików JAR sterownika.
- 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
- W przypadku języka Java 11:
- Dodaj wybrany plik JAR do ścieżki klasy aplikacji.
- 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
Nawigowanie po zestawach 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 |