我刚刚设置了一个连接,将 SQL Server Reporting Services (SSRS) 连接到我的 Databricks SQL 端点。连接有效,我可以查询数据。我正在使用 Simba Spark ODBC 驱动程序来执行此操作,并且效果很好。
现在,我的SSRS中的报告数据集需要使用一些参数。在常规 SQL Server 中,我只会在查询中使用
@Parameter
。但是,Databricks SQL 使用不同的传递参数,语法应该是{{ Parameter }}
。我尝试过多个版本,例如 {{ @Parameter }}
、'{{ Parameter }}'
等等。
这就是 SSRS 中的样子:
不幸的是,这不起作用,它会给我:
ERROR [42000] [Simba][Hardy] (80) Syntax or semantic analysis error thrown in server while executing query. Error message from server: org.apache.hive.service.cli.HiveSQLException: Error running query: [PARSE_SYNTAX_ERROR] org.apache.spark.sql.catalyst.parser.ParseException: [PARSE_SYNTAX_ERROR] Syntax error at or near '{'(line 3, pos 28)
在 Databricks SQL 本身中,这工作得很好!弹出一个参数框,我可以填写。
现在,什么有效,但在我看来不是最优的,是将参数设置为“?”
SELECT *
FROM table
WHERE column = ?
那么我还需要输入一个“?”在 SSRS 的参数部分,但这样你永远不会知道哪个参数是哪个(如果参数超过 1 个)。当然我已经尝试过
?Parameter
和它的不同版本......但没有运气
现在我想知道:我做错了什么吗?这根本不可能吗?我真的开始假设后者。
非常感谢任何帮助或建议。预先感谢!
所以......我找到了一个解决方案,尽管它有点笨拙。
您可以使用表达式在 SSRS 中定义 SQL 查询。如果您构建类似这样的表达式,那么它将构建一个字符串,其中包含发送到 Databricks 的 SQL 查询中的参数化 WHERE 谓词:
= "SELECT * FROM Table1 t WHERE t.FieldName IN ('" +
JOIN(Parameters!MyParameterName.Value, "','") +
"')"
在此示例中,我传递了一个多值参数,因此我将参数选择连接到一个大字符串中,但如果您按单个选择参数进行过滤,则可以使这一过程变得更加简单。