Usare il connettore Apache Spark per SQL Server e SQL Azure
Importante
Il componente aggiuntivo per i 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 fino a quel momento il software continuerà a ricevere aggiornamenti cumulativi di SQL Server. Per altre informazioni, vedere il post di blog relativo all'annuncio e Opzioni per i Big Data nella piattaforma Microsoft SQL Server.
Il connettore Apache Spark per SQL Server e Azure SQL è un connettore ad alte prestazioni che consente di usare i dati transazionali in analisi di Big Data e di salvare i risultati per la creazione di query o report ad hoc. Il connettore consente di usare qualsiasi database SQL, in 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. I parametri di scrittura bulk possono essere passati come parametri facoltativi dall'utente e vengono passati così come sono dal connettore all'API sottostante. Per altre informazioni sulle operazioni di scrittura bulk, vedere Uso della copia bulk con il driver JDBC.
Per impostazione predefinita il connettore è incluso nei cluster Big Data di SQL Server.
Altre informazioni sul connettore sono disponibili nel repository open source. Vedere gli esempi.
Scrivere in una nuova tabella SQL
Attenzione
Nella modalità overwrite
il connettore elimina prima la tabella se esiste già nel database per impostazione predefinita. Usare questa opzione con cautela per evitare perdite di dati impreviste.
Nella modalità overwrite
, se non si usa l'opzione truncate
in fase di ricreazione della tabella, gli indici vanno persi. Ad esempio, una tabella columnstore diventa un heap. Se si vuole 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 usa il livello di isolamento READ_COMMITTED quando si esegue l'inserimento bulk nel database. Se si vuole eseguire l'override del livello di isolamento e usarne un altro, usare l'opzione mssqlIsolationLevel
come illustrato di seguito.
.option("mssqlIsolationLevel", "READ_UNCOMMITTED") \
Leggere 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à non Active Directory
Nella sicurezza in modalità non Active Directory ogni utente ha un nome utente e una password che devono essere specificati come parametri durante la creazione di un'istanza del connettore per eseguire operazioni di lettura e/o scrittura.
Di seguito è riportato un esempio di creazione di un'istanza del connettore per la modalità non Active Directory. Prima di eseguire lo script, sostituire ?
con il valore dell'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 specificare principal
e keytab
come parametri durante la creazione di un'istanza del connettore.
In questa modalità, il driver carica il file keytab nei rispettivi contenitori degli esecutori. Quindi, gli esecutori usano il nome dell'entità e il keytab per generare un token usato per creare un connettore JDBC per la lettura/scrittura.
Di seguito è riportato un esempio di creazione di un'istanza del connettore per la modalità Active Directory. Prima di eseguire lo script, sostituire ?
con il valore dell'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
Commenti o suggerimenti sulle funzionalità per i cluster Big Data di SQL Server? Lasciare una nota nella pagina per l'invio di commenti e suggerimenti per i cluster Big Data di SQL Server.