动态表名称生成导致“找不到表”

Posted

技术标签:

【中文标题】动态表名称生成导致“找不到表”【英文标题】:Dynamic Table name generation results in "Table Not found" 【发布时间】:2021-10-26 20:39:11 【问题描述】:

使用 Pentaho 和 Spoon。我有一个变换的组合,

    创建一个新的表名变量 (TABLENAME)

在单独的转换中,我尝试使用此表名

    第一步创建列名列表(生成行步骤) 第二步使用这些表行和上一个转换中的表名(表输出步骤)

当我单击表输出步骤上的 SQL 按钮时,它会返回正确的创建表语句。 (虽然它不会替换占位符,但它确实返回一个 CREATE TABLE....)

当我尝试在线运行这两个转换时,它抱怨我生成的名称的表不存在。当 sql 按钮返回 CREATE 时,它似乎必须尝试插入到这个生成的表中。

如何让 pentaho 创建一个将生成的名称存储在变量中的表?

【问题讨论】:

【参考方案1】:

Table Output 步骤不会创建表,SQL 按钮就像一个帮助按钮,它只允许您复制 DML 以创建表并将其粘贴到您想要运行它的任何位置,但该步骤不会'不运行创建表顺序。

在插入表格之前,您需要一个单独的转换或作业来创建表格。对于作业,有一个运行 SQL 语句的操作,一个类似的转换步骤。

【讨论】:

谢谢。这有帮助!我觉得这些类型的 DDL 活动没有内置到产品中,这很烦人也很沮丧,但我会接受它的本来面目。 嗯,他们添加了按钮作为帮助,但是 Pentaho 它并不特定于任何数据库,所以生成的 DDL 非常基本,每个数据库都有特定的命令来微调表的管理,索引的创建、序列等,因此提供的 DDL 只是正确数据库管理的起点 此外,每次运行转换时创建表并不常见,通常是在开发过程中创建一次表,然后每次运行转换时向表中添加数据,或者在添加此执行的信息之前截断表。在某些情况下,每次运行转换时创建临时表是有效的,但是一旦不需要它们,您将需要一个单独的逻辑来删除这些表,或者您可能希望在 Pentaho 中创建和记录数据模型,所以这个转换只需要运行一次。

以上是关于动态表名称生成导致“找不到表”的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft jet 数据库引擎找不到表

使用 Hibernate 和 HSQLDB 找不到表

Hibernate、Spring 和 HSQL:找不到表异常

使用 h2 进行 Spring Junit 测试 - 找不到表

使用 h2 数据库找不到表? login 是在 logcat 中找不到的表名?

iphone FMDB 找不到表