Usar o Conector do Apache Spark para SQL Server e Azure SQL

Importante

O complemento Clusters de Big Data do Microsoft SQL Server 2019 será desativado. O suporte para Clusters de Big Data do SQL Server 2019 será encerrado em 28 de fevereiro de 2025. Para obter mais informações, confira Opções de Big Data na plataforma Microsoft SQL Server.

O Conector do Apache Spark para SQL Server e Azure SQL é um conector de alto desempenho que permite usar dados transacionais na análise de Big Data e persiste resultados para consultas ou relatórios ad hoc. O conector permite que você use qualquer banco de dados SQL, local ou na nuvem, como uma fonte de dados de entrada ou coletor de dados de saída para trabalhos do Spark. O conector usa APIs de gravação em massa do SQL Server. Os parâmetros de gravação em massa podem ser passados como parâmetros opcionais pelo usuário e passados no estado em que se encontram pelo conector para a API subjacente. Confira mais informações sobre operações de gravação em massa em Como usar cópia em massa com o JDBC Driver.

O conector é incluído por padrão nos Clusters de Big Data do SQL Server.

Saiba mais sobre o conector no repositório de software livre. Confira exemplos em amostras.

Gravar em uma nova Tabela SQL

Cuidado

No modo overwrite, o conector primeiro descartará a tabela se ela já existir no banco de dados por padrão. Use essa opção com cuidado para evitar perda de dados inesperada.

Ao usar o modo overwrite, os índices serão perdidos na recriação da tabela se você não usar a opção truncate. Por exemplo, uma tabela columnstore se torna um heap. Se você quiser manter a indexação existente, especifique também a opção truncate com o valor true. Por exemplo .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)

Anexar à Tabela 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)

Especificar o nível de isolamento

Por padrão, o conector usará o nível de isolamento READ_COMMITTED ao executar a inserção em massa no banco de dados. Se você quiser substituir por outro nível de isolamento, use a opção mssqlIsolationLevel, conforme mostrado abaixo.

    .option("mssqlIsolationLevel", "READ_UNCOMMITTED") \

Ler da Tabela SQL

jdbcDF = spark.read \
        .format("com.microsoft.sqlserver.jdbc.spark") \
        .option("url", url) \
        .option("dbtable", table_name) \
        .option("user", username) \
        .option("password", password).load()

Modo não Active Directory

Na segurança do modo não Active Directory, cada usuário tem um nome de usuário e uma senha que devem ser fornecidos como parâmetros durante a instanciação do conector para executar leituras e/ou gravações.

Um exemplo de instanciação do conector para o modo não Active Directory é apresentado abaixo. Antes de executar o script, substitua ? pelo valor de sua conta.

# 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() 

Modo do Active Directory

Na segurança do modo Active Directory, depois que um usuário tiver gerado um arquivo de tecla TAB, ele precisará fornecer principal e keytab como parâmetros durante a instanciação do conector.

Nesse modo, o driver carrega o arquivo keytab nos respectivos contêineres do executor. Em seguida, os executores usam o nome da entidade de segurança e keytab para gerar um token que é usado para criar um conector JDBC para leitura/gravação.

Um exemplo de instanciação do conector para o modo Active Directory é apresentado abaixo. Antes de executar o script, substitua ? pelo valor de sua conta.

# 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() 

Próximas etapas

Para obter mais informações sobre clusters de Big Data, confira Como implantar Clusters de Big Data do SQL Server no Kubernetes

Tem recomendações de comentários ou recursos para Clusters de Big Data do SQL Server? Deixe-nos uma observação nos comentários sobre Clusters de Big Data do SQL Server.