如何从pentaho kettle step Input table中的结果集获取所有结果?
How to get all results from results set in pentaho kettle step Input table?
我有两个简单的转换步骤。第一步(输入 table)对数据库进行查询,第二步(Java class)处理结果。 2 步需要很多时间(在我的情况下这是正常的)但是 1 小时后我得到关闭结果集的错误
服务器已关闭连接。如果结果集包含大量数据,服务器希望客户端能够相对快速地读取结果集。在这种情况下,请考虑增加 net_wait_timeout 会话变量。 / 更快地处理结果集(查看流式结果集文档了解更多信息)
2017/10/02 13:12:06 - 获取数据单元格 .0 -
我认为应该有一些中间步骤(或其他一些选项)来相对快速地从第一步中获得所有结果。你能帮我吗?
我猜您的第 2 步锁定的 table 与第 1 步中的相同。
这是 PDI 高效架构的缺点之一。所有步骤同时启动,最快产生结果的人将手交给下一步。使用这种 "do the quickest first" 策略,当有很多求和或平均值连接时,您有时会击败 sql 优化器本身 (pro rata)。
这方面的主要陷阱是读取 table,进行一些转换并在选中 truncate table
的同一个 table 上重写结果。在这种情况下,t运行cate 在输入 table 的 select 之前几毫秒完成,这会启动无限死锁。时间长了你决定干掉这个ETL,但是那个时候数据已经丢失了。
解决方案:
最佳实践 是使用 PDI 步骤重写 step2,而不是使用现成的 java class。这是我在 long 运行 上强烈推荐的方法,但你可能有一些原因不遵循它。
如果你的table很小,你可以在输入和输出之间放一个blocking step
。
如果你table很大,你可以用一个sort row
步骤代替阻塞步骤。您并不是真的想要排序,但 PDI 需要查看最后一行以确保排序完成,然后再将结果提供给下一步。排序会把数据切到硬盘的临时块中,你可以对tmp数据的存储位置和方式有一定的控制。
您可以将您的 table 复制到 tmp table(或文件)中,然后处理并删除它。使用作业来执行此操作,因为在作业中,与转换不同,过程是顺序的。
我有两个简单的转换步骤。第一步(输入 table)对数据库进行查询,第二步(Java class)处理结果。 2 步需要很多时间(在我的情况下这是正常的)但是 1 小时后我得到关闭结果集的错误
服务器已关闭连接。如果结果集包含大量数据,服务器希望客户端能够相对快速地读取结果集。在这种情况下,请考虑增加 net_wait_timeout 会话变量。 / 更快地处理结果集(查看流式结果集文档了解更多信息) 2017/10/02 13:12:06 - 获取数据单元格 .0 -
我认为应该有一些中间步骤(或其他一些选项)来相对快速地从第一步中获得所有结果。你能帮我吗?
我猜您的第 2 步锁定的 table 与第 1 步中的相同。
这是 PDI 高效架构的缺点之一。所有步骤同时启动,最快产生结果的人将手交给下一步。使用这种 "do the quickest first" 策略,当有很多求和或平均值连接时,您有时会击败 sql 优化器本身 (pro rata)。
这方面的主要陷阱是读取 table,进行一些转换并在选中 truncate table
的同一个 table 上重写结果。在这种情况下,t运行cate 在输入 table 的 select 之前几毫秒完成,这会启动无限死锁。时间长了你决定干掉这个ETL,但是那个时候数据已经丢失了。
解决方案:
最佳实践 是使用 PDI 步骤重写 step2,而不是使用现成的 java class。这是我在 long 运行 上强烈推荐的方法,但你可能有一些原因不遵循它。
如果你的table很小,你可以在输入和输出之间放一个
blocking step
。如果你table很大,你可以用一个
sort row
步骤代替阻塞步骤。您并不是真的想要排序,但 PDI 需要查看最后一行以确保排序完成,然后再将结果提供给下一步。排序会把数据切到硬盘的临时块中,你可以对tmp数据的存储位置和方式有一定的控制。您可以将您的 table 复制到 tmp table(或文件)中,然后处理并删除它。使用作业来执行此操作,因为在作业中,与转换不同,过程是顺序的。