在Apache Superset 2.0.1的SQL Lab中调用存储过程的其他方法咨询
在Apache Superset中调用存储过程的其他可行方法
方法1:直接执行存储过程(需数据源支持)
如果你的数据源连接允许执行非SELECT类语句,可以直接使用EXEC命令结合Superset模板变量:
EXEC myStoredProcedure param1, '{{ ''.join(filter_values('myFilterColumn')) }}' WITH RESULT SETS( ( id int, [name] varchar(255), id_sent int, nbAddressSent int, nbOpeners int, nbClickers int ) )
注意:要确认数据源连接配置开启了对应权限,比如SQL Server需开启allow_multi_statements,否则这类语句可能被拦截。
方法2:在数据库端封装为视图/表值函数
静态视图封装
先在数据库中创建视图封装存储过程调用逻辑,之后在Superset直接查询视图:
CREATE VIEW vw_myStoredProcedure AS SELECT * FROM OPENQUERY( LINKED_SERVER_NAME, 'EXECUTE myStoredProcedure param1, '''' WITH RESULT SETS(( id int, [name] varchar(255), id_sent int, nbAddressSent int, nbOpeners int, nbClickers int ))' )
带参数的表值函数
如果需要动态传参,可改用表值函数:
CREATE FUNCTION fn_myStoredProcedure(@param2 varchar(255)) RETURNS TABLE AS RETURN ( SELECT * FROM OPENQUERY( LINKED_SERVER_NAME, 'EXECUTE myStoredProcedure param1, ''' + @param2 + ''' WITH RESULT SETS(( id int, [name] varchar(255), id_sent int, nbAddressSent int, nbOpeners int, nbClickers int ))' ) )
在Superset中调用函数:
SELECT * FROM fn_myStoredProcedure('{{ ''.join(filter_values('myFilterColumn')) }}')
方法3:SQL Lab多语句脚本
在Superset的SQL Lab中编写多语句脚本,先声明变量再执行存储过程:
DECLARE @param varchar(255) = '{{ ''.join(filter_values('myFilterColumn')) }}' EXEC myStoredProcedure param1, @param WITH RESULT SETS( ( id int, [name] varchar(255), id_sent int, nbAddressSent int, nbOpeners int, nbClickers int ) )
同样需要确保数据源连接支持多语句执行。
方法4:封装为Superset数据集
将你当前的查询逻辑保存为Superset自定义SQL数据集,后续在仪表盘或图表中直接调用该数据集,无需重复编写完整语句,同时可直接绑定过滤器参数。
内容的提问来源于stack exchange,提问作者Wajahat kayani
相关产品推荐
相关产品推荐

