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 属性文件设置工作转换