parent
f73d5e82ab
commit
1f288162fb
@ -0,0 +1,159 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2023/5/14 21:15
|
||||||
|
# @Author : old tom
|
||||||
|
# @File : metadata_comparator.py
|
||||||
|
# @Project : futool-tiny-datahub
|
||||||
|
# @Desc : 版本比较器
|
||||||
|
|
||||||
|
import abc
|
||||||
|
|
||||||
|
from datahub.metadata.metadata_warehouse import MetadataWareHouse
|
||||||
|
from datahub.metadata.constant.metadata_constant import MetaDataObjType
|
||||||
|
from common.futool.core.fu_collection import list_diff
|
||||||
|
|
||||||
|
|
||||||
|
class SourceComparator(metaclass=abc.ABCMeta):
|
||||||
|
|
||||||
|
def __init__(self, warehouse_1: MetadataWareHouse, warehouse_2: MetadataWareHouse = None):
|
||||||
|
self.warehouse_1 = warehouse_1
|
||||||
|
if warehouse_2:
|
||||||
|
self.warehouse_2 = warehouse_2
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def compare_table(self, version_1, version_2):
|
||||||
|
"""
|
||||||
|
比较表名
|
||||||
|
:param version_1:
|
||||||
|
:param version_2:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def compare_view(self, version_1, version_2):
|
||||||
|
"""
|
||||||
|
比较视图名
|
||||||
|
:param version_1:
|
||||||
|
:param version_2:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def compare_procedure(self, version_1, version_2):
|
||||||
|
"""
|
||||||
|
比较存储过程
|
||||||
|
:param version_1:
|
||||||
|
:param version_2:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def compare_table_field(self, version_1, version_2):
|
||||||
|
"""
|
||||||
|
比较字段
|
||||||
|
:param version_1:
|
||||||
|
:param version_2:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def compare_view_create(self, version_1, version_2):
|
||||||
|
"""
|
||||||
|
比较视图创建语句
|
||||||
|
:param version_1:
|
||||||
|
:param version_2:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def compare_procedure_create(self, version_1, version_2):
|
||||||
|
"""
|
||||||
|
比较存储过程创建语句
|
||||||
|
:param version_1:
|
||||||
|
:param version_2:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def query_table(self, version_1, version_2):
|
||||||
|
"""
|
||||||
|
查询表名称
|
||||||
|
:param version_1: 版本号1
|
||||||
|
:param version_2: 版本号2
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
table_v1 = self.warehouse_1.query_metadata_name(obj_type=MetaDataObjType.Table.value, version_code=version_1)
|
||||||
|
table_v2 = self.warehouse_2.query_metadata_name(obj_type=MetaDataObjType.Table.value,
|
||||||
|
version_code=version_2) if self.warehouse_2 \
|
||||||
|
else self.warehouse_1.query_metadata_name(obj_type=MetaDataObjType.Table.value,
|
||||||
|
version_code=version_2)
|
||||||
|
return self._compare_data_list(table_v1, table_v2)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _compare_data_list(version_1_data, version_2_data):
|
||||||
|
# 计算2次用于区分版本间差异
|
||||||
|
# version_1有而version_2没有
|
||||||
|
v1_to_v2 = list_diff(version_1_data, version_2_data)
|
||||||
|
# version_2有而version_1没有
|
||||||
|
v2_to_v1 = list_diff(version_2_data, version_1_data)
|
||||||
|
return v1_to_v2, v2_to_v1
|
||||||
|
|
||||||
|
|
||||||
|
class SameSourceComparator(SourceComparator):
|
||||||
|
"""
|
||||||
|
同库比较器
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, source_id):
|
||||||
|
super().__init__(MetadataWareHouse(source_id))
|
||||||
|
|
||||||
|
def compare_table(self, version_1, version_2):
|
||||||
|
v1_to_v2, v2_to_v1 = self.query_table(version_1, version_2)
|
||||||
|
|
||||||
|
def compare_view(self, version_1, version_2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def compare_procedure(self, version_1, version_2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def compare_table_field(self, version_1, version_2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def compare_view_create(self, version_1, version_2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def compare_procedure_create(self, version_1, version_2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class DiffSourceComparator(SourceComparator):
|
||||||
|
"""
|
||||||
|
不同库比较
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, source_id_1, source_id_2):
|
||||||
|
warehouse = MetadataWareHouse(source_id_1)
|
||||||
|
warehouse_dst = MetadataWareHouse(source_id_2)
|
||||||
|
|
||||||
|
def compare_table(self, version_1, version_2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def compare_view(self, version_1, version_2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def compare_procedure(self, version_1, version_2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def compare_table_field(self, version_1, version_2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def compare_view_create(self, version_1, version_2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def compare_procedure_create(self, version_1, version_2):
|
||||||
|
pass
|
Loading…
Reference in new issue