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. 配置数据源链接

Superset嵌入外部系统操作方式调研_第1张图片

Superset嵌入外部系统操作方式调研_第2张图片

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

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

MySQL | Superset

Oracle | Superset

注意oracle环境安装;

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

Superset嵌入外部系统操作方式调研_第3张图片

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

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

Superset嵌入外部系统操作方式调研_第4张图片

Superset嵌入外部系统操作方式调研_第5张图片具体是保存成新的,还是覆盖旧的,自己定。

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

Superset嵌入外部系统操作方式调研_第6张图片

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

Superset嵌入外部系统操作方式调研_第7张图片Superset嵌入外部系统操作方式调研_第8张图片先点击上面的锁,下面便可以编辑,按照业务逻辑,修改需要动态传参的参数,按照如图所示sql格式进行配置,后保存。

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

Superset嵌入外部系统操作方式调研_第9张图片

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

Superset嵌入外部系统操作方式调研_第10张图片 10. 点击右上角SAVE,保存此图表配置。此时该图即为配置好的带有参数的图表,支持动态请求,展示动态数据。可以在Charts里面看到,有一个图表即为上述保存的带参图表; 

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

Superset嵌入外部系统操作方式调研_第11张图片

Superset嵌入外部系统操作方式调研_第12张图片

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

Superset嵌入外部系统操作方式调研_第13张图片

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

补充:

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

Superset嵌入外部系统操作方式调研_第14张图片

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

Superset嵌入外部系统操作方式调研_第15张图片

代码如下:

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

你可能感兴趣的:(superset,嵌入页面)