kettle开发-Day38-超好用自定义数据处理组件

这篇具有很好参考价值的文章主要介绍了kettle开发-Day38-超好用自定义数据处理组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

一、半斤八两,都不太行

        1、表输入,速度快,但不稳妥

        2、稳的一批,但是慢的像蜗牛 

二、各诉衷肠,合作共赢

         1、表输入,高效数据插入

          2、插入更新,一个都不能少

三、表输入的高效+插入更新的完整性

        1、思路

        2、数据对比

        3、数据插入

         4、效果查看

前言:

        上节我们讲到使用主键+索引的方式来处理数据的新增,但是对会对历史数据进行增删改的操作就不好处理了。因此我们需要一种区别于现有功能的高效历史数据DML的操作。目前kettle在处理数据方面,常用组件,分别为“表输入”、“表输出”、“插入更新”、“执行SQL脚本”、“Java 代码”、“JavaScript代码”等。其中“表输入”就是用于读取数据,就不做过多的阐述。今天主要集中讲述,怎么优化“表输出”和“插入更新”组件的问题。

kettle开发-Day38-超好用自定义数据处理组件

                                 表输出每秒可以处理2万条记录左右

kettle开发-Day38-超好用自定义数据处理组件

                                                        插入更新每秒只能处理400条记录左右

一、半斤八两,都不太行

        1、表输出,速度快,但不稳妥

        从上面我们可以看到,表 输出的速度还是很nice的,但是我们只能使用裁剪表的形式来处理。就是非常暴力的把历史数据全面删除再全部插入进去,即我们常说的全量更新。 这种处理方式在万级数据下还是很好用,因为处理的时间很短,效率很高,前端用户也感觉不到影响。但如下图所示,当历史数据较多时,比如20万条,处理的时间会在30s左右,这种情况大概率会影响前端使用,在用户的眼里就是,哎怎么突然没有数据?哎,怎么我刚刚查有6条,怎么现在只有2条数据了?等等,数据不是少了就没有的数据真空期,我们也叫数据等待期。显然,我们针对超2万左右的历史数据,我们应该采用增量更新的方式。

kettle开发-Day38-超好用自定义数据处理组件

        2、稳的一批,但是慢的像蜗牛 

        前面我们讲到,表输出虽然效率是插入更新的50倍,但是它再怎么快,也需要一定的运行时间,就会出现数据等待期。 数据等待期造成的后果就是影响前端用户使用

        前面我们提到采用增量更新的方式来处理,因此我们深入 剖析下插入更新这个组件,使用插入更新有个大的前提就是需要一个主键,不管是单纯的主键id,还是联合主键iid。这个组件需要一个更新的关键字

kettle开发-Day38-超好用自定义数据处理组件

         当然,对于大多数的业务场景来说,我们都能找到唯一性的主键,因此这也不是大问题。现在我们来剖析下,插入更新,在性能层面的问题。

        如前言中,所说,插入更新每秒只能处理400条数据左右,效率只有表输入的1/50。因此插入更新能保证不影响前端使用,但是更新数据的时间成本较高。因此体现在前端的用户体验就是,哎,我们的数据一个小时了,怎么还没更新呢?哎,我们能不能实时显示数据呢?这种表现我们通常叫做数据延迟。对于医疗、零售等高响应式行业来说是不太能接受。因此,插入更新虽说能保证数据的完整、可用,但是效率跟不上。因此我们急需一种高效、稳的一批的组件用于企业数据处理。

二、各诉衷肠,合作共赢

         1、表输出,高效数据插入

        表输出处理效率非常高的原因是,它不需对历史数据进行对比,耗时主要集中在表输入的数据读取时间+数据写入时间。因此速度堪比高铁,但高铁再怎么快,从长沙到上海也得几个小时呀。因此数据量大了,必然需要一定的处理耗时。但对业务来说是不能接受,不能接受在使用的时候缺数据或者少数据,或者数据前后不一致。

        当然我们不能说表输入就一文不值了,比如我们针对生产类的数据,比如机器运转数据,数据是跟着时间跑的,不存在历史数据的变动,此时我们就可以采用表输入,一直更新数据至数仓、数据湖等。就像一个水龙头,一直放水至蓄水池,水龙头的水永远是新的。当然,怎么去控制水龙头里面的水都是新的呢,我们可以参考我上一节的内容。

