Σημείωση
Η πρόσβαση σε αυτή τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να συνδεθείτε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτή τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Σημείωμα
Αυτή η δυνατότητα είναι σε προεπισκόπηση.
Το JDBC (Java Database Connectivity) είναι ένα ευρέως διαδεδομένο πρότυπο που επιτρέπει στις εφαρμογές-πελάτες να συνδέονται και να εργάζονται με δεδομένα από βάσεις δεδομένων και πλατφόρμες μεγάλων δεδομένων.
Το πρόγραμμα οδήγησης Microsoft JDBC για μηχανική δεδομένων Fabric σάς επιτρέπει να συνδέετε, να υποβάλλετε ερωτήματα και να διαχειρίζεστε φόρτους εργασίας Spark στο Microsoft Fabric με την αξιοπιστία και την απλότητα του προτύπου JDBC. Χτισμένο στα Livy API του Microsoft Fabric, το πρόγραμμα οδήγησης παρέχει ασφαλή και ευέλικτη συνδεσιμότητα Spark SQL με τις εφαρμογές Java και τα εργαλεία BI. Αυτή η ενοποίηση σάς επιτρέπει να υποβάλλετε και να εκτελείτε κώδικα Spark απευθείας χωρίς να χρειάζεται να δημιουργήσετε ξεχωριστά τεχνουργήματα Notebook ή Spark Job Definition.
Βασικά χαρακτηριστικά
- Συμβατό με JDBC 4.2: Πλήρης εφαρμογή της προδιαγραφής JDBC 4.2
- Έλεγχος ταυτότητας Microsoft Entra ID: Πολλαπλές ροές ελέγχου ταυτότητας, συμπεριλαμβανομένων αλληλεπιδραστικών, διαπιστευτηρίων προγράμματος-πελάτη και ελέγχου ταυτότητας βάσει πιστοποιητικών
- Enterprise Connection Pooling: Ενσωματωμένη συγκέντρωση συνδέσεων με παρακολούθηση της υγείας και αυτόματη ανάκτηση
- Υποστήριξη εγγενών ερωτημάτων Spark SQL: Άμεση εκτέλεση προτάσεων Spark SQL χωρίς μετάφραση
- Ολοκληρωμένη υποστήριξη τύπου δεδομένων: Υποστήριξη για όλους τους τύπους δεδομένων Spark SQL, συμπεριλαμβανομένων των πολύπλοκων τύπων (ARRAY, MAP, STRUCT)
- Ασύγχρονη προφόρτωση συνόλου αποτελεσμάτων: Φόρτωση δεδομένων παρασκηνίου για βελτιωμένη απόδοση
- Μοτίβο διακόπτη κυκλώματος: Προστασία από διαδοχικές αστοχίες με αυτόματη επανάληψη
- Αυτόματη επανασύνδεση: Διαφανής ανάκτηση συνεδρίας σε αποτυχίες σύνδεσης
- Υποστήριξη διακομιστή μεσολάβησης: Ρύθμιση παραμέτρων διακομιστή μεσολάβησης HTTP και SOCKS για εταιρικά περιβάλλοντα
Prerequisites
Πριν χρησιμοποιήσετε το πρόγραμμα οδήγησης Microsoft JDBC για το Microsoft Fabric Data Engineering, βεβαιωθείτε ότι έχετε:
- Java Development Kit (JDK): Έκδοση 11 ή νεότερη (συνιστάται Java 21)
- Microsoft Fabric Access: Πρόσβαση σε χώρο εργασίας Microsoft Fabric
- Azure Entra ID Credentials: Κατάλληλα διαπιστευτήρια για έλεγχο ταυτότητας
- Αναγνωριστικά χώρου εργασίας και lakehouse: Αναγνωριστικά GUID για τον χώρο εργασίας Fabric και το lakehouse
Λήψη και εγκατάσταση
Το πρόγραμμα οδήγησης Microsoft JDBC για Microsoft Fabric Data Engineering έκδοση 1.0.0 είναι η έκδοση δημόσιας προεπισκόπησης και υποστηρίζει Java 11, 17 και 21. Βελτιώνουμε συνεχώς την υποστήριξη συνδεσιμότητας Java και συνιστούμε να εργάζεστε με την πιο πρόσφατη έκδοση του προγράμματος οδήγησης Microsoft JDBC.
- Λήψη του προγράμματος οδήγησης Microsoft JDBC για το Microsoft Fabric Data Engineering (zip)
- Λήψη του προγράμματος οδήγησης Microsoft JDBC για το Microsoft Fabric Data Engineering (tar)
- Κατεβάστε είτε το αρχείο zip είτε tar από τους παραπάνω συνδέσμους.
- Εξαγάγετε το ληφθέν αρχείο για πρόσβαση στα αρχεία JAR του προγράμματος οδήγησης.
- Επιλέξτε το αρχείο JAR που ταιριάζει με την έκδοση JRE:
- Για Java 11:
ms-sparksql-jdbc-1.0.0.jre11.jar - Για Java 17:
ms-sparksql-jdbc-1.0.0.jre17.jar - Για Java 21:
ms-sparksql-jdbc-1.0.0.jre21.jar
- Για Java 11:
- Προσθέστε το επιλεγμένο αρχείο JAR στη διαδρομή κλάσης της εφαρμογής σας.
- Για υπολογιστές-πελάτες JDBC, διαμορφώστε την κλάση προγράμματος οδήγησης JDBC:
com.microsoft.spark.livy.jdbc.LivyDriver
Παράδειγμα γρήγορης εκκίνησης
Αυτό το παράδειγμα δείχνει πώς μπορείτε να συνδεθείτε στο Microsoft Fabric και να εκτελέσετε ένα ερώτημα χρησιμοποιώντας το πρόγραμμα οδήγησης Microsoft JDBC για το Microsoft Fabric Data Engineering. Πριν εκτελέσετε αυτόν τον κωδικό, βεβαιωθείτε ότι έχετε ολοκληρώσει τις προϋποθέσεις και έχετε εγκαταστήσει το πρόγραμμα οδήγησης.
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();
}
}
}
Μορφή συμβολοσειράς σύνδεσης
Βασική συμβολοσειρά σύνδεσης
Το πρόγραμμα οδήγησης Microsoft JDBC για το Microsoft Fabric Data Engineering χρησιμοποιεί την ακόλουθη μορφή συμβολοσειράς σύνδεσης:
jdbc:fabricspark://<hostname>[:<port>][;<parameter1>=<value1>;<parameter2>=<value2>;...]
Στοιχεία συμβολοσειράς σύνδεσης
| Συνθετικός | Περιγραφή | Παράδειγμα |
|---|---|---|
| Πρωτόκολλο | Αναγνωριστικό πρωτοκόλλου URL JDBC | jdbc:fabricspark:// |
| Όνομα κεντρικού υπολογιστή | Όνομα κεντρικού υπολογιστή τελικού σημείου Microsoft Fabric | api.fabric.microsoft.com |
| Λιμάνι | Προαιρετικός αριθμός θύρας (προεπιλογή: 443) | :443 |
| Παράμετροι | Ζεύγη κλειδιών=τιμών διαχωρισμένων με ερωτηματικό | FabricWorkspaceID=<guid> |
Παράδειγμα συμβολοσειρών σύνδεσης
Βασική σύνδεση (αλληλεπιδραστικός έλεγχος ταυτότητας)
jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=2
Με τη ρύθμιση παραμέτρων πόρων 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
Με ιδιότητες περιόδου λειτουργίας 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
Έλεγχος ταυτότητας
Το πρόγραμμα οδήγησης Microsoft JDBC για το Microsoft Fabric Data Engineering υποστηρίζει πολλές μεθόδους ελέγχου ταυτότητας μέσω του Microsoft Entra ID (πρώην Azure Active Directory). Ο έλεγχος ταυτότητας διαμορφώνεται χρησιμοποιώντας την AuthFlow παράμετρο στη συμβολοσειρά σύνδεσης.
Ροές ελέγχου ταυτότητας
| Ροή ελέγχου ταυτότητας | Μέθοδος ελέγχου ταυτότητας | Περίπτωση χρήσης |
|---|---|---|
| 0 | Διαπιστευτήρια Azure CLI | Ανάπτυξη με χρήση Azure CLI |
| 1 | Διαπιστευτήρια πελάτη (Κύρια υπηρεσία) | Αυτοματοποιημένος έλεγχος ταυτότητας/έλεγχος ταυτότητας από υπηρεσία σε υπηρεσία |
| 2 | Διαδραστικό πρόγραμμα περιήγησης | Αλληλεπιδραστικός έλεγχος ταυτότητας χρήστη (προεπιλογή) |
| 3 | ΣΠΝ | Έλεγχος ταυτότητας κύριας υπηρεσίας |
| 4 | Certificate-Based | Έλεγχος ταυτότητας κύριας υπηρεσίας βάσει πιστοποιητικού |
| 5 | Διακριτικό πρόσβασης | Προαποκτηθέν διακριτικό πρόσβασης |
Αλληλεπιδραστικός έλεγχος ταυτότητας προγράμματος περιήγησης
Καλύτερα για: Ανάπτυξη και διαδραστικές εφαρμογές
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);
Παράμετροι:
-
AuthFlow=2: Καθορίζει αλληλεπιδραστικό έλεγχο ταυτότητας προγράμματος περιήγησης -
AuthTenantID(προαιρετικό): Αναγνωριστικό μισθωτή Azure -
AuthClientID(προαιρετικό): Αναγνωριστικό εφαρμογής (πελάτης)
Συμπεριφορά:
- Ανοίγει ένα παράθυρο του προγράμματος περιήγησης για έλεγχο ταυτότητας χρήστη
- Τα διαπιστευτήρια αποθηκεύονται προσωρινά για τις επόμενες συνδέσεις μέχρι να λήξουν
- Κατάλληλο για εφαρμογές ενός χρήστη
Έλεγχος ταυτότητας διαπιστευτηρίων πελάτη
Καλύτερα για: Αυτοματοποιημένες υπηρεσίες και εργασίες παρασκηνίου
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);
Απαιτούμενες παράμετροι:
-
AuthFlow=1: Καθορίζει τον έλεγχο ταυτότητας διαπιστευτηρίων προγράμματος-πελάτη -
AuthClientID: Αναγνωριστικό εφαρμογής (προγράμματος-πελάτη) από το Microsoft Entra ID -
AuthClientSecret: Μυστικός κωδικός προγράμματος-πελάτη από το Microsoft Entra ID -
AuthTenantID: Αναγνωριστικό μισθωτή Azure
Βέλτιστες πρακτικές:
- Αποθηκεύστε τα μυστικά με ασφάλεια (Azure Key Vault, μεταβλητές περιβάλλοντος)
- Χρήση διαχειριζόμενων ταυτοτήτων όταν είναι δυνατό
- Εναλλάσσετε τακτικά μυστικά
Certificate-Based Έλεγχος ταυτότητας
Ιδανικό για: Εταιρικές εφαρμογές που απαιτούν έλεγχο ταυτότητας βάσει πιστοποιητικών
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);
Απαιτούμενες παράμετροι:
-
AuthFlow=4: Καθορίζει τον έλεγχο ταυτότητας βάσει πιστοποιητικού -
AuthClientID: Αναγνωριστικό εφαρμογής (προγράμματος-πελάτη) -
AuthCertificatePath: Διαδρομή προς το αρχείο πιστοποιητικού PFX/PKCS12 -
AuthCertificatePassword: Κωδικός πρόσβασης πιστοποιητικού -
AuthTenantID: Αναγνωριστικό μισθωτή Azure
Έλεγχος ταυτότητας κύριας υπηρεσίας
Ιδανικό για: Περιβάλλοντα χωρίς κεφάλι και απομακρυσμένες συνεδρίες
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);
Συμπεριφορά:
- Εμφανίζει έναν κωδικό συσκευής και μια διεύθυνση URL στην κονσόλα
- Ο χρήστης επισκέπτεται τη διεύθυνση URL και εισάγει τον κώδικα
- Ο έλεγχος ταυτότητας ολοκληρώνεται μετά την επαλήθευση χρήστη
Έλεγχος ταυτότητας διακριτικού πρόσβασης
Ιδανικό για: Προσαρμοσμένα σενάρια ελέγχου ταυτότητας
// 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);
Προσωρινή αποθήκευση ελέγχου ταυτότητας
Το πρόγραμμα οδήγησης αποθηκεύει αυτόματα προσωρινά τα διακριτικά ελέγχου ταυτότητας για να βελτιώσει τις επιδόσεις:
// 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);
Παράμετροι διαμόρφωσης
Απαιτούμενες παράμετροι
Αυτές οι παράμετροι πρέπει να υπάρχουν σε κάθε συμβολοσειρά σύνδεσης:
| Παράμετρος | Type | Περιγραφή | Παράδειγμα |
|---|---|---|---|
FabricWorkspaceID |
UUID | Αναγνωριστικό χώρου εργασίας Microsoft Fabric | <workspace-id> |
FabricLakehouseID |
UUID | Αναγνωριστικό λίμνης Microsoft Fabric | <lakehouse-id> |
AuthFlow |
Integer | Τύπος ροής ελέγχου ταυτότητας (0-5) | 2 |
Προαιρετικές παράμετροι
Διαμόρφωση έκδοσης API
| Παράμετρος | Type | Προεπιλεγμένος | Περιγραφή |
|---|---|---|---|
FabricVersion |
Συμβλοσειρά | v1 |
Έκδοση Microsoft Fabric API |
LivyApiVersion |
Συμβλοσειρά | 2023-12-01 |
Έκδοση Livy API |
Ρύθμιση παραμέτρων περιβάλλοντος
| Παράμετρος | Type | Προεπιλεγμένος | Περιγραφή |
|---|---|---|---|
FabricEnvironmentID |
UUID | Κανένα | Αναγνωριστικό περιβάλλοντος Fabric για αναφορά σε στοιχείο περιβάλλοντος για περίοδο λειτουργίας Spark |
Διαμόρφωση Spark
Ρύθμιση πόρων συνεδρίας
Διαμορφώστε τους πόρους περιόδου λειτουργίας Spark για βέλτιστη απόδοση:
| Παράμετρος | Type | Προεπιλεγμένος | Περιγραφή | Παράδειγμα |
|---|---|---|---|---|
DriverCores |
Integer | Προεπιλογή Spark | Αριθμός πυρήνων CPU για πρόγραμμα οδήγησης | 4 |
DriverMemory |
Συμβλοσειρά | Προεπιλογή Spark | Εκχώρηση μνήμης για πρόγραμμα οδήγησης | 4g |
ExecutorCores |
Integer | Προεπιλογή Spark | Αριθμός πυρήνων CPU ανά εκτελεστή | 4 |
ExecutorMemory |
Συμβλοσειρά | Προεπιλογή Spark | Εκχώρηση μνήμης ανά εκτελεστή | 8g |
NumExecutors |
Integer | Προεπιλογή Spark | Αριθμός εκτελεστών | 2 |
Παράδειγμα:
DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2
Ιδιότητες προσαρμοσμένης περιόδου λειτουργίας Spark
Οποιαδήποτε παράμετρος με το πρόθεμα spark. εφαρμόζεται αυτόματα στην περίοδο λειτουργίας Spark:
Παράδειγμα διαμορφώσεων 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
Εγγενής μηχανή εκτέλεσης (NEE):
spark.nee.enabled=true
Πλήρες παράδειγμα:
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
Διαμορφώστε τη συγκέντρωση συνδέσεων HTTP για βέλτιστη απόδοση δικτύου:
| Παράμετρος | Type | Προεπιλεγμένος | Περιγραφή |
|---|---|---|---|
HttpMaxTotalConnections |
Integer | 100 | Μέγιστες συνολικές συνδέσεις HTTP |
HttpMaxConnectionsPerRoute |
Integer | 50 | Μέγιστος αριθμός συνδέσεων ανά δρομολόγιο |
HttpConnectionTimeoutInSeconds |
Integer | 30 | Χρονικό όριο σύνδεσης |
HttpSocketTimeoutInSeconds |
Integer | 60 | Χρονικό όριο ανάγνωσης υποδοχής |
HttpReadTimeoutInSeconds |
Integer | 60 | Χρονικό όριο ανάγνωσης HTTP |
HttpConnectionRequestTimeoutSeconds |
Integer | 30 | Χρονικό όριο αιτήματος σύνδεσης από το χώρο συγκέντρωσης |
HttpEnableKeepAlive |
Boolean | true | Ενεργοποίηση διατήρησης ενεργού HTTP |
HttpKeepAliveTimeoutSeconds |
Integer | 60 | Χρονικό όριο διατήρησης εν ενεργεία |
HttpFollowRedirects |
Boolean | true | Ακολουθήστε τις ανακατευθύνσεις HTTP |
HttpUseAsyncIO |
Boolean | ψευδής | Χρήση ασύγχρονης εισόδου/εξόδου HTTP |
Παράδειγμα:
HttpMaxTotalConnections=200;HttpMaxConnectionsPerRoute=100;HttpConnectionTimeoutInSeconds=60
Διαμόρφωση διακομιστή μεσολάβησης
Διαμορφώστε τις ρυθμίσεις διακομιστή μεσολάβησης HTTP και SOCKS για εταιρικά περιβάλλοντα:
| Παράμετρος | Type | Προεπιλεγμένος | Περιγραφή |
|---|---|---|---|
UseProxy |
Boolean | ψευδής | Ενεργοποίηση διακομιστή μεσολάβησης |
ProxyTransport |
Συμβλοσειρά | http |
Τύπος μεταφοράς διακομιστή μεσολάβησης (http/tcp) |
ProxyHost |
Συμβλοσειρά | Κανένα | Όνομα κεντρικού υπολογιστή διακομιστή μεσολάβησης |
ProxyPort |
Integer | Κανένα | Θύρα διακομιστή μεσολάβησης |
ProxyAuthEnabled |
Boolean | ψευδής | Ενεργοποίηση ελέγχου ταυτότητας διακομιστή μεσολάβησης |
ProxyUsername |
Συμβλοσειρά | Κανένα | Όνομα χρήστη ελέγχου ταυτότητας διακομιστή μεσολάβησης |
ProxyPassword |
Συμβλοσειρά | Κανένα | Κωδικός πρόσβασης ελέγχου ταυτότητας διακομιστή μεσολάβησης |
ProxyAuthScheme |
Συμβλοσειρά | basic |
Σχήμα ελέγχου ταυτότητας (basic/digest/ntlm) |
ProxySocksVersion |
Integer | 5 | Έκδοση SOCKS (4/5) |
Παράδειγμα διακομιστή μεσολάβησης HTTP:
UseProxy=true;ProxyTransport=http;ProxyHost=proxy.company.com;ProxyPort=8080;ProxyAuthEnabled=true;ProxyUsername=user;ProxyPassword=pass
Παράδειγμα διακομιστή μεσολάβησης SOCKS:
UseProxy=true;ProxyTransport=tcp;ProxyHost=socks.company.com;ProxyPort=1080;ProxySocksVersion=5
Καταγραφή διαμόρφωσης
| Παράμετρος | Type | Προεπιλεγμένος | Περιγραφή |
|---|---|---|---|
LogLevel |
Συμβλοσειρά | INFO |
Επίπεδο καταγραφής: TRACE, DEBUG, INFO, WARN, ERROR |
Παράδειγμα:
LogLevel=DEBUG
Προεπιλεγμένη τοποθεσία καταγραφής:
${user.home}/.microsoft/livy-jdbc-driver/driver.log
Προσαρμοσμένη διαμόρφωση αρχείου καταγραφής: Χρησιμοποιήστε ένα προσαρμοσμένο log4j2.xml αρχείο ή logback.xml ένα αρχείο στη διαδρομή κλάσης σας.
Παραδείγματα χρήσης
Βασική σύνδεση
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();
}
}
}
Εκτέλεση ερωτημάτων
Απλό ερώτημα
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);
}
}
}
Ερώτημα με φίλτρο
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);
}
}
}
Ερώτημα με όριο
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();
}
}
}
Εργασία με σύνολα αποτελεσμάτων
Πλοήγηση σε σύνολα αποτελεσμάτων
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"));
}
}
}
Επεξεργασία μεγάλων συνόλων αποτελεσμάτων
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
}
Χρήση προετοιμασμένων δηλώσεων
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);
}
}
}
}
Λειτουργίες παρτίδας
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);
}
}
Αντιστοίχιση τύπου δεδομένων
Το πρόγραμμα οδήγησης αντιστοιχίζει τους τύπους δεδομένων Spark SQL σε τύπους JDBC SQL και τύπους Java:
| Τύπος SQL Spark | Τύπος SQL JDBC | Τύπος Java | Σημειώσεις |
|---|---|---|---|
BOOLEAN |
BOOLEAN |
Boolean |
|
BYTE |
TINYINT |
Byte |
|
SHORT |
SMALLINT |
Short |
|
INT |
INTEGER |
Integer |
|
LONG |
BIGINT |
Long |
|
FLOAT |
FLOAT |
Float |
|
DOUBLE |
DOUBLE |
Double |
|
DECIMAL |
DECIMAL |
BigDecimal |
Διατήρηση της ακρίβειας και της κλίμακας |
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 |
Σειριακή ως JSON |
MAP |
VARCHAR |
String |
Σειριακή ως JSON |
STRUCT |
VARCHAR |
String |
Σειριακή ως JSON |