Pentaho PDI/Kettle 从文本文件中读取多行

Posted

技术标签:

【中文标题】Pentaho PDI/Kettle 从文本文件中读取多行【英文标题】:Pentaho PDI/ Kettle read multiple lines from text file 【发布时间】:2017-03-20 16:08:23 【问题描述】:

我有一个包含多个 SQL 语句的 SQL 文件,我需要使用 Kettle / Pentaho PDI 6.1.0 从文本文件中读取它们。

所有语句都用分号分隔,但是每个语句可以跨越多行:

CREATE TABLE Staging01 AS
SELECT ....
WHERE  ...;

UPDATE Staging01
SET ....
WHERE ...;

我需要解析文件,将每个 sql 语句视为一个字符串。

我尝试使用文本输入文件步骤,但它总是逐行读取数据。

你能帮忙吗?

谢谢。

【问题讨论】:

采取 CSV 输入步骤。并指定您正在使用的分隔符。它会起作用的。 【参考方案1】:

我认为您应该在添加一列以对 SQL 指令的所有行进行分组后使用“行非规范化器”(遇到“;”时这个新字段会改变)。也得到“;”在流中不要将其指定为分隔符。

【讨论】:

【参考方案2】:

Text-File-Input 没问题,只需将每一行读取为单个字段,例如选择 FIXED 模式和足够大的字段大小以创建名为 line 的字段。不要忘记在右侧启用修剪。

根据您的示例输入,我们的想法是删除空行(这是 TFI 的默认设置)并连接构成语句的行。我们知道组中的最后一行以分号结尾。 让我们使用 User-Defined-Java-Expression 创建一个序列_seq line.endsWith(";") ? 1 : 0

字段_seq 对我们来说是一次性的,因此我们使用分析查询向前查看一行,从而生成字段seq。 If-Field-Value-Is-Null 将把那个无用的 null 值变成我们的 0。

现在让我们使用 Group-By 来计算一个系列 group 的累计和 seq.

最终我们可以使用 Group-By 和 group 字段将 line 与空格字符连接起来。

这是一种数据流解决方案。你当然可以编写一个简单的 FSM,但你为什么要使用 Kettle?

【讨论】:

以上是关于Pentaho PDI/Kettle 从文本文件中读取多行的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 上运行 PDI Kettle - Mongodb 步骤缺少插件

Windows下Kettle定时任务执行并发送错误信息邮件

PDI Kettle - 如何在 MongoDB 输出中为查询匹配指定 ObjectId

比较 PDI 中的文件名

蒙德里安有本地客户吗? [关闭]

Pentaho 数据集成转换,从 csv 文件加载字段(Java API)