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

时间:2017-03-20 16:08:23

标签: file text pentaho kettle pdi

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

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

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

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

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

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

你能帮忙吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

我认为你应该使用" Row denormalizer"添加一列以对SQL指令的所有行进行分组后(当遇到&#34 ;;"时,此新字段将更改)。为了得到";"在流中不要将其指定为分隔符。

答案 1 :(得分:0)

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

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

对于我们的目的,字段_seq是一次性的,因此我们使用Analytic-Query向前窥视一行,从而产生字段seq。 If-Field-Value-Is-Null会将无用的空值转换为0给我们。

现在让我们使用分组计算一系列group作为累计和 seq

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

这是一个数据流解决方案。你确定可以编写一个简单的FSM脚本,但为什么你会使用Kettle呢?