3

我想从数据库中获取所有表名,然后从表中获取所有行。所以我创建了一个这样的转换:

  1. 获取表名:添加数据库连接并将表名存储在名为“tablename”的输出字段中。
  2. 表输入:标记为“替换脚本中的变量”和“为每一行执行”。在“从步骤插入数据”中添加了第一步。SQL 是“SELECT * from ?”。
    我在网上阅读了很多教程,包括文档
    我的问题是它到处都说我是我的“?” 应替换为参数。但这不会发生。以下是日志:

    2013/06/22 03:33:25 - 获取表名。0 - 开始运行...
    2013/06/22 03:33:25 - Postgres 9.1.9 RO - 从 db 元数据中读取:9 个表名.
    2013/06/22 03:33:25 - 表 input.0 - 找到查询参数 = [stackexchange2]
    2013/06/22 03:33:25 - 表 input.0 - SQL 查询:SELECT * from ?
    2013/06/22 03:33:25 - 表 input.0 - 错误(版本 4.4.0-stable,buildguy 从 2012-11-21 16.02.21 构建 17588):意外错误
    2013/06/22 03:33 :25 - 表 input.0 - 错误(版本 4.4.0-stable,buildguy 从 2012-11-21 16.02.21 构建 17588):org.pentaho.di.core.exception.KettleDatabaseException:
    2013/06/22 03 :33:25 - 表 input.0 - 错误(版本 4.4.0-stable,buildguy 从 2012-11-21 16.02.21 构建 17588):执行 SQL 时发生错误:
    2013/06/22 03:33:25 - 表 input.0 - 错误(版本 4.4.0-stable,buildguy 从 2012-11-21 16.02.21 构建 17588):SELECT * from ?
    2013/06/22 03:33:25 - 表 input.0 - 错误(版本 4.4.0-stable,buildguy 从 2012-11-21 16.02.21 构建 17588):错误:“$1”处或附近的语法错误
    位置:16
    2013/06/22 03:33:25 - 表 input.0 - 错误(版本 4.4.0-stable,buildguy 从 2012-11-21 16.02.21 构建 17588):

我正在使用水壶 4.4。从这里下载了勺子客户端。

更新
我只想完成这项工作。我现在正在学习该工具,如果知道如何“?”会很好。作品。

4

2 回答 2

2

为了解决您的情况,我更喜欢使用作业,请查找 {kettle_intalation_folder_path}/examples/jobs/process all tables/Process all tables.kjb,因为您的案例是该示例的简化。

于 2013-06-25T02:57:42.307 回答
0

其实你可以做到这一点,你绝对会这样做。看看“元数据注入”。

您也不能参数化表名 - jdbc 不允许这样做。但是,如果您真的愿意,您可以使用 SQL 步骤而不是表输入并在字段中生成整个 SQL 字符串。虽然不会真的推荐。

如上所述,请进一步准确描述您要做什么。如果您只是迁移数据库而不对数据进行任何转换,即从一个数据库到另一个数据库,那么不要打扰 Kettle,因为这不是它的用途。

于 2013-06-22T16:32:59.433 回答