Κοινοποίηση μέσω


Σύνδεση Spark για βάσεις δεδομένων SQL (Προεπισκόπηση)

Σημαντικό

Αυτή η δυνατότητα βρίσκεται προεπισκόπηση.

Η σύνδεση Spark για βάσεις δεδομένων SQL είναι μια βιβλιοθήκη υψηλών επιδόσεων που σας επιτρέπει να διαβάζετε και να γράφετε στον SQL Server, τις βάσεις δεδομένων SQL Azure και τις βάσεις δεδομένων SQL Fabric. Η σύνδεση προσφέρει τις εξής δυνατότητες:

  • Χρησιμοποιήστε το Spark για να εκτελέσετε μεγάλες λειτουργίες εγγραφής και ανάγνωσης σε βάση δεδομένων SQL Azure, διαχειριζόμενη παρουσία Azure SQL, SQL Server σε εικονική μηχανή Azure και βάσεις δεδομένων SQL Fabric.
  • Όταν χρησιμοποιείτε έναν πίνακα ή μια προβολή, η σύνδεση υποστηρίζει μοντέλα ασφαλείας που έχουν οριστεί σε επίπεδο μηχανισμού SQL. Αυτά τα μοντέλα περιλαμβάνουν ασφάλεια σε επίπεδο αντικειμένου (OLS), ασφάλεια σε επίπεδο γραμμών (RLS) και ασφάλεια σε επίπεδο στηλών (CLS).

Η σύνδεση είναι προεγκατεστημένη στο χρόνο εκτέλεσης Fabric, επομένως δεν χρειάζεται να την εγκαταστήσετε ξεχωριστά.

Έλεγχος ταυτότητας

Ο έλεγχος ταυτότητας Microsoft Entra είναι ενσωματωμένος στο Microsoft Fabric.

  • Όταν εισέρχεστε στον χώρο εργασίας Fabric, τα διαπιστευτήριά σας μεταβιβάζονται αυτόματα στον μηχανισμό SQL για έλεγχο ταυτότητας και εξουσιοδότηση.
  • Απαιτεί την ενεργοποίηση και τη ρύθμιση παραμέτρων του Microsoft Entra ID στον μηχανισμό βάσης δεδομένων SQL.
  • Δεν απαιτείται επιπλέον ρύθμιση παραμέτρων στον κώδικα Spark εάν έχει ρυθμιστεί το Microsoft Entra ID. Τα διαπιστευτήρια αντιστοιχίζονται αυτόματα.

Μπορείτε επίσης να χρησιμοποιήσετε τη μέθοδο ελέγχου ταυτότητας SQL (καθορίζοντας ένα όνομα χρήστη και έναν κωδικό πρόσβασης SQL) ή μια κύρια υπηρεσία (παρέχοντας ένα διακριτικό πρόσβασης Azure για έλεγχο ταυτότητας βάσει εφαρμογής).

Δικαιώματα

Για να χρησιμοποιήσετε τη σύνδεση Spark, η ταυτότητά σας, είτε πρόκειται για χρήστη είτε για εφαρμογή, πρέπει να έχει τα απαραίτητα δικαιώματα βάσης δεδομένων για τον μηχανισμό SQL προορισμού. Αυτά τα δικαιώματα απαιτούνται για ανάγνωση ή εγγραφή σε πίνακες και προβολές.

Για τη βάση δεδομένων SQL Azure, τη διαχειριζόμενη παρουσία SQL Azure και τον SQL Server σε εικονική μηχανή Azure:

  • Η ταυτότητα που εκτελεί τη λειτουργία συνήθως χρειάζεται db_datawriter και db_datareader δικαιώματα, και προαιρετικά db_owner για πλήρη έλεγχο.

Για βάσεις δεδομένων Fabric SQL:

  • Η ταυτότητα συνήθως χρειάζεται db_datawriter και db_datareader δικαιώματα, και προαιρετικά db_owner.
  • Η ταυτότητα χρειάζεται επίσης τουλάχιστον δικαίωμα ανάγνωσης στη βάση δεδομένων Fabric SQL σε επίπεδο στοιχείου.

Σημείωμα

Εάν χρησιμοποιείτε μια κύρια υπηρεσία, μπορεί να εκτελεστεί ως εφαρμογή (χωρίς περιβάλλον χρήστη) ή ως χρήστης, εάν είναι ενεργοποιημένη η απομίμηση χρήστη. Η κύρια υπηρεσία πρέπει να έχει τα απαιτούμενα δικαιώματα βάσης δεδομένων για τις λειτουργίες που θέλετε να εκτελέσετε.

Παραδείγματα χρήσης και κώδικα

Σε αυτήν την ενότητα, παρέχουμε παραδείγματα κώδικα για να δείξουμε πώς να χρησιμοποιείτε αποτελεσματικά τη σύνδεση Spark για βάσεις δεδομένων SQL. Αυτά τα παραδείγματα καλύπτουν διάφορα σενάρια, συμπεριλαμβανομένης της ανάγνωσης και εγγραφής σε πίνακες SQL και της διαμόρφωσης των επιλογών σύνδεσης.

