Testing 在pentaho pdi中从输入表捕获执行的sql

Testing 在pentaho pdi中从输入表捕获执行的sql,testing,pentaho,Testing,Pentaho,我正在使用pentaho进行数据迁移测试。我设置了一个“表输入”步骤,其中“表输入”中的查询的许多部分都是变量。我一直在寻找一种在运行时执行查询后捕获该查询的方法。 我想知道sql是否有任何特定的系统日志变量,或者它是否与元数据有关。需要帮助!谢谢也许以下方法会有所帮助: 我们假设转换读取CSV文件以获取SELECT语句的动态部分(例如列),并使用它设置变量columns 第二个转换使用此变量生成SELECT语句,并将其存储到变量sql\u语句中 在主转换中,我们使用${sql_s

我正在使用pentaho进行数据迁移测试。我设置了一个“表输入”步骤,其中“表输入”中的查询的许多部分都是变量。我一直在寻找一种在运行时执行查询后捕获该查询的方法。
我想知道sql是否有任何特定的系统日志变量,或者它是否与元数据有关。需要帮助!谢谢

也许以下方法会有所帮助:

  • 我们假设转换读取CSV文件以获取SELECT语句的动态部分(例如列),并使用它设置变量
    columns

  • 第二个转换使用此变量生成SELECT语句,并将其存储到变量
    sql\u语句中

  • 在主转换中,我们使用
    ${sql_statement}
    作为表输入的SELECT语句,并将数据写入输出文件(这就是所谓的业务流程)。从同一个输入,我们将输出复制到另一个路径。在这里,我们将当前时间添加为一个字段(使用元素“Get system data”),并添加生成的SQL语句,将它们作为笛卡尔乘积连接起来,并通过
    SQL\u语句对结果进行分组。这样我们就可以计算第一次和最后一次使用该语句的时间。这些结果将写入文本文件

  • 我们最不需要的是一个按顺序调用三个转换的作业

这是一个示例输出:

sql_statement;min_time;max_time
SELECT my_column FROM test_table;2014/05/08 00:41:21.143;2014/05/08 00:41:21.144

谢谢你,马库斯!我做了一些类似的事情。 它起作用了。令人惊叹的。
我从保存查询的表字段中收集了部分查询,并用javascript形成了完整的查询。之后,完整查询将作为参数发送给转换,转换将运行并记录查询

水壶有一些自动记录机制,您可以使用。恐怕你得更详细地描述你的要求。此外,我们还需要知道“表输入”中查询的许多部分是变量,这是什么意思。我只想捕获执行的sql并将该sql插入到我自己的自定义日志表中。您是否考虑使用动态生成的sql语句?据我所知,Kettle中的SQL语句通常是静态的;因此,这个column_name变量将从以前的转换中设置。现在,当这个sql被执行时,我需要一种只捕获那个sql的方法。在这种情况下,扩展字符串就足够了,不是吗?