我正在尝试通过 azure databricks 中的小部件传递一个密码,其中有很多标点符号。这个过程从 Azure 数据工厂调用,它似乎可以很好地传递变量。这就是我传递内容并配置相关连接信息以供以后使用 SQL 代码导出的方式:
%python
#Get variables to write to DB
input_sql_conn_string = dbutils.widgets.get("dest_sql_server_url")
input_db_name = dbutils.widgets.get("dest_db_name")
input_dest_username = dbutils.widgets.get("dest_username")
input_dest_password = dbutils.widgets.get("dest_password")
input_dest_table_schema = dbutils.widgets.get("dest_table_schema")
input_dest_table_name = dbutils.widgets.get("dest_table_name")
dest_table_full = input_dest_table_schema + "." + input_dest_table_name
#Configure whole connection string
url = f"jdbc:sqlserver://{input_sql_conn_string}:1433;database={input_db_name};user={input_dest_username};password={input_dest_password}"
#Set conf variables so they are accessible by SQL code
spark.conf.set("var.python_sql_url", url)
spark.conf.set("var.python_dest_table", dest_table_full)
spark.conf.set("var.python_username", input_dest_username)
spark.conf.set("var.python_password", input_dest_password)
我执行了一堆在这里不重要的 SQL 任务,然后尝试使用传入的信息导出到 Azure SQL 表:
CREATE TEMPORARY VIEW jdbcTable
USING org.apache.spark.sql.jdbc
OPTIONS (
url ${var.python_sql_url},
dbtable ${var.python_dest_table},
user ${var.python_username},
password ${var.python_password}
);
INSERT INTO TABLE jdbcTable
SELECT m.eventId, m.locationId, m.occurredOn, m.sequenceNumber, m.eventType
FROM unified.events.location m
我收到以下错误,表明密码字符串有问题。似乎密码中有一堆标点符号正在填充 SQL 加载:
如何转义这些字符?或者让字符串中的密码OK被解析?