数据血缘分析

引入

做过大数据或者接触过数仓的同学,相信都有听到过数据治理、血缘分析的专业术语。不知道大家有没有思考过以下几个问题:
1、什么是血缘分析?主要分析什么东西?
2、为什么要做血缘分析,主要是为了解决什么痛点?做出来之后有什么价值?如何衡量这些价值?
3、如何做血缘分析?
关于第1,2个问题是需要结合每个企业实际的情况来思考,当然分析其本质就是方便数据梳理。那么本篇主要侧重于第3个问题,通过工程+方法论的方式来为读者们揭开血缘分析功能的神秘面纱。

效果展示

关于如何做血缘分析,其实每个企业的做法都大差不差,主要差别在于实现的深度。例如:有的企业是直接引用现有的开源工具,有的企业是结合自身的产品进行自研,有的企业可能只做到表级别,有的企业做到字段级别。那么本篇将会为读者们提供一种表级别粒度的分析功能,并通过可视化的方式为大家展示,当然本篇文章是属于抛砖引玉,主要是给大家提供一种思路。先为读者们展示最终效果图:

执行底层

在数仓工作职责内,大部分都是SQL化,因此血缘分析大多数都是基于SQL解析来做。当然也有非SQL的场景,不过其思想和做法都是一样的,只是API层面的调用不同而已。本篇就以Spa

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,针对HiveSQL进行数据血缘分析,可以按照以下步骤进行: 1. 连接Hive数据库并获取元数据 我们可以使用PyHive库连接到Hive数据库,并获取每个表的元数据信息,包括表名、字段名、数据类型等。例如,可以使用以下代码获取表的元数据信息: ```python from pyhive import hive conn = hive.Connection(host='localhost', port=10000, username='user', database='default') cursor = conn.cursor() cursor.execute('DESCRIBE my_table') metadata = cursor.fetchall() ``` 2. 解析HiveSQL语句 接下来,我们需要解析HiveSQL语句,得到SQL语句中涉及的所有表和字段。可以使用Python库sqlparse对HiveSQL语句进行解析。例如,对于以下HiveSQL语句: ```sql SELECT a.id, b.name FROM my_table a JOIN another_table b ON a.id = b.id WHERE a.age > 18 ``` 可以使用以下代码解析得到表名和字段名: ```python import sqlparse sql = 'SELECT a.id, b.name FROM my_table a JOIN another_table b ON a.id = b.id WHERE a.age > 18' parsed_sql = sqlparse.parse(sql)[0] tables = set() fields = set() for token in parsed_sql.tokens: if isinstance(token, sqlparse.sql.IdentifierList): for identifier in token.get_identifiers(): fields.add(identifier.get_name()) elif isinstance(token, sqlparse.sql.Identifier): tables.add(token.get_name()) tables = list(tables) fields = list(fields) ``` 3. 进行数据血缘关系分析 有了表名和字段名之后,我们可以根据字段在HiveSQL语句中的位置,判断它是源字段还是目标字段。例如,对于以下HiveSQL语句: ```sql SELECT a.id, b.name FROM my_table a JOIN another_table b ON a.id = b.id WHERE a.age > 18 ``` 可以判断出a.id是源字段,b.name是目标字段。然后,我们可以根据表名和字段名,将源字段和目标字段进行映射,得到源表、目标表和字段映射关系。具体实现可以使用Python字典来存储映射关系,例如: ```python mapping = {} for i, field in enumerate(fields): if tables[i] == 'my_table': mapping[field] = { 'source_table': 'my_table', 'source_field': field, 'target_table': 'another_table', 'target_field': fields[i+1] } print(mapping) ``` 4. 输出Python代码 最后,我们可以根据得到的映射关系,生成Python代码。具体实现可以使用字符串拼接的方式,生成包含源表、目标表和字段映射关系的Python代码。例如,对于上面的映射关系,我们可以生成如下代码: ```python mapping = { 'id': { 'source_table': 'my_table', 'source_field': 'id', 'target_table': 'another_table', 'target_field': 'id' } } source_table = 'my_table' source_fields = ['id'] target_table = 'another_table' target_fields = ['name'] source_to_target = {} for field in source_fields: source_to_target[field] = mapping[field]['target_field'] print('SELECT {} FROM {} WHERE {} > 18'.format(', '.join(target_fields), target_table, source_to_target['id'])) ``` 以上就是一个简单的HiveSQL数据血缘分析的Python代码。由于HiveSQL语法和元数据信息都有所不同,需要根据实际情况进行调整和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据私房菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值