kettle开发-Day37-SQ索引优化_他们叫我技术总监的博客-CSDN博客说是kettle开发优化,不如说是SQ的优化或者说是思路的优化,我们在走路的同时记得抬头看天。https://blog.csdn.net/qq_29061315/article/details/129011372

           2、插入更新,一个都不能少

        通常我们在使用插入更新的时候,是为了保证数据的完整性,这样我们没必要去担心,我们数仓里面的数据会存在异常数据。通过主键来保证,每条数据都会被保存至数仓,当然也包括被删除的数据,通过我们在删除的操作是通过删除标识,比如dr等,当dr=0的时候是未删除的状态,当dr=1的时候,我们就证明数据被删除,虽然保证了数据的完整性。但是,速度确实忒慢了,但是为啥会这么慢呢?其实是因为每一条插入更新的数据都要和历史数据去做对比,看数据库是否存在,然后再进行插入,当历史数据较多时候,比较的耗时就会比较长。因此此时,数据的耗时就表现在表输入数据读取时间+数据对比时间+数据更新插入时间

        因此相比较,表输入,插入更新的耗时较多表现在数据对比耗时和更新数据耗时。这也是为啥插入更新的效率是表输入的1/50。

        因此插入更新常用于,基础档案数据方面和历史数据增量较小的场景。

        总的来说,我们需要一种表输出组件的高效和插入更新的完整性,因为我们有没有办法,通过组件的整合来达到这个目的呢?

三、表输入的高效+插入更新的完整性

        1、思路

        前面我们讲到了,我们需要表输出的高效,又需要插入更新的完整性。因此我们需要定位数据耗时较长的环节。在传统的插入更新场景中,我们是一条一条的数据去对比,然后更新插入的。那我们能不能先一次性完成数据的对比,再一次性把数据进行插入呢。这时候我们的耗时有了保障,而且准确完整性也达到了要求。具体实现的作业思路如下图所示。

kettle开发-Day38-超好用自定义数据处理组件

         因此我们的作业最后包括,数据对比+数据插入。下面我们详细讲解下这两个组件。

        2、数据对比

        在这里,我们应用到合并记录的功能,我们用新旧数据合并,来标记对应数据是被删除、更新、新增、还是没变的来标记数据的状态。对应转换如下图所示。

kettle开发-Day38-超好用自定义数据处理组件

         合并记录的应用场景可以参考我的历史文章。

kettle开发篇-合并记录-Day26_kettle合并记录_他们叫我技术总监的博客-CSDN博客前言: 昨天我们讲了数据库相关操作,流查询,通过流查询我们进行等值查询,从而实现类似数据库内连接的效果,今天我们来讲一个类似的组件,叫合并记录,合并记录顾名思义就是将数据进行合并,具体来讲就是将两个不同来源的数据合并,这两个来源的数据分别为旧数据和新数据,该步骤将旧数据和新数据按照指定的关键字匹配、比较、合并。一、合并记录今天我们讲的连接是转换里面的第八个分类。连接是结果集通过关键字进行连..._kettle合并记录https://blog.csdn.net/qq_29061315/article/details/129401286        最后我们保持到数据库的效果是这样的。用另外一个表来保持对应每条记录的状态。

kettle开发-Day38-超好用自定义数据处理组件

                 这一步相当于我们将需要处理的数据,都整理好了

kettle开发-Day38-超好用自定义数据处理组件

        3、数据插入

         此时我们再利用,插入更新组件来处理少量的数据即可。这样在保证数据完整性的同时也保证了速度。       kettle开发-Day38-超好用自定义数据处理组件

         4、效果查看

        如下图所示,我们一共比较了4万多条数据,真正要处理的数据就55条左右,整个过程耗时在5秒左右, 平均时速是8000条/s,效率是插入更新的20倍,可以满足企业大部分的应用场景了。当然这些场景的基础都是能找到唯一性主键,如果我们是没有唯一性主键的情况,我们又该怎么去组合处理呢?下一节将讲解,另一种自定义必杀技,欢迎持续关注~

kettle开发-Day38-超好用自定义数据处理组件文章来源地址https://www.toymoban.com/news/detail-493842.html

