【明道云】【企业数字化】如何将明道云的数据直连SmartBi使用

【背景】

明道云优势在于上传和企业内部流程的系统化,换句话说,是产生数据的部分。
SmartBi优势在于生成报表和即席查询等,是使用沉淀数据的部分。
如果能将这两部分的数据打通,可以大大扩展企业数字化框架的覆盖范围。让这两套平台协同发挥1+1远大于2的作用。

【分析】

目前总共有两种方法,一种是SmartBi提供的官方接口。一种是我自研的方法。

官方接口建立的连接,严格来说只是批量。制定一个时间段间隔去跑抽取程序,将指定明道云APP的数据抽取到SmartBi的高速缓存。
在这里插入图片描述
我的自研方法,是在明道云上传时将数据同步到自己的企业内数据库(我用的MySQL),SmartBi直连MySQL数据库,从而实现联通。

两种方法,前者好在不用自己写服务,弱点在于无法获得实时的最新数据,对数据的预处理可能也不方便。

后者由于已经写了通用服务,如果大家直接用我的源码也是不用重复开发的。弱点在于上传后记得点一下同步按钮,优点在于自主自由,可以在MySQL中以视图、存储过程等方式做前置的预处理,获得实时数据的时点也不受抽取批量执行时间间隔的限制。

【同步功能源码】

我的同步源码是用python flask写的视图函数。这是一套通用源码,任何APP都可以利用此套服务将APP内的表一键同步到自有MySQL数据库中。无须重复开发。
同步源码:

from flask import Flask, request
import requests as rq
import pandas as pd
from sqlalchemy import create_engine,exc
import jsonapp = Flask(__name__)@app.route('/Mindao_cloud_common_upload', methods=['POST', 'GET'])
def Mindao_cloud_common_upload():appKey = request.args.get('appKey')sign = request.args.get('sign')result = syncDB(appKey, sign)return resultdef syncDB(appKey, sign):try:result_list = []table_id_list = getAppTables(appKey, sign)if len(table_id_list) == 0:return "No table exist in current app!"else:for table_id in table_id_list:result = fetchTableRows(appKey, sign, table_id)result_list.append(result)return str(result_list)except Exception as e:return edef getAppTables(appKey, sign):try:result = rq.get(url=f"http://明道云服务IP地址/api/v1/open/app/get?appKey={appKey}&sign={sign}")result_dict = result.json()table_dict = result_dict['data']['sections'][0]['items']table_id_list = []for table_item in table_dict:if table_item['type'] == 0:table_id_list.append(table_item['alias'])return table_id_listexcept Exception as e:return edef fetchTableRows(appKey, sign, table_id):try:ini_index = 0row_num = 1000page_size = 1000total_df = pd.DataFrame()while row_num == page_size:ini_index = ini_index + 1params = {"appKey": appKey,"sign": sign,"worksheetId": table_id,"viewId": "","pageSize": page_size,"pageIndex": ini_index,"sortId": "","isAsc": ""}result = rq.post(url="http://明道云服务IP地址/api/v2/open/worksheet/getFilterRows", json=params)result_dict = result.json()if result_dict['data']['total'] > 0:rows = result_dict['data']['rows']row_num = len(rows)rows_list = []for row in rows:sorted_items = sorted(row.items())sorted_keys, sorted_values = zip(*sorted_items)rows_list.append(sorted_values)rows_df = pd.DataFrame(rows_list,columns=sorted_keys)total_df = pd.concat([total_df, rows_df], ignore_index=True)result = insert_into_table(total_df, table_id)else:result = f"{table_id} no records!"breakexcept Exception as e:result = ereturn resultdef insert_into_table(dataframe, table_name):try:database_url = 'mysql://root:x5@127.0.0.1:3306/mingdaocloud'# 创建数据库连接引擎engine = create_engine(database_url)# 写入数据到数据库表try:dataframe.to_sql(name=table_name, con=engine, if_exists='replace', index=False)except exc.IntegrityError as e:# 处理数据库完整性错误,例如违反主键约束return (f"数据库完整性错误: {e}")except exc.OperationalError as e:# 处理数据库操作错误,例如表不存在return (f"数据库操作错误: {e}")# 在这里创建新表table_name.__table__.create(bind=engine)return ("已创建新表。")except Exception as e:# 处理其他类型的异常return (f"发生了其他类型的错误: {e}")finally:engine.dispose()return f"{table_name}全量同步已完成"except Exception as e:return eif __name__ == '__main__':app.run(debug=True, host="0.0.0.0", port=5050)

