首页 > 数据库 >kettle从入门到精通 第四十五课 ETL之 kettle redis

kettle从入门到精通 第四十五课 ETL之 kettle redis

时间:2024-02-21 21:46:12浏览次数:28  
标签:info 第四十五 name get 代码 kettle redis jedis

1、kettle 9.3/9.4 spoon客户端中默认是没有redis步骤的,首先想到在kettle的插件市场进行下载redis步骤。

 2、可能因为网络原因,直接下载失败了。索性放弃redis原有插件步骤,改为自己通过java代码进行实现,(有java基础的可以通过java代码步骤结合自定义jar包实现一切功能)。

 3、将jedis-2.10.2.jar(jedis版本最好和jdk1版本匹配) 放到kettle的lib目录下,重启spoon客户端。

步骤【生成记录】生成一笔测试数据,步骤【Java代码-redis-set】往redis里面写数据,步骤【Java代码-redis-get】从redis读取数据,如下图所示。

 4、步骤【java代码-redis-set】实现逻辑如下:

 代码中import 包时,一定要放到最顶部。下面代码中标红的部分为关键代码,其他为模版代码。

import redis.clients.jedis.Jedis;

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

    /* TODO: Your code here. (Using info fields)

    FieldHelper infoField = get(Fields.Info, "info_field_name");

    RowSet infoStream = findInfoRowSet("info_stream_tag");

    Object[] infoRow = null;

    int infoRowCount = 0;

    // Read all rows from info step before calling getRow() method, which returns first row from any
    // input rowset. As rowMeta for info and input steps varies getRow() can lead to errors.
    while((infoRow = getRowFrom(infoStream)) != null){

      // do something with info data
      infoRowCount++;
    }
    */
  }

  Object[] r = getRow();

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


Jedis jedis = new Jedis("localhost", 6379);
// 设置键值对
jedis.set("name", "Java小金刚");
// 关闭连接
jedis.close();

  // 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);

  */
  // Send the row on to the next step.
  putRow(data.outputRowMeta, r);

  return true;
}

 

 5、步骤【java代码-redis-get】实现逻辑如下:

 

 代码中import 包时,一定要放到最顶部。下面代码中标红的部分为关键代码,其他为模版代码。

import redis.clients.jedis.Jedis;

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

    /* TODO: Your code here. (Using info fields)

    FieldHelper infoField = get(Fields.Info, "info_field_name");

    RowSet infoStream = findInfoRowSet("info_stream_tag");

    Object[] infoRow = null;

    int infoRowCount = 0;

    // Read all rows from info step before calling getRow() method, which returns first row from any
    // input rowset. As rowMeta for info and input steps varies getRow() can lead to errors.
    while((infoRow = getRowFrom(infoStream)) != null){

      // do something with info data
      infoRowCount++;
    }
    */
  }

  Object[] r = getRow();

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


Jedis jedis = new Jedis("localhost", 6379);
// 获取键值对
String name = jedis.get("name");

// 关闭连接
jedis.close();


  // 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);

  */
  get(Fields.Out, "name").setValue(r, name);
  // Send the row on to the next step.
  putRow(data.outputRowMeta, r);

  return true;
}

 

 

标签:info,第四十五,name,get,代码,kettle,redis,jedis
From: https://www.cnblogs.com/zjBoy/p/18024721

相关文章

  • Redis实现分布式锁
    方案1:spring-integration-redis组件使用spring-integration-redis组件privatestaticvoidtryLock(){LettuceConnectionFactoryconnectionFactory=createConnectionFactory();RedisLockRegistrylockRegistry=newRedisLockRegistry(connectionFactory,"te......
  • redis
    安装环境与工具yum-yinstallwgetvimtclgccmake下载rediswget wgethttps://download.redis.io/releases/redis-7.0.12.tar.gz 上传 redis-7.0.12.tar.gz 到三台服务器 /data/redis-7.0.12.tar.gz 118.89.112.205 主服务器124.220.13.28  从服务器 ......
  • redis自学(2)IntSet
    IntSetIntSet是redis中set集合的一种实现方式,基于整数数组来实现,并且具备长度可变、有序等特征。  可能会有疑惑,int8_t的数组contents只有1个字节,怎么可能存的下数组,其实这里的contents存储的只是指向真正数组的指针。IntSet的取值范围大小,实际上是由encoding属性决定的......
  • redis
    RedisRedis是基于OpenSourceBSD协议,使用C语言编写的一种Key-Value(键值对)内存数据库 安装 工具 启动服务端redis-server/root/myredisconf/redis.conf-使用指定配置文件启动启动客户端连接redis-cli-aroot-p6379用密码和端口登录授权10大数据类型......
  • Redis
    RedisRedis是基于OpenSourceBSD协议,使用C语言编写的一种Key-Value(键值对)内存数据库安装工具启动服务端redis-server/root/myredisconf/redis.conf-使用指定配置文件启动启动客户端连接redis-cli-aroot-p6379用密码和端口登录授权10大数据类型......
  • redis
    RedisRedis是基于OpenSourceBSD协议,使用C语言编写的一种Key-Value(键值对)内存数据库安装工具启动服务端redis-server/root/myredisconf/redis.conf-使用指定配置文件启动启动客户端连接redis-cli-aroot-p6379用密码和端口登录授权10大数据类型1.String......
  • kettle从入门到精通 第四十四课 kettle 去重
     1、我们平常在写应用程序的时候,会有去重的业务场景,可以在数据库层面解决,也可以在内存层面解决。同样kettle也有去重的步骤【唯一行(哈希值)】和【去除重复记录】唯一行(哈希值):使用HashSet来删除重复行,只保留唯一的行。去除重复记录(UniqueRows):删除重复行,只保留唯一的行。这只......
  • 05 内存快照:宕机,Redis如何快速恢复?
    内存快照:指内存中的数据在某一个时刻的状态以文件的形式写到磁盘上,类似于照片。快照文件就称为RDB文件,其中,RDB就是RedisDataBase的缩写。两个关键问题:对哪些数据做快照?关系到快照的执行效率问题;做快照时,数据还能被增删改吗?关系到Redis是否被阻塞,能否同时正常处理请求......
  • 04 AOF日志:宕机,Redis如何避免数据丢失
    Redis的持久化主要有两大机制,即AOF(AppendOnlyFile)日志和RDB快照。Redis用于避免数据丢失的AOF方法数据库的写前日志(WriteAheadLog,WAL),在实际写数据前,先把修改的数据记到日志文件中,以便故障时进行恢复。AOF日志正好相反,是写后日志,Redis是先执行命令,把数据写入内......
  • redis自学(1) 动态字符串SDS
      字符串是redis最常见的数据结构,但redis并没有直接使用C语言的字符串,是因为C语言本身其实是没有字符串的,所谓的字符串其实是字符数组(Java语言中的字符串是一个对象),所以C语言的字符串有很多问题:①获取字符串长度需要通过运算C语言的字符串数组都是以’\0’结尾,这是一个字符......