Superset嵌入外部系统操作方式调研

1. Superset安装方式可直接参考官网:Installing Locally Using Docker Compose | Superset

我是直接在Mac系统上使用docker-compose方式安装;

2.  因为后面会存在外部系统访问superset链接的情况,所以需要修改某些配置,解决一些功能和跨域问题,具体可参考:https://www.cnblogs.com/datawalkman/p/15131887.html

我做的修改如下:

HTTP_HEADERS: dict[str, Any] = {}  # 确切地说,最新版本该参数为默认值,没有修改

WTF_CSRF_ENABLED = False        # 解决跨域

PUBLIC_ROLE_LIKE: Optional[str] = "Gamma"

"ENABLE_TEMPLATE_PROCESSING": True

"DASHBOARD_NATIVE_FILTERS": True

"DASHBOARD_CROSS_FILTERS": True

"DASHBOARD_NATIVE_FILTERS_SET": True

修改方式是:

1. docker ps 找到运行中的容器

2. docker exec -it cid bash 进入名称叫做‘superset_app’ 的容器里面,默认路径为/app

3. vi superset/config.py进入配置文件

4. 在该文件内作上述修改,保存退出文件

5. 退出容器

此外,superset基础镜像还有一个比较坑爹的地方需要注意:默认的superset_app镜像并没有Oracle环境,安装自己安装Oracle_client才可以,安装方式可以自己查,就是在Linux上安装oracle常规操作。参考:https://blog.csdn.net/weixin_39979080/article/details/116349887

安装过程可直接在在上述修改config文件之后直接在容器内部操作。

安装完成后,在容器内测试是否成功:

1. python  # 进入python命令行

2. import cx_Oracle

3. conn = cx_Oracle.connect(你的oracle数据库url)

4. 如果第3步没有报错,则表示oracle安装成功,退出容器

退出容器后,执行如下操作:

1. docker restart cid # 重启superset_app容器,但是我测试下来,这样重启之后跨域问题不能解决,本人更建议往下执行

2. 退出容器后,先保存修改后的容器为新的镜像:docker commit cid apache/superset:latest-dev-new

3. 修改官网中指定的启动服务文件docker-compose-non-dev.yml内的镜像名称:

x-superset-image后面的TAG后缀修改为新的后缀;

4. 重新部署启动docker-compose服务;

经实际验证,上述步骤完成后,跨域问题可解决。

至此,基本服务部署问题已经解决。

3. 配置数据源链接

 可以选择自己的数据库类型,进行后续配置。此处需注意,镜像内默认只是Mysql,安装了对应的python包,但是其他的应该都需要自己安装,安装方式官网有介绍:Installing Database Drivers | Superset

同时,后面也有各种不同类型数据库url配置方式:

MySQL | Superset

Oracle | Superset

注意oracle环境安装;

4.  根据业务需求,配置sql query

点击RUN,看到下方出现结果。

5. 点击SAVE dataset,把当前query及其结果保存成数据集;

具体是保存成新的,还是覆盖旧的,自己定。

6. 可以看到,在Datasets里面会有刚才配置的数据集 

7. 点击你想用的数据集,进入如下界面,点击下图所示按钮,编辑数据集对应的sql,修改为带参sql

先点击上面的锁,下面便可以编辑,按照业务逻辑,修改需要动态传参的参数,按照如图所示sql格式进行配置,后保存。

8. 然后配置图表对应的配置项,选择图表类型,及其对应的参数,然后点击CREATE CHART,如下图:

9. 如果显示下图所示结果,即表示前面配置成功

 10. 点击右上角SAVE,保存此图表配置。此时该图即为配置好的带有参数的图表,支持动态请求,展示动态数据。可以在Charts里面看到,有一个图表即为上述保存的带参图表; 

11. 点击Charts列表中新增的图表,点击右上角按钮,可查看该图表的分享链接:

12. 在上述src后面的链接后面,拼接上sql中对应的参数值,可以直接在浏览器访问该图表,下图上方展示的有具体的url拼接后的示例:

13. 理论上,此时外部系统前端可以通过某种嵌入插件,对该图表界面进行嵌入展示。但本人不懂前端,故不在此赘述。

补充:

14:做了上述配置之后,前端同事使用上述url链接进行嵌入,但是报错如下:

查资料,说是跨域问题,但是上面的配置已经解决了跨域问题了啊,查了各种资料也说是遇到这个错误修改什么参数,对应修改了各种之后,都是别人行,就我不行。。。最后,在搞了3天,快放弃的时候,通过修改nginx解决了,ps:修改nginx也早就尝试了,只是没想到姿势不对,唉,具体nginx配置如下:

