## 本章介绍一些kettle技巧和相关的问题解决方案
kettle数据抽取中文乱码(一)
==spoon.bak文件找到 if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m" "-XX:MaxPermSize=256m"
这个后面添加 `"-Dfile.encoding=UTF-8"==
if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms1024m" "-Xmx2048m" "-XX:MaxPermSize=256m"
kettle处理中文乱码问题(二)
在kettle脚本相关地方增加一个java组件处理脚本,java组件代码如下
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
if (first) {
first = false;
}
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
r = createOutputRow(r, data.outputRowMeta.size());
String sickname = get(Fields.In, "SICKNAME").getString(r);
if(sickname != null && !"".equals(sickname)) {
try {
sickname = new String(sickname.getBytes("ISO-8859-1"), "GBK");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
get(Fields.Out, "SICKNAME").setValue(r, sickname);
putRow(data.outputRowMeta, r);
return true;
}
详细脚本:
[脚本处理中文乱码](http://note.youdao.com/noteshare?id=c0e5290d9830f8b3b87c03a3b46b6497)
cmd运行test.kjb脚本
E:
cd E:softwareserverssqlkettle7.1.0data-integration
Kitchen /file:E:softwareserverssqlkettle7.1.0datadbjob.kjb /level:Basic>C:UsersthinkpadDesktopkettlekettle-job.log
性别1,2转换为男女,用javaScript脚本
//Script here
//loop through the actual row
for (var i=0;i<getInputRowMeta().size();i++) {
// Grab the metadata for this value
var valueMeta = getInputRowMeta().getValueMeta(i);
if (valueMeta.getName().equals("SEX")) {
row[i]=replace(row[i],'1','男');
row[i]=replace(row[i],'2','女');
}
}
date类型和string类型相互转换,格式化date
==用字段选择:如下图==
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CO0gzN0YzY0YGM4YWNklDN5UDN1cTN4EDZiF2M4QWOj9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)