如何使用Pentaho数据集成使用(从表中选择*到## temp)语法(对于MS SQL)创建临时表

时间:2014-03-03 07:50:27

标签: pentaho

当我在“执行行脚本”步骤中使用上述语法时...它显示成功,但未创建临时表。 Plz帮助我解决这个问题。

1 个答案:

答案 0 :(得分:2)

是的,你所看到的行为正是我所期待的。它在TSQL提示符下运行正常,在转换中不会抛出任何错误,但转换完成后表不存在。

这里的问题是PDI转换的执行模型。运行转换时,每个步骤都有自己的执行线程。在启动时,任何需要数据库连接的步骤都有自己唯一的连接。处理完成后,所有步骤都与DB断开连接。这包括定义临时表的连接。一旦发生这种情况(定义连接超出范围),临时表就会消失。

注意,这意味着在转换(而不是作业)中,您不能假定任何事情的特定顺序(没有Blocking Steps)。

我们仍然没有很多关于你要对这个临时表做什么的细节以及你如何使用它的数据,但我怀疑你希望它的内容在你的变换之外保持不变。在这种情况下,您有一些选项,但像这样的全局临时表根本不起作用。

想到的选项:

  1. 将临时表转换为永久表。这是最简单的 解;你基本上是在制作一个临时表,加载一个 Table Output步骤(或其他),然后在其他转换中使用Table Input步骤阅读它。
  2. 将表内容写入临时文件,其中包含Text File OutputSerialze to File步骤,然后从中读取 其他变形。
  3. 将行存储在内存中。这涉及将变换包装在一个 作业,并使用Copy Rows to ResultsGet Rows from Results步骤。
  4. 这些方法中的每一种都有其自身的优点和缺点。例如,在内存中存储行将比写入磁盘或网络更快,但内存可能会受到限制。

    根据您正在做的事情,您可能需要的另一个步骤是ETL Metadata Injection步骤。此步骤允许您在许多情况下动态地将元数据从一个转换移动到另一个转换。有关每种方法的工作原理,请参阅docs

    如果您想在此处获得进一步的帮助,或者我做出了错误的假设,请编辑您的问题并添加尽可能详细的信息。