代码如下:

    server {
        listen       8090;
        server_name  superset;

        add_header 'Access-Control-Allow-Origin' *;
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Method' *;
        add_header 'Access-Control-Allow-Headers' *;

        location / {
            proxy_hide_header X-Frame-Options;
            add_header 'X-Frame-Options' "ALLOWALL";
            #add_header 'X-Frame-Options' "ALLOW_FROM http://192.168.20.46/";
            proxy_pass   http://localhost:8088;
        }
    }

注意红框里面的一定要加,之前只是加了上面的,说是可以解决各种跨域问题,然并卵。最后还是在里面加了add_header才可以。上图中两个配置,上面那个是允许全部域名请求,下面是指定某个域名请求,可根据实际需求进行配置。 

后续如果新增统计需求,都可以按照上述配置步骤进行配置,后嵌入对应的url,动态获取图表结果。 

但是,目前在superset使用细节上还是有很多不熟悉的地方,比如:

在配置图表时,横坐标为日期,纵坐标为对应数量,当横坐标中某一天数量为0时,直接不显示该日期,导致横轴不连贯,这个在实际应用场景不是很友好,但是没有找到解决办法,希望看到的大神,如果有办法,能告知一二,跪谢。

追加1:

针对where IN类型参数,重点强调如下:

superset 说是可以支持adhoc_filters参数,配置自定义的过滤器,但是实际使用过程中,http url无论怎么传参,都是没办法正常解析,最后在大佬点播之后,更换IN参数配置方式如下:

Sperset 配置带参sql格式:

AND B.EXEC_DEPT_CODE IN ({{ "'" + "','".join(url_param('exec_dept_code').split(',')) + "'" }})

对应的http url传参格式为:

http://localhost:8088/superset/explore/p/pJwqo0yKarY/?standalone=1&category_name=***&begin_order_time=20230301&end_order_time=20230315&exec_dept_code=836520,836013,244

通过url_param获取url传递的多值字符串,后split成列表,最后拼接成IN类型sql格式;

经测试有效。

注意,上面修改完sql配置之后,Chart界面会出现如下报错:

 我之前就因为这个错误直接没有往后面走,没想到这个错误就是个大坑,当破罐子破摔,忽略这个错误,使用http url去请求测试的时候,竟然可以正常返回Chart结果,那个时候的心情简直跟吃了加糖的屎一般。。。

不得不说,这个adhoc_filters搞了我好几天,各种源码debug,里面的request跳来跳去,还把参数搞丢,真无语。。。什么时候能出点完整的使用文档就谢天谢地了。

追加2:

关于上面描述的使用nginx解决跨域问题的方法,后面经验证就算加了nginx也只是允许iframe正常展示动态chart的情况,在本地浏览器使用ip:port的方式访问superset服务,还是存在权限问题,没办法进行login。在准备放弃的情况下,尝试通过linux和本机电脑(此处为mac)进行端口映射的方式,把服务器的8088端口,映射到本机的8088端口,指令为:

ssh -t -p 22 root@192.168.10.23 -fNL 8088:localhost:8088 -g

在本机浏览器通过localhost:8088的方式请求superset服务,竟然可以使用admin进行登录,不仅没有跨域问题,连全部的权限问题都不存在了。惊呆了。。。按照这个思路分析,生产环境,如果配置个统一的域名,superset修改对应的Ip参数为域名,应该可以解决相关问题,具体配置方式,可参考这篇文章:iframe引用superset dashboard出现的跨域问题原因及解决 - 知乎 

当然,如果不介意端口映射,也可以直接使用这个方式。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Superset可以通过使用iframe将其图表嵌入到网页中去。通过嵌入iframe,可以在现有网页中展示Superset生成的图表和报表。这种方法通常用于二次开发的大数据平台页面或者需要展示动态数据的需求。具体操作可以参考以下步骤: 1. 首先,确保已经安装并配置好Superset。 2. 创建或选择一个Superset的报表或图表。 3. 在你想要嵌入Superset图表的网页中,使用HTML的<iframe>标签,并设置src属性为Superset图表的URL。例如:<iframe src="https://your-superset-url"></iframe>。 4. 调整iframe的宽度和高度以适应你的网页布局。可以使用CSS的样式属性设置宽度和高度。 5. 在你的网页中嵌入这个iframe,并保存网页。 6. 当用户访问你的网页时,Superset图表将会在iframe中加载并显示。 通过这种方法,你可以将Superset的图表嵌入到自己的网页中,实现对Superset的可视化数据展示。希望这个方法能够帮助到你。如有其他问题,请随时提出。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Superset图表通过iframe嵌入Html网页展示一文详解](https://blog.csdn.net/master_hunter/article/details/125392601)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Apache Superset 1.2.0教程 (二)——快速入门(可视化王者英雄数据)](https://blog.csdn.net/null_10086/article/details/118761758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值