将参数从 SSRS 传递到 Databricks SQL

问题描述 投票:0回答:1

我刚刚设置了一个连接,将 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
和它的不同版本......但没有运气

现在我想知道:我做错了什么吗?这根本不可能吗?我真的开始假设后者。

非常感谢任何帮助或建议。预先感谢!

reporting-services odbc databricks databricks-sql
1个回答
0
投票

所以......我找到了一个解决方案,尽管它有点笨拙。

您可以使用表达式在 SSRS 中定义 SQL 查询。如果您构建类似这样的表达式,那么它将构建一个字符串,其中包含发送到 Databricks 的 SQL 查询中的参数化 WHERE 谓词:

= "SELECT * FROM Table1 t WHERE t.FieldName IN ('" + 
JOIN(Parameters!MyParameterName.Value, "','") +
"')"

在此示例中,我传递了一个多值参数,因此我将参数选择连接到一个大字符串中,但如果您按单个选择参数进行过滤,则可以使这一过程变得更加简单。

© www.soinside.com 2019 - 2024. All rights reserved.