数据治理 Python桑基图处理表关系_sankey is a dag, the original data has cycle!-程序员宅基地

技术标签: python  数据仓库  数据治理  血缘关系  数据可视化  Python  

数据治理 Python桑基图处理表关系

需求

随着hive库表越来越多,调度出问题后,排查时间越来越长。计划通过桑基图以及血缘图谱解决,当前先用桑基图页面顶一段时间。后期做成web服务,如果有可能,尽量嵌入到hive metastore

预期

  • 桑基图:

业务DB/中间件 – ods – cdm – ads – 大数据服务DB

  • 图谱:

业务DB/中间件 – 调度 – ods – 调度 – cdm – 调度 – ads – 调度 – 大数据服务DB

环境与版本

  1. Anaconda – Python3.6
  2. IED – PyCharm
  3. 前端可视化图表 – echarts(pycharts 1.+)

数据处理

整理hive表

方案一: 从hive metastore关联表获取(DBS + TBLS)

## 所有库表一次获取
SELECT concat(b.NAME,'.',a.TBL_NAME) FROM TBLS a 
LEFT JOIN DBS b ON a.DB_ID = b.DB_ID; 

方案二: 从hdfs 获取

## 分库表多次获取
hadoop fs -ls /user/hive/warehouse/tmp.db/ | awk -F ' ' '{print $8}' | sed 's/\/user\/hive\/warehouse\/tmp\.db\//tmp\./g'

方案三: 从hive客户端获取

## 分库表多次获取
use tmp; # a库,b库...
show tables;

整理表间关系

  1. 通过步骤【整理hive表】拿到表,找到代码里的管理关系
    比如a与b关联,生成c, c与d关联生成e
source target
a c
b c
c f
d f
  1. 将如上数据插入mysql
CREATE TABLE `links` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `source` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  `target` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  `is_deleted` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  `gmt_create` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

SELECT source,target FROM `links`;

在这里插入图片描述

Python可视化

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pymysql
import pandas as pd
import json
from pyecharts.charts import Sankey
from pyecharts import options as opts

# 获取数据库数据
def load_links_frame_from_mysql():
    conn = pymysql.connect(host="127.0.0.1",
                           port=3306,
                           user="账号",
                           password="密码",
                           db="数据库",
                           charset="utf8")
    sql = "SELECT source,target FROM links"
    data_frame = pd.read_sql(sql, conn)
    conn.close()
    return data_frame

# 获取nodes
def get_nodes(df):
    nodes = []
    for value in pd.concat([df['target'],df['source']]).unique():
        dic = {
    }
        dic['name'] = value
        nodes.append(dic)
    return nodes

# 获取links
def get_links(df):
    links = []
    for i in df.values:
        links.append({
    'source': i[0], 'target': i[1], 'value': 1})
    return links


if __name__=="__main__":
    link = load_links_frame_from_mysql()
    colors = [
        "#67001f",
        "#b2182b",
        "#d6604d",
        "#f4a582",
        "#fddbc7",
        "#d1e5f0",
        "#92c5de",
        "#4393c3",
        "#2166ac",
        "#053061"]

    pic = (
        Sankey(init_opts=opts.InitOpts(width="480px",height="720px")).set_colors(colors)
            .add('大数据表关系图',
                     get_nodes(link),
                     get_links(link),
                     pos_bottom="50%",
                     focus_node_adjacency="allEdges",
                     linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color='source'),
                     label_opts=opts.LabelOpts(position='top'),

                     node_gap=1,
                     )
            .set_global_opts(title_opts=opts.TitleOpts(title='大数据'))
    )
    pic.render('xueyuan_sankey.html')

在这里插入图片描述

实际使用中的报错

  • Cannot set property ‘dataIndex’ of undefined

此错误由重复数据引起

  • Sankey is a DAG, the original data has cycle!

此错误为 source 与 target数据相同引起

参考

补充

  1. 后期调色忽略,图谱后期再处理;
  2. 有相关数据治理方面的,可以相互探讨和学习
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dbc_zt/article/details/114588765

智能推荐

Unix传奇 (上篇)_unix传奇pdf-程序员宅基地

文章浏览阅读182次。Unix传奇(上篇) 陈皓 了解过去,我们才能知其然,更知所以然。总结过去,我们才会知道我们明天该如何去规划,该如何去走。在时间的滚轮中,许许多的东西就像流星一样一闪而逝,而有些东西却能经受着时间的考验散发着经久的魅力,让人津津乐道,流传至今。要知道明天怎么去选择,怎么去做,不是盲目地跟从今天各种各样琳琅满目前沿技术,而应该是去 —— 认认真真地了解和回顾历史。 Unix是目前还在存活的操作系_unix传奇pdf

Eclipse无法启动_eclipse启动不了-程序员宅基地

文章浏览阅读2.4k次。安装好eclipse启动时报如下的错An error has occurred.See the log file E:\Eclipse\EclipseMars\WorkSpace\.metadata\.log.依次打开文件夹configuration、.settings,找到org.eclipse.ui.ide.prefs文件,用记事本打开将RECENT_WORKSPACES=后面的地址删除SHOW_WORKSPACE_SELECTION_DIALOG=后面的false改为ture如图在一个你能找到的地方创_eclipse启动不了