到了这里,关于kettle开发-Day38-超好用自定义数据处理组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • kettle安装、MySQL数据库连接、报错处理

      目录 1.环境配置  2.安装kettle 3.连接数据库 4.连接数据库报错处理 报错一   报错二 前言:跟kettle斗智斗勇的一下午,下面是我踩过的一些坑,希望对大家在安装配置kettle时有所帮助,首先放一张我成功的截图:   在安装使用kettle时需要配置Java环境; jdk官网下载连接如下

    2024年02月07日
    浏览(58)
  • 【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理

    目录 数据清洗和处理 1.处理缺失值 1.1 删除缺失值: 1.2  填充缺失值: 1.3 插值: 2 数据类型转换 2.1 数据类型转换 2.2 日期和时间的转换: 2.3 分类数据的转换: 2.4 自定义数据类型的转换: 3 数据去重 4 数据合并和连接 数据清洗和处理         在数据清洗和处理方面,

    2024年02月09日
    浏览(68)
  • 使用ETLCloud强大的自定义规则实现自定义数据处理算法

    实时数据处理规则有什么作用 ? 在大数据中的实时数据采集、ETL批量数据传输过程中很多数据处理过程以及数据质量都希望实时进行处理和检测并把不符合要求的脏数据过滤掉或者进行实时的数据质量告警等。 在数据仓库建设过程中,每家企业的数据处理过程中肯定会有一

    2024年02月08日
    浏览(50)
  • 软件定义汽车场景中的数据流处理

    在当今快速发展的技术环境中,汽车行业正处于变革期。软件定义汽车(Software-Defined Vehicle, SDV)处于这场变革的前沿,为用户提供了无与伦比的互联、智能和数据洞察。SDV 会产生海量的数据,如何实时高效的处理这些数据成为当务之急。 本文将深入分析 SDV 数据的流处理技

    2024年02月13日
    浏览(42)
  • MySQL数据库——MySQL定义条件和处理程序

    在程序的运行过程中可能会遇到问题,此时我们可以通过定义条件和处理程序来事先定义这些问题。 定义条件是指事先定义程序执行过程中遇到的问题,处理程序定义了在遇到这些问题时应当采取的处理方式和解决办法,保证存储过程和函数在遇到警告或错误时能继续执行,

    2024年02月03日
    浏览(71)
  • Pytorch和Tensoflow对比学习第三周--Day 19-20: 数据加载和预处理

    这两天的学习重点是掌握在PyTorch和TensorFlow中进行数据加载和预处理的方法。正确的数据处理是训练有效模型的关键步骤。 数据加载和预处理: 学习了如何使用PyTorch的DataLoader和Dataset类以及TensorFlow的数据API来加载和预处理数据。 理解了数据标准化、转换和批处理的重要性。

    2024年01月20日
    浏览(59)
  • Matlab数据处理:用离散数据根据自定义多变量非线性方程拟合解析方程求取参数

    问题:已知xlsx表格[X,Y,Z]的离散取值,希望用  来拟合,用matlab求得[C1,C2,C3,C5,C6]的值 解答: 运行结果:  备注: 1.rsquare=0.8668认为接近1,拟合效果不错 2.fill函数的startpoint如何设置[C1,...C6]得到一个收敛点?(我找了没找到什么设置startpoint好方法,摸索用如下方法找到了一个

    2024年02月11日
    浏览(51)
  • 如何在Flink SQL中轻松实现高效数据处理:最佳实践揭秘Protobuf自定义格式

    目录 Flink SQL Protobuf Format设计要点 1. 引言 2. 为什么需要自定义Protobuf格式  3. 自定义Protobuf格式的

    2024年02月19日
    浏览(43)
  • SQL 中的 NULL 值:定义、测试和处理空数据,以及 SQL UPDATE 语句的使用

    什么是 NULL 值? NULL 值是指字段没有值的情况。如果表中的字段是可选的,那么可以插入新记录或更新记录而不向该字段添加值。此时,该字段将保存为 NULL 值。需要注意的是,NULL 值与零值或包含空格的字段不同。具有 NULL 值的字段是在记录创建期间留空的字段。 如何测试

    2024年02月05日
    浏览(52)
  • 低代码开发:数据处理与可视化

    低代码开发是一种快速、高效的应用开发方法,它通过简化和自动化开发过程,使非专业开发人员也能快速构建数据处理和可视化应用。本文将介绍低代码开发的定义、优势,并以数据处理与可视化为例,探讨低代码开发在这一领域的应用和价值。 随着大数据时代的到来,数

    2024年01月21日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包