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 步骤缺少插件