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时,直接不显示该日期,导致横轴不连贯,这个在实际应用场景不是很友好,但是没有找到解决办法,希望看到的大神,如果有办法,能告知一二,跪谢。