Pentaho Kettle 中的“表存在”步骤

Posted

技术标签:

【中文标题】Pentaho Kettle 中的“表存在”步骤【英文标题】:"Table exists" step in Pentaho Kettle 【发布时间】:2015-11-22 16:05:55 【问题描述】:

我想使用“表存在”步骤来检查某个表是否存在,如果不存在则创建一个

我创建的转换(为了将数据从输入数据库复制到输出数据库)

Table Input ----->  Table exists  ----> Table output

“表存在”中的属性是

Step name:
connection:
Schema name:

Tablename field:
Result fieldname:

前三个很清楚。最后两个

“表名字段”是什么意思?这是一个带有有限选项的下拉列表,这些选项是输入表的列名。它应该是我要检查连接的表名吗?

什么是结果字段名?我该如何使用它?

【问题讨论】:

【参考方案1】: Tablename 字段是它检查的表。 Result fieldname 将包含 此步骤输出中的布尔结果标志。

如果不存在,则使用以下顺序检查并创建表。

表格输入 - 从数据库中获取数据。

生成行 - 指定 tablenamefield 作为名称,table_name_to_check 作为值,String 作为类型。稍后我们可以使用 Table exists 步骤中的字段tablenamefield

表存在 - 选择出现在表名字段下拉列表中的 tablenamefield。将任何名称写为Result fieldname,即result

Switch/Case - 在 case 值中键入 Y,在目标步骤中键入 Table Output。将execute SQL statement 设为默认目标步骤。要切换的字段名称是result

执行 SQL 语句 - 编写您的表创建 SQL 查询。

表输出 - 写入新表。

注意:如果您不想检查每一行的表是否存在。您可以使用作业并在第一次转换中检查表是否存在,并在第二次转换中检查表输入和输出步骤,我建议这样做以提高性能。

【讨论】:

感谢您的回复。在我的勺子里,表格输入不能跳到生成行 有什么错误吗?如果不是,您可以在表输入中的查询中生成一个常量字段,例如 SELECT field1, field2, 'tablename' as tablenamefield from table。这样您就不需要使用 Generate Rows 步骤【参考方案2】:

Tablename 字段是包含您要检查的表的名称的字段。如果您只想检查单个表,则只需要在其中一个字段中包含表名的单行。

Result fieldname 是步骤将添加到步骤输出的新字段的名称。该新字段包含检查结果。这是一个boolean 字段,您可以在以后的步骤中使用它,例如将此行发送到创建表的分支中。如果表存在则字段值为true,如果表不存在则为false

【讨论】:

感谢您的回复。我不允许填写我要检查的表的名称,它是一个包含有限选项的下拉列表,这些选项是我要检查的表的列名。是否有可能我以错误的方式连接了这些步骤? 没有。这就是 ETL 步骤通常的工作方式——它们从字段中获取参数。因此,您的“检查表”步骤将针对转换中的每一行执行,并从其输入中的一行接收表名称。您不能在步骤中手动输入字段名称。

以上是关于Pentaho Kettle 中的“表存在”步骤的主要内容,如果未能解决你的问题,请参考以下文章

在 Pentaho Kettle 中的步骤初始化之前测试数据库连接?

pentaho dpi-5.3(kettle)中的mongodb源代码在哪里?

Pentaho Kettle insert 步骤的错误处理

Pentaho - 如何根据 Kettle 属性文件设置工作转换

在 Pentaho Kettle ETL 步骤中分发标签有啥作用?

带有参数化表输入的 Pentaho Kettle 映射