1

我有一个 Thrift 服务器启动并运行,用户通过 JDBC 连接发送查询。我可以在查询进入时拦截和修改查询,然后将修改后的查询结果发送回用户吗?

例如 - 我希望用户能够发送查询

SELECT * FROM table_x WHERE pid="123";

并将查询修改为

SELECT * FROM table_y WHERE pid="123";

并且应该返回第二个查询的结果。这对用户应该是透明的。

4

3 回答 3

0

SparkExecuteStatementOperation 和 SparkSession 是我们认为要添加代码的内容。我正在使用(尚未进入产品)基于一些外部策略的简单规则,我在传递之前将表的名称更改为 SQL 中的视图。它虽然有点hacky。

于 2018-06-05T05:33:26.897 回答
0

在 Spark Thrift Server 中无法更改查询。您可以在 Jdbc/odbc 驱动程序之前使用其他方式更改查询。在复杂查询中需要对其进行多次操作。您可以在简单查询中使用字符串修改。只有一个表名更改很容易,但解析查询和修改复杂查询并不容易。

于 2018-11-03T10:00:50.323 回答
0

您可以使用数据库代理在查询到达数据库之前根据需要重写查询。

我不确定它在您的特定情况下是否有意义,但如果确实如此,请查看 Gallium Data,这是一个常见的用例。

于 2022-02-01T03:12:07.587 回答