Partilhar via


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

Important

Os Clusters de Big Data do Microsoft SQL Server 2019 foram desativados. O suporte para clusters de Big Data do SQL Server 2019 terminou em 28 de fevereiro de 2025. Para obter mais informações, consulte a postagem no blog de anúncios e as opções de Big Data na plataforma microsoft SQL Server.

O Conector do Apache Spark para SQL Server e o SQL do Azure é um conector de alto desempenho que permite que você use dados transacionais na análise de Big Data e persista os resultados para consultas ad hoc ou relatórios. 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. Todos os parâmetros de gravação em massa podem ser passados como parâmetros opcionais pelo usuário e são passados as-is pelo conector para a API subjacente. Para obter mais informações sobre operações de gravação em massa, consulte Usando cópia em massa com o driver JDBC.

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

Saiba mais sobre o conector no repositório de software livre. Para obter exemplos, consulte exemplos.

Gravar em uma nova tabela SQL

Caution

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

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

Acrescentar à 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, esse conector usa o nível de isolamento READ_COMMITTED ao executar a inserção em massa no banco de dados. Se você quiser substituir isso para outro nível de isolamento, use a opção mssqlIsolationLevel , conforme mostrado abaixo.

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

Leitura 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 sem Active Directory

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

Um exemplo de instanciação do conector para o modo não Active Directory está abaixo. Antes de executar o script, substitua o ? pelo valor da 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 gerar um arquivo keytab, ele precisará fornecer o principal e keytab como parâmetros durante a instanciação do conector.

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

Um exemplo de instanciação do conector para o modo Active Directory está abaixo. Antes de executar o script, substitua o ? pelo valor da 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() 

Next steps

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

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