kettle随记

  1. 注意排序,作为流处理,排序很重要,想要体会排序,可以理解一下普通排重和 hash 排重的区别。普通排重,是需要排序后线性处理,排重的时候只需要比较相邻的就行了,不许要保存状态
    hash排重,对需要排重的字段做 hash,比较 hash 值,所以不需要排序。kettle 作为一个流处理工具,还是排序后做处理好一点,很多时候会避免掉很多的莫名其妙,其实是自己理解补充的问题。
  1. kettle行转列kettle 中提供了行转列,列转行的控价,但是适用性不高,需要特定的不是特别好用,在 kettle 的例子里面有一个用来处理的 JavaScript 的脚本 JavaScript - create new rows.ktr,可以用来坐行转列。’’’if (groupsField!=null)
    {
    var groups = groupsField.split(“,”);for (i=0;i<groups.length;i++)
    {
    newRow = createRowCopy(getOutputRowMeta().size());
    var rowIndex = getInputRowMeta().size();}
    }var subgroup = “”;
    var ignore = “Y”;
    ‘’’这里把需要转为列的字段,创建新的列和一个标志位,然后按照标志位来过滤掉旧的数据,得到一个行转列的列表。

    1
    2
    3
    4
    5
    newRow[rowIndex++] = trim( groups[i] );
    newRow[rowIndex++] = "N";

    putRow(newRow);

  2. 列转行
    列转行和行转列一样,kettle 提供的都是一个分组的功能,时候,需要将多列转换成一行。
    首先将需要的多个字段连接为一个字段,然后利用分组的功能将这一个字段使用连接符连接在一起,形成需要的一行数据。

  3. 更新和补充
    数据更新和补充,其实是一回事,比如有两个数据源,新的和旧的。需要用新的数据安装指定的 key 替换掉旧的数据,或者对旧数据做补充。
    首先对两列数据都按 key 排序 然后合并记录可以得到需要的数据。

  4. join Row
    在转换中,kettle似乎不能定义全局变量(也行是我没有找到),很多输入后需要定制输出文件,没有全局变量的话,需要在流程中把输出路径一直保持在流中。
    这里其实可以在最初的步骤中将路径计算出来后,在需要的时候使用字段选择来选择出路径,然后用join Row将路径连接到尾部。(没有在列表中找到 join row 这个控件,可以到 Join Rows - adding fields to a stream.ktr 里面拷贝一个)

作者

张巍

发布于

2016-06-14

更新于

2016-06-14

许可协议

评论