本文使用的postgresql-12,cassandra 3.x,pentaho kettle为9.1版本,转换图如下图所示:
最初的转换只有pg的表输入节点以及Cassandra output输出节点组成,但是postgresql表中的uuid字段到了kettle时却成了字符串类型,导致
kettle将postgresql数据导入cassandra提示错误: 字段 "id" 的类型为 uuid, 但表达式的类型为 character varying,com.datastax.driver.core.exceptions.InvalidQueryException: UUID should be 16 or 0 bytes (36)的异常而导致数据传输失败,解决这个问题加入一个“JavaDaima“节点即可,具体转换如下所示:
其中“Java代码”节点脚本内容如下所示:
代码为:
import java.util.*;
private String str1;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
Object[] r = getRow();
// If the row object is null, we are done processing.
if (r == null) {
setOutputDone();
return false;
}
//获取id列
str1 = get(Fields.In, "id").getString(r);
// 创建输出行,
Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());
//将字符串转换为uuid
UUID one = UUID.fromString(str1);
//更新id列为uuid类型
get(Fields.Out, "id").setValue(outputRow, one);
putRow(data.outputRowMeta, outputRow); // 输出行
return true;
}