Nombre de las claves secretas de Azure Databricks en propiedad jdbc.
Acabo de crear un alcance secreto compatible con Azure Key Vault.
Mis siguientes nombres de secretos (almacenados como secretos en Key Vault) para conectarme a la base de datos de Azure SQL son:
1. jdbcusername
2. jdbcpassword
Después de eso, he creado un alcance secreto en Databricks. El nombre de este alcance secreto es secretscopeadbr.
En mi cuaderno tengo el siguiente código:
Este código tiene la conexión JDBC basada en mi base de datos de Azure SQL y escribe datos desde un dataframe a una tabla única en mi base de datos de Azure SQL.
from pyspark.sql import *
import pandas as pd
<h1>Leer el archivo Parquet</h1>
outerjoindfparquet = spark.read.format('parquet').load('dbfs:/newjouterjoindfparquet.parquet')
display(outerjoindfparquet)
<h1>Escribir archivo Parquet a la base de datos de Azure SQL</h1>
mountdatabricksjdbcHostname = "sql-ja-dev.database.windows.net"
jdbcPort = "1433"
jdbcDatabase = "sqldb-ja-dev"
properties = {
"user": "jdbcusername",
"password": "jdbcpassword"
}
url = "jdbc:sqlserver://{0}:{1};database={2}".format(mountdatabricksjdbcHostname, jdbcPort, jdbcDatabase)
filedf = sqlContext.read.parquet("dbfs:/newjouterjoindfparquet.parquet", header=True)
filedf1 = DataFrameWriter(filedf)
filedf1.jdbc(url=url, table="Fact_SalesOrder", mode="overwrite", properties=properties)
El problema:
Los valores de secretos insertados en las propiedades no son reconocidos.
Mensaje de error:
com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user ‘jdbcUsername’
¿Alguna sugerencia? ¡Muchas gracias!
davy.ai
Parece que los valores secretos insertados en las propiedades no están siendo reconocidos. Para resolver este problema, actualice la variable de propiedades para incluir los valores secretos reales almacenados en Key Vault para
jdbcusername
yjdbcpassword
.Aquí hay un fragmento de código actualizado:
Tenga en cuenta que hemos añadido el código necesario para obtener los valores secretos usando el método
dbutils.secrets.get(scope="secretscopeadbr", key="<secret-name>")
y asignarlos a las variables correspondientes. También hemos actualizado la variableproperties
para usar los valores secretos obtenidos parajdbcusername
yjdbcpassword
.