【问题标题】:PDI parameter in select statement选择语句中的 PDI 参数
【发布时间】:2014-07-07 03:03:43
【问题描述】:

我想问一个关于 Pentaho 的问题。我正在使用Pentaho data Integration(水壶)。我想在 select 语句中使用参数。我搜索了各种论坛并没有找到任何解决方案。我的问题是我想从不同的数据库中获取结果。如何使用参数从 2 个或更多数据库中获取数据? 我有两个转变。

  1. select catalog_name from information_schema.schemata where catalog_name like "%db"
  2. select data_name from ${catalog_name}.dbo.database_name

有错误提示Syntax error or access violation

【问题讨论】:

  • 如果您指定别名,那么您的查询必须是这样的,从 information_schema.schema 中选择 schemata.catalog_name where schemata.catalog_name like "%db" 或者如果不是然后从 information_schema 中选择 catalog_name where catalog_name like “%db”
  • 感谢@WorkingHard。我也遇到了使用变量名的问题。

标签: html sql database pentaho kettle


【解决方案1】:

以下解决方案通过调用第一个 SQL 语句并使用该语句的结果集元素作为参数来调用第二个 SQL 语句来模拟您的任务。

在第二个表格输入中,? 用作参数的占位符。 Kettle 似乎按顺序映射传入字段。在这种情况下,字段schema_name 是第一个字段,因此它将分配给第一个参数。任何额外的传入字段都将被相应地映射。请注意,传入字段的数量和 SQL 语句中使用的参数数量必须匹配。否则会引发运行时错误。另请注意,我的解决方案中的 ? 可能特定于 MySQL 语法。根据您的 SQL 语句中的命名模式,我假设您使用的是 MS SQL Server。所以实际的占位符可能会有不同的命名。

第二个表格输入必须配置如下:

请注意,在这种情况下,不需要标记在脚本中替换变量,因为参数不被视为变量。但是,Insert data from stepExecute for each row 条目必须正确设置。

【讨论】:

    【解决方案2】:

    听起来你已经正确设置了。您有一个作业,对查询 1 进行了第一次转换,并将输出发送到作业结果(行结果)。然后,为找到的每个模式运行一次转换 #2,将模式名称作为参数或变量向下传递。

    如果其中有任何不正确,请说明您实际在做什么。

    我猜您唯一错过的就是检查 Replace variables in script 框以获取转换 2 中的表格输入。

    如果不是这样,请添加更多详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-01
      • 2016-05-10
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 2020-08-19
      相关资源
      最近更新 更多