Usare il connettore Apache Spark per SQL Server e Azure SQL
Importante
Il componente aggiuntivo Cluster Big Data di Microsoft SQL Server 2019 verrà ritirato. Il supporto per i cluster Big Data di SQL Server 2019 terminerà il 28 febbraio 2025. Tutti gli utenti esistenti di SQL Server 2019 con Software Assurance saranno completamente supportati nella piattaforma e il software continuerà a essere mantenuto tramite gli aggiornamenti cumulativi di SQL Server fino a quel momento. Per ulteriori informazioni, vedere il post di blog sull'annuncio e le opzioni di Big Data sulla piattaforma Microsoft SQL Server.
Il connettore Apache Spark per SQL Server e Azure SQL è un connettore ad alte prestazioni che consente di utilizzare i dati transazionali nell'analisi dei Big Data e permette di conservare i risultati per query o report ad hoc. Il connettore consente di usare qualsiasi database SQL, locale o nel cloud, come origine dati di input o sink di dati di output per i processi Spark. Il connettore usa le API di scrittura bulk di SQL Server. Tutti i parametri di scrittura bulk possono essere passati come parametri facoltativi dall'utente e vengono passati as-is dal connettore all'API sottostante. Per ulteriori informazioni sulle operazioni di scrittura in massa, vedere Uso della copia in massa con il driver JDBC.
Il connettore è incluso per impostazione predefinita nei cluster Big Data di SQL Server.
Altre informazioni sul connettore sono disponibili nel repository open source . Per esempi, consultare .
Scrivere in una nuova tabella SQL
Cautela
In modalità overwrite
, il connettore elimina per prima cosa la tabella se esiste già nel database per impostazione predefinita. Usare questa opzione con attenzione per evitare perdite di dati impreviste.
Quando si usa la modalità overwrite
se non si usa l'opzione truncate
, durante la ricreazione della tabella, gli indici andranno persi. Ad esempio, una tabella columnstore diventa un heap. Se si desidera mantenere l'indicizzazione esistente, specificare anche l'opzione truncate
con valore true
. Ad esempio, .option("truncate",true)
server_name = "jdbc:sqlserver://{SERVER_ADDR}"
database_name = "database_name"
url = server_name + ";" + "databaseName=" + database_name + ";"
table_name = "table_name"
username = "username"
password = "password123!#" # Please specify password here
try:
df.write \
.format("com.microsoft.sqlserver.jdbc.spark") \
.mode("overwrite") \
.option("url", url) \
.option("dbtable", table_name) \
.option("user", username) \
.option("password", password) \
.save()
except ValueError as error :
print("Connector write failed", error)
Accodare alla tabella SQL
try:
df.write \
.format("com.microsoft.sqlserver.jdbc.spark") \
.mode("append") \
.option("url", url) \
.option("dbtable", table_name) \
.option("user", username) \
.option("password", password) \
.save()
except ValueError as error :
print("Connector write failed", error)
Specificare il livello di isolamento
Per impostazione predefinita, questo connettore utilizza il livello di isolamento READ_COMMITTED quando si esegue l'inserimento massivo nel database. Se si vuole eseguire l'override di questo valore a un altro livello di isolamento, usare l'opzione mssqlIsolationLevel
come illustrato di seguito.
.option("mssqlIsolationLevel", "READ_UNCOMMITTED") \
Leggi dalla tabella SQL
jdbcDF = spark.read \
.format("com.microsoft.sqlserver.jdbc.spark") \
.option("url", url) \
.option("dbtable", table_name) \
.option("user", username) \
.option("password", password).load()
Modalità senza Active Directory
Nella sicurezza in modalità non Active Directory, ogni utente ha un nome utente e una password che devono essere forniti come parametri durante la creazione di istanze del connettore per eseguire operazioni di lettura e/o scrittura.
Di seguito è riportata un'istanza del connettore di esempio per la modalità non Active Directory. Prima di eseguire lo script, sostituire il ?
con il valore per l'account.
# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark"
url = "jdbc:sqlserver://master-p-svc;databaseName=?;"
writer = df.write \
.format(connector_type)\
.mode("overwrite")
.option("url", url) \
.option("user", ?) \
.option("password",?)
writer.save()
Modalità Active Directory
Nella sicurezza in modalità Active Directory, dopo che un utente ha generato un file keytab, l'utente deve fornire principal
e keytab
come parametri durante l'istanza del connettore.
In questa modalità, il driver carica il file keytab nei rispettivi contenitori executor. Gli executor usano poi il nome dell'entità e il keytab per generare un token usato per creare un connettore JDBC per la lettura/scrittura.
Di seguito è riportata un'istanza del connettore di esempio per la modalità Active Directory. Prima di eseguire lo script, sostituire il ?
con il valore per l'account.
# Note: '?' is a placeholder for a necessary user-specified value
connector_type = "com.microsoft.sqlserver.jdbc.spark"
url = "jdbc:sqlserver://master-p-svc;databaseName=?;integratedSecurity=true;authenticationScheme=JavaKerberos;"
writer = df.write \
.format(connector_type)\
.mode("overwrite")
.option("url", url) \
.option("principal", ?) \
.option("keytab", ?)
writer.save()
Passaggi successivi
Per altre informazioni sui cluster Big Data, vedere Come distribuire cluster Big Data di SQL Server in Kubernetes
Sono disponibili commenti e suggerimenti o raccomandazioni sulle funzionalità per i cluster Big Data di SQL Server? Lasciare una nota in Commenti e suggerimenti sui cluster Big Data di SQL Server.