kettle 另类处理存储过程
今有一项目需要用kettle访问存储过程,经过测试发现使用【表输入】组件是无法完成的;
以下为测试存储过程
SET @sql =NULL;
SELECT
ROUND(COUNT(1)*0.1,0) INTO @sql
FROM emp;
SET @sql=concat('SELECT * FROM CD ORDER BY RAND() LIMIT ', @sql);
PREPARE stmt from @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
此存储过程是查询10%的数据,
第一个select语句:SELECT ROUND(COUNT(1)*0.1,0) INTO @sql FROM emp;是查询总数的10%,打印出来是一个数字.
into @sql,是打印出数据并赋值给@sql;
第二个select:SELECT * FROM CD ORDER BY RAND() LIMIT ', @sql,得到10%数据的详细信息。
在mysql数据库中执行以上存储过程,能够展示10%的数据,但把此sql赋值到【表输入】组件,发生错误,
如下:
通过了解,第一个sql,得到一个变量值,第二个sql,是把变量值用到自己的sql中;
kettle中怎么实现呢?
首先看结果:
第一步:打开【表输入】组件,把第一个sql,写到指定位置,其他不变;
第二步:选择【字段选择】组件,选择“countNumber”字段(变量值);
第三步:选择【表输入】组件,写入第二个sql,到指定位置,并配置信息;
结果:得到我们需要的数据。