从表输出的文本文件输入字段动态生成DDL

时间:2017-05-09 22:29:10

标签: pentaho-data-integration

考虑以下三个文件:

1.csv [contains 3 fields: a, b, c] 2.csv [contains 4 fields: d, e, f, g] 3.csv [contains 2 fields: h, i]

我的任务是将所有三个文件加载到各自的表输出中。所以

File "*.csv" ->loads-> Table "*_csv"

我知道我可以使用"获取文件名"处理多个文件。步骤但是如何生成为每个文件创建目标表的DDL语句?我正在查看元数据注入步骤,但我不确定这符合我的需求。

有什么建议吗?

Pentaho Data Integration 7.0 Postgres RDS

1 个答案:

答案 0 :(得分:0)

您可以在下面的过程中动态创建表。此过程中唯一的问题是创建具有相同名称的表。玩这个代码。我在mysql中创建了这段代码。先决条件是您必须以串联形式传递字段名称,例如' col1,col2,col3'。

delimiter $$

create procedure dynamic_table(col_concat varchar(2000),out query1 varchar(1000))

开始

声明我是整数;

声明v_count int;

声明v_col varchar(100);

设置i = 1;

选择LENGTH(col_concat) - LENGTH(REPLACE(col_concat,',',''))+ 1进入v_count;

设置query1 =(选择concat('创建表格表',转换(i,签名),'('));

while(i< = v_count)

DO

开始

选择replace(substring_index(col_concat,',',i),',',' _')为v_col;

set query1 =(选择concat(query1,v_col,' varchar(1000),'));

设置i = i + 1;

端;

结束;

选择query1;

set query1 = replace(query1,substring(query1,length(query1)-1,1),')');

选择query1;

端; $$

示例运行:调用dynamic_table(' col1,col2,col3',@ query1)