Condividi tramite


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.