我有一个 Thrift 服务器启动并运行,用户通过 JDBC 连接发送查询。我可以在查询进入时拦截和修改查询,然后将修改后的查询结果发送回用户吗?
例如 - 我希望用户能够发送查询
SELECT * FROM table_x WHERE pid="123";
并将查询修改为
SELECT * FROM table_y WHERE pid="123";
并且应该返回第二个查询的结果。这对用户应该是透明的。
我有一个 Thrift 服务器启动并运行,用户通过 JDBC 连接发送查询。我可以在查询进入时拦截和修改查询,然后将修改后的查询结果发送回用户吗?
例如 - 我希望用户能够发送查询
SELECT * FROM table_x WHERE pid="123";
并将查询修改为
SELECT * FROM table_y WHERE pid="123";
并且应该返回第二个查询的结果。这对用户应该是透明的。
SparkExecuteStatementOperation 和 SparkSession 是我们认为要添加代码的内容。我正在使用(尚未进入产品)基于一些外部策略的简单规则,我在传递之前将表的名称更改为 SQL 中的视图。它虽然有点hacky。
在 Spark Thrift Server 中无法更改查询。您可以在 Jdbc/odbc 驱动程序之前使用其他方式更改查询。在复杂查询中需要对其进行多次操作。您可以在简单查询中使用字符串修改。只有一个表名更改很容易,但解析查询和修改复杂查询并不容易。
您可以使用数据库代理在查询到达数据库之前根据需要重写查询。
我不确定它在您的特定情况下是否有意义,但如果确实如此,请查看 Gallium Data,这是一个常见的用例。