• 用户名脱敏
    在给用户名进行脱敏时,通常情况下我们使用正则表达式或者其他方法,但是正则表达式在kettle中不容易实现动态脱敏(即将一个用户名除去首字符和尾字符都替换为***)
    举个例子:
CSDN 脱敏后为 C**N   //4-2 = 2 个 *
abcdefg 脱敏后为 a*****g    //7-2 =5 个 *
即在中间输出:(字符串的长度-2)个   *
  • 时间模糊
    将时间字段模糊至年月日,如将2013-9-30 07:41:00模糊为2013-9-30

步骤:
1. 数据库中各个字段以及内容
在这里我们可以看到爬取时间后面有时分秒,用户名也是完整显示
在这里插入图片描述
2. 添加JAVA代码进行用户名动态脱敏

代码位于Processor部分,红框中的代码是动态处理的部分,在这里插入图片描述

import java.util.*;
import java.util.Collections;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
	if (first){
	  first = false;

	}

	Object[] r = getRow();

	if (r == null) {
	  setOutputDone();
	  return false;
	}

	// It is always safest to call createOutputRow() to ensure that your output row's Object[] is large
    // enough to handle any new fields you are creating in this step.
    r = createOutputRow(r, data.outputRowMeta.size());
	
    /* TODO: Your code here. (See Sample)
    
    // Get the value from an input field
    String foobar = get(Fields.In, "a_fieldname").getString(r);

    foobar += "bar";
    
    // Set a value in a new output field
    get(Fields.Out, "output_fieldname").setValue(r, foobar);
	
	*/
	String id = get(Fields.In, "评论者ID").getString(r);//获取输入
	int len = id.length();
	
	if (len == 1) {
		id = "*";
		}
		else if (len == 2) {
			id = id.charAt(0)+"*";
		}
		else {
			String replace = String.join("", Collections.nCopies(len-2, "*"));
		    id = id.charAt(0)+replace+id.charAt(len-1);
		}
	
	get(Fields.Out, "评论者ID_mask").setValue(r, id);
	// Send the row on to the next step.
    putRow(data.outputRowMeta, r);//输出

	return true;
}

3. 使用字段选择实现时间模糊
在这里插入图片描述
4.添加excel输出,输出到xls文件
在这里插入图片描述
5.连接控件
在这里插入图片描述
6.启动并输出结果
在这里插入图片描述
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