我有一个包含多个SQL语句的SQL文件,我需要使用Kettle / Pentaho PDI 6.1.0从一个文本文件中读取它们。
所有语句都使用分号分隔,但是每条语句可以跨越多行:
CREATE TABLE Staging01 AS
SELECT ....
WHERE ...;
UPDATE Staging01
SET ....
WHERE ...;我需要解析该文件,将每个sql语句作为一个单独的字符串。
我试着一步一步地使用文本输入文件,但它总是逐行读取数据。
你能帮上忙吗?
谢谢。
发布于 2017-04-05 16:21:48
我认为你应该在添加一列之后使用"Row denormalizer“来对SQL指令的所有行进行分组(这个新字段会在遇到";”时发生变化)。要在流中也获取";“,请不要将其指定为分隔符。
发布于 2017-04-16 18:37:36
文本-文件-输入可以,只需将每一行作为一个单独的字段读取,例如选择固定模式和足够大的字段大小来创建一个名为line的字段。不要忘记在右侧启用修剪。
给定您的样例输入,想法是删除空行(这是TFI的默认设置),并连接组成语句的行。我们知道组中的最后一行是以分号结尾的。让我们使用用户定义的Java表达式line.endsWith(";") ? 1 : 0创建一个序列表达式
对于我们的目的来说,字段查询是一次性的,所以我们使用Analytic- _seq向前看一行,得到一个字段seq。If-Field- value -Is-Null将为我们将无用空值转换为0。
现在,让我们使用Group-By来计算作为seq的累加和的系列group。
最后,我们可以使用Group-By和group字段将line与空格字符连接起来。
这是一个数据流解决方案。你当然可以编写一个简单的FSM脚本,但是为什么你要使用Kettle呢?
https://stackoverflow.com/questions/42908520
复制相似问题