Usare il connettore Apache Spark per SQL Server e SQL Azure

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.