Υποστηριζόμενες επιλογές

Η ελάχιστη απαιτούμενη επιλογή είναι url as "jdbc:sqlserver://<server>:<port>;database=<database>;" or set spark.mssql.connector.default.url.

  • Όταν το url παρέχεται:

    • Χρησιμοποιείτε url πάντα ως πρώτη προτίμηση.
    • Εάν spark.mssql.connector.default.url δεν έχει οριστεί, η σύνδεση θα το ρυθμίσει και θα το χρησιμοποιήσει ξανά για μελλοντική χρήση.
  • Όταν το url δεν παρέχεται:

    • Εάν spark.mssql.connector.default.url έχει οριστεί, η σύνδεση χρησιμοποιεί την τιμή από τη ρύθμιση παραμέτρων σπινθήρα.
    • Εάν spark.mssql.connector.default.url δεν έχει οριστεί, εμφανίζεται ένα σφάλμα επειδή οι απαιτούμενες λεπτομέρειες δεν είναι διαθέσιμες.

Αυτή η σύνδεση υποστηρίζει τις επιλογές που ορίζονται εδώ: Επιλογές JDBC SQL DataSource

Η υποδοχή υποστηρίζει επίσης τις ακόλουθες επιλογές:

Επιλογή Προεπιλεγμένη τιμή Περιγραφή
reliabilityLevel "BEST_EFFORT" Ελέγχει την αξιοπιστία των λειτουργιών ένθεσης. Πιθανές τιμές: BEST_EFFORT (προεπιλογή, ταχύτερη, μπορεί να οδηγήσει σε διπλότυπες γραμμές σε περίπτωση επανεκκίνησης ενός εκτελεστή), NO_DUPLICATES (πιο αργή, εξασφαλίζει ότι δεν θα εισαχθούν διπλότυπες γραμμές ακόμα και αν γίνει επανεκκίνηση ενός εκτελεστή). Επιλέξτε με βάση την ανοχή σας για διπλότυπα και τις ανάγκες απόδοσης.
isolationLevel "READ_COMMITTED" Ορίζει το επίπεδο απομόνωσης συναλλαγών για λειτουργίες SQL. Πιθανές τιμές: READ_COMMITTED (προεπιλογή, αποτρέπει την ανάγνωση μη δεσμευμένων δεδομένων), READ_UNCOMMITTED, REPEATABLE_READ, SNAPSHOT, SERIALIZABLE. Τα υψηλότερα επίπεδα απομόνωσης μπορούν να μειώσουν τον συγχρονισμό αλλά να βελτιώσουν τη συνέπεια των δεδομένων.
tableLock "ψευδής" Ελέγχει εάν η υπόδειξη κλειδώματος σε επίπεδο πίνακα TABLOCK του SQL Server χρησιμοποιείται κατά τη διάρκεια των λειτουργιών εισαγωγής. Πιθανές τιμές: true (ενεργοποιεί το TABLOCK, το οποίο μπορεί να βελτιώσει την απόδοση μαζικής εγγραφής), false (προεπιλογή, δεν χρησιμοποιεί TABLOCK). Η ρύθμιση σε μπορεί να true αυξήσει την ταχύτητα μετάδοσης για μεγάλα ένθετα, αλλά μπορεί να μειώσει τον ταυτοχρονισμό για άλλες λειτουργίες στον πίνακα.
schemaCheckEnabled "true" Ελέγχει εάν επιβάλλεται αυστηρή επικύρωση σχήματος μεταξύ του Spark DataFrame και του πίνακα SQL. Πιθανές τιμές: true (προεπιλογή, επιβάλλει αυστηρή αντιστοίχιση σχήματος), false (επιτρέπει μεγαλύτερη ευελιξία και ενδέχεται να παραλείψει ορισμένους ελέγχους σχήματος). Η ρύθμιση σε μπορεί να false βοηθήσει με τις αναντιστοιχίες σχήματος, αλλά μπορεί να οδηγήσει σε απροσδόκητα αποτελέσματα, εάν οι δομές διαφέρουν σημαντικά.

Άλλες επιλογές μαζικού API μπορούν να οριστούν ως επιλογές στο και μεταβιβάζονται σε API μαζικής αντιγραφής κατά την DataFrame εγγραφή.

Παράδειγμα γραφής και ανάγνωσης

Ο παρακάτω κώδικας δείχνει πώς μπορείτε να γράψετε και να διαβάσετε δεδομένα χρησιμοποιώντας τη mssql("<schema>.<table>") μέθοδο με αυτόματο έλεγχο ταυτότητας Microsoft Entra ID.

Φιλοδώρημα

Τα δεδομένα δημιουργούνται ενσωματωμένα για σκοπούς επίδειξης. Σε ένα σενάριο παραγωγής, συνήθως θα διαβάζατε δεδομένα από μια υπάρχουσα πηγή ή θα δημιουργούσατε ένα πιο περίπλοκο DataFrame.

import com.microsoft.sqlserver.jdbc.spark
url = "jdbc:sqlserver://<server>:<port>;database=<database>;"
row_data = [("Alice", 1),("Bob", 2),("Charlie", 3)]
column_header = ["Name", "Age"]
df = spark.createDataFrame(row_data, column_header)
df.write.mode("overwrite").option("url", url).mssql("dbo.publicExample")
spark.read.option("url", url).mssql("dbo.publicExample").show()

