执行行SQL脚本无法读取.sql文件。我收到了这个错误

时间:2018-02-01 16:30:06

标签: pentaho pentaho-spoon pentaho-data-integration

2018/02/01 11:20:00 - 执行行SQL脚本0 - 我们在输入流中找不到字段[C:\ Users \ abc \ Documents \ xyz \ query \ record.sql]!

我的步骤涉及 -

  1. 获取变量 - 输入
  2. 执行行SQL脚本 - 我尝试读取查询文件
  3. 文本文件输出
  4. 在执行行SQL脚本中,我在SQL fieldname中给出了C:\ Users \ abc \ Documents \ xyz \ query \ record.sql。

    修改

    澄清,我希望作业能够读取查询(来自文件)并自行输出文本(运行并输出选择查询结果)。

2 个答案:

答案 0 :(得分:2)

我正在从执行行SQL脚本步骤中的两个配置选项的文档中复制/粘贴说明:

  

SQL字段名称:包含要执行的SQL的字段,或者可选地指定包含要执行的SQL的文件的路径

  

从文件中读取SQL :如果选中,则SQL字段名选项指定包含要执行的SQL的文件,否则SQL字段名选项指定要执行的实际SQL。 (自5.0起可用)

因此,您无法在 SQL字段名称选项中指定文件路径,但可以从流中指定包含所需sql的文件路径的字段。否则,您应在此选项中定义包含sql文本的字段。

希望它有所帮助。

编辑1

由于您需要从文件中执行选择查询,我建议您执行步骤Dynamic SQL row,如下图所示。

how dynamic sql row works

我认为它会完成这项工作。

编辑2

以下只是执行动态sql。首先,您需要将sql查询加载到流中。之后,将为每个sql执行一个作业。在此作业中,设置包含sql查询的变量,然后执行转换。这个转换基本上是一个Input Table步骤,用以前的set sql变量动态填充sql框。

pentaho dynamic sql execution

现在我认为这就是你要找的东西。希望它有所帮助。

答案 1 :(得分:0)

要读取SQL表,请使用步骤Table input,然后将查询复制粘贴到大文本区域。

请注意,除非您的查询中有复杂的连接,否则您很少需要导入sql脚本,这要归功于非常方便的Get SQL Statement按钮。

从没有参数的select语句开始。一旦它工作,用$ {variable}替换变量,并勾选Replace variable in script复选框。 (警告由于java SQL Prepared Statement存在一些限制,例如,表名中可能没有变量)。

如果您想从文件中获取脚本,请首先阅读列中包含Table input的文件,然后在Insert data from step的{​​{1}}中选择此列。

如果您的文件中仍有可变参数,或者是您要选择的表的名称,请使用Table inputModified Javascript或任何其他步骤来替换变量他们重视,并通过Regex evaluator将结果SQL脚本提供给表。

如果您要阅读一堆file.sql,请不要忘记查看Insert data from step按钮。

希望这有帮助。