【源码用法】

  1. 搭建Flask服务,配合tornado运行上面的源码。
  2. 明道云方面在自定义界面新建一个按钮,操作选择打开链接,配置链接和目标传参。参数这里只要两个,就是本App的sign和appKey。链接就是你服务所在服务器地址+视图函数,这里是http://服务器IP:5050/Mindao_cloud_common_upload。
    在这里插入图片描述
  3. 在MySQL数据库后台要先创建好一个名为mingdaocloud的数据库。
  4. 为了让自动创建的表和字段的名字有意义,强烈建议第一次同步前,先去APP内部API设置部分,将表的别名和字段别名都设置好。不然创建的表和字段名称都会是明道云内部给的表编号和字段编号,不易于后续使用。
    在这里插入图片描述

【源码说明】

这个源码具体做的事情,就是先获得当前APP所有表,接着再去拿到每张表的所有数据,这里存在一个分页的问题,也处理了一些错位的可能性。原理上就是把所有数据塞进一个Dataframe,然后再全量更新到MySQL数据库中。
如果有一些自己的需求,可以在此基础上修改。这套代码的通用性等我在自己的应用中都做过测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Linux进程信号(下)

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:Linux 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【Linux】…

独步IT界,开放API接口文档新标杆!

目录 1、简介 1.1 什么是API接口 1.2 为什么开放API接口 1.3 API接口的优势和应用领域 1.4 API接口的基本原则和设计准则 2、接口认证 2.1 认证方式和流程 2.2 API密钥的生成和管理 2.3 认证错误处理 3、接口调用 3.1 请求方法和URL规范 3.2 请求参数和格式 3.3 响…

遍历子网所有ip地址,寻找空闲ip

在cmd窗口下输入如下代码: for /l %i in (1,1,255) do ping -n 1 -w 60 10.183.27.%i | find "Reply" >> d:\pingall27.log 得到如下结果 上图中,有reply的代表该IP已经被占用。但是观察红框中 22-->25之间缺少23 24 则说明23/24 是…

ChatGPT到底好不好用?相比于搜索引擎的优势

在数字化时代,获取信息的方式正经历着翻天覆地的变化。搜索引擎曾经是我们获取信息的首选工具,但现在,随着人工智能技术的飞速发展,ChatGPT等智能聊天机器人正在逐渐改变我们搜索和处理信息的方式。那么,ChatGPT到底好…

宿舍安全用电监模块

学校宿舍安全用电监测模块是针对 0.4kV 以下的 TT、TN 系统设计的智能电力装置,具有单、三相交流电测量、四象限电能计量、谐波分析、开关量输入、继电器输出功能,以及 RS485 通讯或 GPRS 无线通讯功能,通过对配电回路的剩余电流、导线温度等…

理想架构的Doherty功率放大器理论与仿真

Doherty理论—理想架构的Doherty功率放大器理论与仿真 参考: 三路Doherty设计 01 射频基础知识–基础概念 ADS仿真工程文件链接:理想架构的Doherty功率放大器理论与仿真 目录 Doherty理论---理想架构的Doherty功率放大器理论与仿真0、Doherty架构的作用…

神经网络算法与逻辑回归:优势与差异

神经网络算法和逻辑回归都是预测模型中的重要工具,但它们在处理复杂和非线性问题时表现出不同的性能。本文将深入探讨神经网络算法相对于逻辑回归的优势,以及它们在不同场景下的适用性。 一、引言 神经网络算法和逻辑回归都是预测模型中的重要工具&…

