将值从一个笔记本传递到另一个 - Databricks

Pass values from one notebook to other - Databricks

我正在从数据块连接到 azure sql 服务器,为此我正在使用 jdbc 连接器

val jdbcUsername = "user1"
val jdbcPassword = "pwd1"
val jdbcHostname = "XXXXsqldevussc.database.windows.net" 
val jdbcPort = 1111
val jdbcDatabase ="XXXXacttrackdev"

我正在创建 jdbc url 如下

import java.util.Properties

val jdbc_url = s"jdbc:sqlserver://${jdbcHostname}:${jdbcPort};database=${jdbcDatabase};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=60;"
val connectionProperties = new Properties()
connectionProperties.put("user", s"${jdbcUsername}")
connectionProperties.put("password", s"${jdbcPassword}")  
val cP = connectionProperties

val driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
connectionProperties.setProperty("Driver", driverClass)

这一切都在笔记本中的一个公共文件夹中,现在我想将这些值传递到项目文件夹中的一个笔记本中。使用 dbutils.notebook.exit 我只能传递一个值 (jdbc_url),但我还需要将 connectionProperties 传递给其他笔记本。有人可以帮我做这件事吗?我试图在 2 个单独的 dbutils.notebook.exit 中传递这两个值,但我得到一个错误

dbutils.notebook.exit(jdbc_url) // works well
dbutils.notebook.exit(cP) //throws an error command-2330564045697042:1: error: type mismatch;
                          // found   : java.util.Properties 
                          // required: String
                          // dbutils.notebook.exit(cP)

如何使用 dbutils.notebook.exit 传递这两个值。感谢帮助

谢谢!

您正在尝试 return java.util.Properties 对象使用 dbutils.notebook.exit。但是,dbutils.notebook.exit 只支持字符串。

因此您可能需要将 Properties 对象转换为 String。类似于:

    public static String getPropertyAsString(Properties prop) {    
      StringWriter writer = new StringWriter();
      prop.list(new PrintWriter(writer));
      return writer.getBuffer().toString();
    }

    dbutils.notebook.exit(getPropertyAsString(cP))   

您可以将字符串读回其他笔记本中的 Properties 对象。