【问题标题】:SQL Database using JDBC + parameterize SQL Query + Databricks使用 JDBC + 参数化 SQL 查询 + Databricks 的 SQL 数据库
【发布时间】:2020-05-18 05:52:03
【问题描述】:

在 Databricks 中读取 SQL 表为

val TransformationRules = spark.read.jdbc(jdbcUrl, "ADF.TransformationRules", connectionProperties)
.select("RuleCode","SourceSystem","PrimaryTable", "PrimaryColumn", "SecondaryColumn", "NewColumnName","CurrentFlag")
.where("SourceSystem = 'QWDS' AND RuleCode = 'STD00003' ")

如何在Where 子句中参数化SourceSystemRuleCode

指的是:https://docs.microsoft.com/en-us/azure/databricks/data/data-sources/sql-databases

【问题讨论】:

    标签: python sql scala jdbc databricks


    【解决方案1】:

    如果您导入 spark 隐式,您可以使用美元 $ 插值器创建对列的引用。此外,您可以使用带有列的 API 来制作逻辑,它会是这样的。

    val sourceSystem = "QWDS"
    val ruleCode = "STD00003"
    
    import spark.implicits._
    val TransformationRules = spark.read.jdbc(jdbcUrl, "ADF.TransformationRules", connectionProperties)
    .select("RuleCode","SourceSystem","PrimaryTable", "PrimaryColumn", "SecondaryColumn", "NewColumnName","CurrentFlag")
    .where($"SourceSystem" === sourceSystem && $"RuleCode" === ruleCode)
    
    val ssColumn: Column = $"SourceSystem"
    

    如您所见,美元将提供一个 Column 对象,具有合作、铸造重命名等逻辑。结合org.apache.spark.sql.function 中的功能将允许您实现几乎所有您需要的。

    【讨论】:

      【解决方案2】:

      就我正确理解您的问题而言,您想将值插入到 where 子句字符串中吗?那么下面的解决方案可能对你有用:

      val TransformationRules = spark.read.jdbc(jdbcUrl, "ADF.TransformationRules", connectionProperties)
      .select("RuleCode","SourceSystem","PrimaryTable", "PrimaryColumn", "SecondaryColumn", "NewColumnName","CurrentFlag")
      .where("SourceSystem = '{}' AND RuleCode = '{}' ".format(sourceSystem, ruleCode))
      

      【讨论】:

        猜你喜欢
        • 2014-10-09
        • 2017-09-15
        • 1970-01-01
        • 2021-08-09
        • 2012-06-09
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        相关资源
        最近更新 更多