Python - argparse模块

python中的argparse模块,用于命令后参数解析,方便测试,是python中自带的模块。 可以自动生成帮助文档,和使用手册。而且当用户在执行程序的时候,输入无效的参数时,会给出对应的错误信息。 使用方法&#…

贪吃蛇(C)

游戏背景:贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅块,扫雷等游戏位列经典游戏的⾏列。 总: 游戏设计大纲: 使⽤C语⾔在Windows环境的控制台中模拟实现经典⼩游戏贪吃蛇。 实现的基本功能: 1、贪吃蛇地图绘制…

自己构建webpack+vue3+ts

先看看我的目录结构(我全局使用TS): 一、安装配置webpack打包 安装esno npm install esnoesno 是基于 esbuild 的 TS/ESNext node 运行时,有了它,就可以直接通过esno *.ts的方式启动脚本,package.json中添加 type:…

echarts绘制饼图,部分数据隐藏指示线和文本,hover时隐藏指示线和文本的类别也不显示tooltip提示

option {tooltip: {trigger: item,formatter: (p) > {if (p.name) {return ${p.name}:${p.value}个;}},backgroundColor: #ffffff,textStyle: { color: #666666 } // 提示标签字体颜色},legend: {top: 5%,left: center},series: [{name: Access From,type: pie,…

【机组】指令控制模块实验的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《机组 | 模块单元实验》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 ​ 目录 🌺一、 实验目…

重叠柱状图做法,全程动图演示

最终效果: 具体步骤: 其他图形画法: 点线对比图做法,全程动图演示 气泡图做法,全程动图演示 重叠柱状图做法,全程动图演示 瀑布图做法,全程动图演示 对称图做法,全程动图演示

[Tomcat] [最全] 目录和文件详解

打开tomcat的解压之后的目录可以看到如下的目录结构: Bin bin目录主要是用来存放tomcat的命令,主要有两大类,一类是以.sh结尾的(linux命令),另一类是以.bat结尾的(windows命令)。 …

npm或者pnpm或者yarn安装依赖报错ENOTFOUND解决办法

如果报错说安装依赖报错,大概率是因为npm源没有设置对,比如我这里安装protobufjs的时候报错:ENOTFOUND npm ERR! code ENOTFOUND npm ERR! syscall getaddrinfo npm ERR! errno ENOTFOUND npm ERR! network request to https://registry.cnpm…

小白水平理解面试经典题目LeetCode 594 最大和谐字符串

594 最大和谐字符串 这道题属于字符串类型题目,解决的办法还是有很多的,暴力算法,二分法,双指针等等。 题目描述 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums …

扫码看文件效果怎么做?文件转成二维码能制作吗?

随着网络的快速发展,现在大家习惯将内容储存在云端,减少自身内存容量的占用,所以现在分享文件时,很多人也会使用文件转二维码的方式,来让其他人查看或者下载文件。今天小编来给大家分享一下文件制作二维码的技巧&#…

司铭宇老师:二手房电话营销培训:二手房电话销售技巧和话术

二手房电话营销培训:二手房电话销售技巧和话术 一、二手房电话销售的重要性 1.高效传播:通过电话,我们可以迅速将房源信息传播给潜在客户,提高房源的曝光率。 2.精准定位:通过电话沟通,我们可以初步了解客户…

如何攻克钙钛矿太阳能电池电性能测试技术壁垒?

1 前言 “碳达峰、碳中和”背景下,发展新能源成为降低碳排放的第一驱动力。以太阳能为代表的清洁能源在市场上的占比大幅提升,与之对应的太阳能电池同样发展迅速。太阳能电池是一种吸收光能产生电能的半导体光电二极管,硅基电池作为第一代太…

Docker(十五)Fedora CoreOS

作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! Fedora CoreOS CoreOS 是一个专门为安全和大规模运行容器化工作负载而构建的新 Fedora 版本,它继承了 Fedora Atomic Host 和 C…