大数据世界通常具有 3V 特征 - 容量 (Volume)、速度 (Velocity) 和多样性 (Variety)。但大数据世界中还有一个越来越受关注的 V,那就是真实性 (Veracity ) [ 1 ]。
什么是真实性?真实性是大数据的特征之一,与一致性、准确性、质量和可信度有关。数据真实性是指数据中的偏差、噪声和异常。它也指数据不完整或存在错误、异常值和缺失值。[ 2 ]
数据中的错误来源有哪些?软件或应用程序错误可能会转换或错误计算数据。数据异常与模糊性人为错误为什么它很重要?大数据极其复杂,尚未发现如何释放其全部潜力。如果不验证和解释大数据,使用大数据是徒劳的。只有值得信赖的数据才能为任何分析增添价值。
阿尔琼 (Arjun) 在 Myntra 的起源Myntra 的数据平台能够从不同的数据源(关系型和非关系型)捕获数据,并将其存储在数据湖或数据仓库中以供进一步分析。作为源和目标之间桥梁的任何管道的最低要求是在数据级别和模式级别保持一致。管道中的每个组件都应正确捕获数据。数据平台还应有自己的严格检查和平衡,以成为分析和交易数据的真实来源。这解决了数据争议和不匹配的问题,这些问题只有在很长时间后才会反映出来,解决这个问题需要大量的人工干预和开发人员的努力。这是一个创建可以提高对数据一致性、准确性和质量的信任的框架的故事。
Myntra 用例以下是目前日常使用 Data Veracity 的地方:
财务报告用例:所有关于 SKU、交易、折扣和收入报告的数据都需要以最高精度进行验证,因为它有助于构建公司的绩效视图。Veracity Framework 有助于为所有核心仪表板和报告生成可靠的数据源。供应链运营和报告用例:我们的供应链网络的精确度还取决于确认每次数据运行的正确性,以便运营能够快速灵活地采取行动,分配送货代理、评估仓库运营并监控前向和后向物流的效率。Arjun 通过在数据源上执行查询来确保数据的正确性。考虑到一些不可避免的情况,使用可接受的阈值对数据源进行比较。
指导原则任何数据真实性框架主要应具有以下属性:
能够连接到不同类型的数据源。生成比较报告以供分析。建造 Arjun根据指导原则,我们使用 Spring Boot 框架在 Java 中构建了 Arjun 服务。API 请求主体包含有关数据源类型、凭据以及相应查询或表名的信息。源和目标上的查询同时运行。两者完成后,将创建结果报告,其中包含源和目标之间的差异以及相应的阈值。将向邮件订阅者发送一封包含报告的邮件。此报告也会保存以供将来分析。
Arjun 的流程图
功能1.支持不同的来源:该框架支持连接到各种数据关系数据库源,如MySQL,Hive等。
2. 真实性类型:该框架支持不同类型的真实性:
2.1 计数真实性:在此过程中,将同时运行针对多个表或集合的“行计数”查询。将差值与阈值进行比较。报告突出显示所有违规行为。
2.2 模式真实性:在此,执行针对表或集合的“获取模式”查询。它返回列名及其各自的数据类型。报告突出显示任何列名及其各自的数据类型不匹配的情况。
2.3 自定义真实性:在此,提供了由集合上的任意形式的连接、过滤器和组合组成的“自定义”查询。我们根据维度名称对指标名称执行真实性。例如。假设我们想要获取每个城市的人口数量,那么在这种情况下,“城市”将被视为维度名称,而 sum 是指标名称。我们从两个来源获得相同的查询结果并比较结果。不匹配的情况会在报告中突出显示。
3. 计划类型:该框架支持按计划执行的真实性:
3.1 并发真实性:在此,调用单个 API 同时对两个数据源执行查询。真实性报告中突出显示了差异。例如。在实时流式传输管道中,源和目标之间的数据应同步。在这种情况下,框架应同时对源和目标执行查询。
3.2 多重真实性:在此,两个 API 在不同时间执行。因此,对一个源的查询执行发生在第一个 API 调用时,而对另一个源的查询执行发生在第二个 API 调用时。报告在第二次 API 调用时生成。例如。在批处理管道中,数据在目标中延迟,具体取决于批处理作业计划。如果批处理作业每天运行,则只能在批处理作业完成后对目标运行真实性检查。因此,需要在源和目标的不同时间执行查询
4. 存储结果:框架将结果存储在关系数据库中。我们可以通过查询数据库进行进一步分析。例如比较表中数据的增长、异常检测等。
5. 报告:该框架支持根据真实性类型不同类型的报告。
对于计数真实性,报告应包含来自两个数据源的表名称和总行数,例如对表 1、表 2 和表 3 执行计数真实性。
如果模式真实,报告应包含两个数据源中的表名和相应的模式。
例如,对表 1 和表 2 执行模式真实性验证。
在自定义真实性的情况下,报告应该包含基于维度和指标的查询结果。
例如,对表 1 * 执行自定义验证 — 获取居住在该城市的总人数,以及同月出生的总人数。
*本表中的数字是假设的,仅用于帮助读者理解示例。
6. 多维度和指标:框架在执行自定义真实性时支持多维度和指标。
例如,对表 1* 执行自定义验证 - 获取居住在同一城市且出生在同一月份的总人数。在这种情况下,城市和月份将成为维度(多维度)。
*本表中的数字是假设的,仅用于帮助读者理解示例。
对表 1* 执行自定义准确性 — 获取板球运动员参加的总比赛场次和同一位板球运动员的总跑动次数(多 指标)。
*本表中的数字是假设的,仅用于帮助读者理解示例。
7. 跟踪 Veracity 运行:框架中提交的每个请求都是可跟踪的。用户可以获取有关源中仍在运行的查询数量以及每个查询完成所用时间的信息。
还有其他管理 API 可以告诉我们在特定时间内有多少个真实性正在运行。
8. SLA 监控:用户在提交真实性请求时会请求 SLA 时间。如果超出时间阈值,监控脚本将发送警报,指出长时间运行的查询。
非功能性能力该框架具有高度的可扩展性,无论是垂直的还是水平的。由于查询是并行执行的,因此报告生成速度非常快。这主要取决于查询执行时间。该服务是无状态的,因为它可以扩展到多个虚拟机并由负载均衡器作为前端。未来工作目前,该框架仅支持关系型数据源。我们可以进一步扩展对非关系型数据库和文件系统的支持。新类型的真实性支持。例如抽样真实性——在这种真实性中,框架可以从两个数据源获取一定量的数据并比较完整的数据。此外,我们可以在此服务之上创建一个用户界面以实现调度功能。我们还希望扩展该框架以实现系统异常检测。我很高兴听到社区其他人讲述他们如何解决数据正确性问题,以及市场上已建立或可用的任何数据真实性解决方案。请在下面发表评论。请继续关注进一步的更新……
致谢:感谢Abhinav Dangi的审阅和支持
作者:Priya Jaiswal
出处:https://medium.com/myntra-engineering/arjun-data-veracity-framework-at-myntra-489c75c36aef