深度学习之图像处理,ImportError: DLL load failed: 找不到指定的模块_警告: 找不到图像文件。模块 'impedancectrl_singlemodel/trajecto-程序员宅基地

文章浏览阅读490次。环境说明windows10,64bit,python3.7.4问题描述Traceback (most recent call last):File “F:/code-ml/resnet101/resnet50-101-152.py”, line 13, in import torchvisionFile “C:\python37\lib\site-packages\torchvisio..._警告: 找不到图像文件。模块 'impedancectrl_singlemodel/trajectory planner

权限系统--组织机构管理_组织机构管理 系统-程序员宅基地

文章浏览阅读3.2k次。为什么要先写组织机构呢,其实没有为什么,先写什么都是可以的一:界面展示(仅仅是组织机构)组织机构管理主界面:添加界面:修改界面:二:主要难点1.easyUi数据格的初始化与分页:可以查看我之前写的一篇,里面包含了数据格在后台的数据的处理以及运用pageHelper进行分页的详细介绍。点击_组织机构管理 系统

java内涵_Java中“::”是什么含义-程序员宅基地

文章浏览阅读5.9k次,点赞4次,收藏16次。大家是不是经常看到如下代码List list = Arrays.asList("a","b","c");list.stream().forEach(System.out::println);这个“::”到底是什么语法呢?在JAVA 8 中,可以通过 “::” 关键字来访问类的构造方法,对象方法,静态方法。一般有下面几种用法。访问静态方法 // 使用方法:类名::静态方法名, 如 Integer::..._java中::是什么意思

高德地图marker添加属性、更换icon图标-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏5次。为高德地图marker添加..._amap.marker icon

随便推点

云计算及虚拟化教程_云计算与虚拟化技术 教改-程序员宅基地

文章浏览阅读213次。云计算及虚拟化教程学习云计算、虚拟化和计算机网络的基本概念。此视频教程共2.0小时,中英双语字幕,画质清晰无水印,源码附件全课程英文名:Cloud Computing and Virtualization An Introduction百度网盘地址:https://pan.baidu.com/s/1lrak60XOGEqMOI6lXYf6TQ?pwd=ns0j课程介绍:https://www.aihorizon.cn/72云计算:概念、定义、云类型和服务部署模型。虚拟化的概念使用 Type-2 Hyperv_云计算与虚拟化技术 教改

Java中的8种原生数据类型(Primitive Data Types)分析_number of primitive data types injava-程序员宅基地

文章浏览阅读3.8k次。八种数据类型类型 int short long byte float double char boolean 字节数 4 2 8 1 4 8 4 JVM相关 大小 -2147483648~2147483647 -32768~32767 -9223372..._number of primitive data types injava

vscode提取扩展时出错.XHR Failed_vscode提取扩展时出错xhr failed-程序员宅基地

文章浏览阅读3.8k次。(3)更改扩展商店源:尝试切换到另一个扩展商店源。您可以在 VS Code 设置中找到“扩展”选项,然后在“扩展商店”中选择另一个源。例如,您可以将源更改为“Visual Studio Code Marketplace China”。不要轻易网络重置,不要轻易网络重置,不要轻易网络重置!网上有些教程不要尝试,否则会失去网络模块,就再也连不上网了,切记切记。(2)更改网络设置:如果您使用代理,请尝试更改代理设置。等扫描结束之后,点击右下角查看选定问题,第二部点击否rr。找一台别人的电脑,下载。_vscode提取扩展时出错xhr failed

【学习心得】Numpy学习指南或复习手册-程序员宅基地

文章浏览阅读361次,点赞6次,收藏11次。本文是自己在学习Numpy过后总是遗忘的很快,希望将numpy的知识点织成一张网,形成一个体系。能够方便我每次复习的时候快速回想,并帮助我构建对知识点之间的关联,巩固和加深理解。

PagerAdapter,FragmentPagerAdapter,FragmentStatePagerAdapter原理分析,notifyDataSetChanged如何更新Fragment?-程序员宅基地

文章浏览阅读2.5k次。水平显示Fragment分页在FragmentPagerAdapter和FragmentStatePagerAdapter使用如何选择?FragmentPagerAdapaterFragmentPagerAdapter继承自PagerAdapter类,它将每个页面使用一个Fragment,只要用户能够返回到该页面,该Fragment就会一直保存在FragmentManager中,子类只需要实现getItem()和getCount()就可以实现一个可以工作的Adapter。FragmentPager_fragmentpageradapter

使用fuse编写文件系统 (1)_writing a fuse filesystem: a tutorial-程序员宅基地

文章浏览阅读2.3k次。http://ouonline.net/building-your-own-fs-with-fuse-1FUSE的全称是”Filesystem in Userspace”,即“用户空间的文件系统”,这是一个内核模块,能够让用户在用户空间实现文件系统并且挂载到某个目录,就像在内核实现的文件系统一样。使用FUSE有几个好处:一是因为在用户空间实现,开发和调试都比较方便;二是_writing a fuse filesystem: a tutorial

推荐文章

热门文章

相关标签