0

考虑以下三个文件:

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 数据集成 7.0 Postgres RDS

4

1 回答 1

0

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

分隔符 $$

创建过程 dynamic_table (col_concat varchar(2000),out query1 varchar(1000))

开始

声明 i 整数;

声明 v_count int;

声明 v_col varchar(100);

设置 i =1;

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

set query1 =(select concat('create table table',convert(i,signed),'('));

而 (i<= v_count)

开始

选择替换(substring_index(col_concat,',',i),',','_') 到 v_col;

设置 query1 = (select concat(query1, v_col,' varchar(1000), '));

设置 i=i+1;

结尾;

结束时;

选择查询1;

设置查询1=替换(查询1,子字符串(查询1,长度(查询1)-1,1),')');

选择查询1;

结束;$$

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

于 2017-05-11T05:17:55.383 回答