url = "jdbc:sqlserver://<server>:<port>;database=<database2>;" # different database
df.write.mode("overwrite").option("url", url).mssql("dbo.tableInDatabase2") # default url is updated
spark.read.mssql("dbo.tableInDatabase2").show() # no url option specified and will use database2

Μπορείτε επίσης να επιλέξετε στήλες, να εφαρμόσετε φίλτρα και να χρησιμοποιήσετε άλλες επιλογές όταν διαβάζετε δεδομένα από το μηχανισμό βάσης δεδομένων SQL.

Παραδείγματα ελέγχου ταυτότητας

Τα παρακάτω παραδείγματα δείχνουν πώς μπορείτε να χρησιμοποιήσετε μεθόδους ελέγχου ταυτότητας εκτός του Microsoft Entra ID, όπως η κύρια υπηρεσία (διακριτικό πρόσβασης) και ο έλεγχος ταυτότητας SQL.

Σημείωμα

Όπως αναφέρθηκε προηγουμένως, ο έλεγχος ταυτότητας Microsoft Entra ID γίνεται αυτόματα κατά την είσοδό σας στον χώρο εργασίας Fabric, επομένως χρειάζεται να χρησιμοποιήσετε αυτές τις μεθόδους μόνο εάν το απαιτεί το σενάριό σας.

import com.microsoft.sqlserver.jdbc.spark
url = "jdbc:sqlserver://<server>:<port>;database=<database>;"
row_data = [("Alice", 1),("Bob", 2),("Charlie", 3)]
column_header = ["Name", "Age"]
df = spark.createDataFrame(row_data, column_header)

from azure.identity import ClientSecretCredential
credential = ClientSecretCredential(tenant_id="", client_id="", client_secret="") # service principal app
scope = "https://database.windows.net/.default"
token = credential.get_token(scope).token

df.write.mode("overwrite").option("url", url).option("accesstoken", token).mssql("dbo.publicExample")
spark.read.option("accesstoken", token).mssql("dbo.publicExample").show()

Υποστηριζόμενες λειτουργίες αποθήκευσης του DataFrame

Όταν γράφετε δεδομένα από βάσεις δεδομένων Spark σε βάσεις δεδομένων SQL, μπορείτε να επιλέξετε από πολλές λειτουργίες αποθήκευσης. Οι λειτουργίες αποθήκευσης ελέγχουν τον τρόπο εγγραφής των δεδομένων όταν υπάρχει ήδη ο πίνακας προορισμού και μπορούν να επηρεάσουν το σχήμα, τα δεδομένα και τη δημιουργία ευρετηρίου. Η κατανόηση αυτών των λειτουργιών σάς βοηθά να αποφύγετε απροσδόκητη απώλεια δεδομένων ή αλλαγές.

Αυτή η σύνδεση υποστηρίζει τις επιλογές που ορίζονται εδώ: Λειτουργίες Spark Save

  • ErrorIfExists (προεπιλεγμένη λειτουργία αποθήκευσης): Εάν υπάρχει ο πίνακας προορισμού, η εγγραφή ματαιώνεται και επιστρέφεται μια εξαίρεση. Διαφορετικά, δημιουργείται ένας νέος πίνακας με δεδομένα.

  • Παράβλεψη: Εάν υπάρχει ο πίνακας προορισμού, η εγγραφή αγνοεί το αίτημα και δεν επιστρέφει σφάλμα. Διαφορετικά, δημιουργείται ένας νέος πίνακας με δεδομένα.

  • Αντικατάσταση: Εάν υπάρχει ο πίνακας προορισμού, ο πίνακας απορρίπτεται, δημιουργείται εκ νέου και προσαρτώνται νέα δεδομένα.

    Σημείωμα

    Όταν χρησιμοποιείτε overwriteτο , το αρχικό σχήμα πίνακα (ειδικά οι αποκλειστικοί τύποι δεδομένων MSSQL) και οι δείκτες πίνακα χάνονται και αντικαθίστανται από το σχήμα που συνάγεται από το Spark DataFrame. Για να αποφύγετε την απώλεια σχήματος και δεικτών, χρησιμοποιήστε αντί .option("truncate", true) για overwrite.

  • Προσάρτηση: Εάν υπάρχει ο πίνακας προορισμού, προστίθενται νέα δεδομένα σε αυτόν. Διαφορετικά, δημιουργείται ένας νέος πίνακας με δεδομένα.

Αντιμετώπιση προβλημάτων

Όταν ολοκληρωθεί η διαδικασία, η έξοδος της λειτουργίας ανάγνωσης Spark εμφανίζεται στην περιοχή εξόδου του κελιού. Τα σφάλματα προέρχονται απευθείας com.microsoft.sqlserver.jdbc.SQLServerException από τον SQL Server. Μπορείτε να βρείτε λεπτομερείς πληροφορίες σφαλμάτων στα αρχεία καταγραφής της εφαρμογής Spark.