Compartir por


Uso del conector de Apache Spark para SQL Server y Azure SQL

Important

Los clústeres de macrodatos de Microsoft SQL Server 2019 se retiran. La compatibilidad con clústeres de macrodatos de SQL Server 2019 finalizó a partir del 28 de febrero de 2025. Para obtener más información, consulte la entrada de blog del anuncio y las opciones de macrodatos en la plataforma de Microsoft SQL Server.

El conector de Apache Spark para SQL Server y Azure SQL es un conector de alto rendimiento que permite usar datos transaccionales en el análisis de macrodatos y conserva los resultados para consultas o informes ad hoc. El conector permite usar cualquier base de datos SQL, local o en la nube, como origen de datos de entrada o receptor de datos de salida para trabajos de Spark. El conector usa api de escritura masiva de SQL Server. El usuario puede pasar cualquier parámetro de escritura masiva como parámetros opcionales y el conector lo pasa as-is a la API subyacente. Para obtener más información sobre las operaciones de escritura masiva, consulte Uso de la copia masiva con el controlador JDBC.

El conector se incluye de forma predeterminada en clústeres de macrodatos de SQL Server.

Obtenga más información sobre el conector en el repositorio de código abierto. Para obtener ejemplos, consulte ejemplos.

Escribir en una nueva tabla SQL

Caution

En overwrite modo, el conector quita primero la tabla si ya existe en la base de datos de forma predeterminada. Use esta opción con cuidado debido para evitar una pérdida de datos inesperada.

Al usar el modo overwrite si no usa la opción truncate, al volver a crear la tabla, se perderán los índices. Por ejemplo, una tabla columnar se convierte en una pila. Si desea mantener la indexación existente, especifique también la opción truncate con el valor true. Por ejemplo, .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 a la tabla 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 el nivel de aislamiento

Este conector utiliza por defecto el nivel de aislamiento READ_COMMITTED al realizar la inserción masiva en la base de datos. Si desea invalidar esto en otro nivel de aislamiento, use la mssqlIsolationLevel opción como se muestra a continuación.

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

Leer desde la tabla 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 sin Active Directory

En la seguridad del modo que no es de Active Directory, cada usuario tiene un nombre de usuario y una contraseña que deben proporcionarse como parámetros durante la creación de instancias del conector para realizar lecturas o escrituras.

A continuación se muestra un ejemplo de instanciación del conector en modo no-Active Directory. Antes de ejecutar el script, reemplace el ? con el valor de su cuenta.

# 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 de Active Directory

En el modo de seguridad de Active Directory, después de que un usuario haya generado un archivo keytab, el usuario debe proporcionar principal y keytab como parámetros durante la creación de instancias del conector.

En este modo, el controlador carga el archivo keytab en los contenedores del ejecutor correspondientes. A continuación, los ejecutores usan el nombre principal y keytab para generar un token que se usa para crear un conector JDBC para lectura y escritura.

A continuación se muestra una instancia de conector de ejemplo para el modo de Active Directory. Antes de ejecutar el script, reemplace el ? con el valor de su cuenta.

# 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 obtener más información sobre los clústeres de macrodatos, vea Cómo implementar Clústeres de macrodatos de SQL Server en Kubernetes.

¿Tiene comentarios o recomendaciones de características para clústeres de macrodatos de SQL Server? Deje una nota en Comentarios sobre clústeres de macrodatos de SQL Server.