根据文本文件输入元数据制作数据库插入
Make a DB INSERT based on Text File Input metadata
我正在开发 ETL,必须执行一些例程来监视它。
开始时,我必须在数据库上进行 INSERT 以创建一条记录,告知文件名和启动进程日期时间。此查询将 return 记录的 PK,并且必须存储它。当该文件的 ETL 完成时,我必须更新该记录,通知 ETL 成功完成及其结束过程日期时间。
我使用文本文件输入来查找与其正则表达式匹配的文件,并将其 "Additional output fields" 添加到流中。但是我找不到一个只对第一条记录 运行 并且会为 INSERT 执行 SQL 命令的组件。
您可以同时使用 "Identify last row" 和 "Filter rows",这样您将只保留输入的一行(仅过滤最后一行)。您 INSERT 将在筛选行步骤之后。
由于您需要拆分流程,因此您需要将 ID 列与原始文本输入行连接起来。
你还有一个Unique row
。如果您不指定在哪个字段上过滤唯一值,它将输出一行且恰好一行。
现在,除非我误解了您的规格,否则我宁愿使用 Kettle's logging system。单击任意位置,弹出窗口中的 select 属性,然后单击“日志记录”选项卡。它将为您提供状态 (Started/End/Stop/...) 和大量附加信息,例如错误数量、读取和写入的行(只需告诉 PDI 它必须在哪一步查找这些数字) .
您甚至可以几乎实时地在数据库中读取与您在 PDI 底部面板上看到的信息相同的信息。只需单击所需的字段,然后按 SQL
按钮即可创建文件。
请注意,由于历史原因,开始日期并不是真正的开始日期(它是前一个成功运行的日期)。开始日期称为 Replay date
。
而且如果你需要这个系统来监控负载并知道 运行 是否必须启动,请注意在突然结束时系统有时没有时间写入 "End" 到日志。因此logdate<now-10minutes
更可靠。
要仅对流的第一行执行某些操作,请使用 'Add sequence' 步骤(从 1 开始),然后使用条件为 'seq = 1'.[=10 的 'Filter rows' 步骤=]
我正在开发 ETL,必须执行一些例程来监视它。
开始时,我必须在数据库上进行 INSERT 以创建一条记录,告知文件名和启动进程日期时间。此查询将 return 记录的 PK,并且必须存储它。当该文件的 ETL 完成时,我必须更新该记录,通知 ETL 成功完成及其结束过程日期时间。
我使用文本文件输入来查找与其正则表达式匹配的文件,并将其 "Additional output fields" 添加到流中。但是我找不到一个只对第一条记录 运行 并且会为 INSERT 执行 SQL 命令的组件。
您可以同时使用 "Identify last row" 和 "Filter rows",这样您将只保留输入的一行(仅过滤最后一行)。您 INSERT 将在筛选行步骤之后。
由于您需要拆分流程,因此您需要将 ID 列与原始文本输入行连接起来。
你还有一个Unique row
。如果您不指定在哪个字段上过滤唯一值,它将输出一行且恰好一行。
现在,除非我误解了您的规格,否则我宁愿使用 Kettle's logging system。单击任意位置,弹出窗口中的 select 属性,然后单击“日志记录”选项卡。它将为您提供状态 (Started/End/Stop/...) 和大量附加信息,例如错误数量、读取和写入的行(只需告诉 PDI 它必须在哪一步查找这些数字) .
您甚至可以几乎实时地在数据库中读取与您在 PDI 底部面板上看到的信息相同的信息。只需单击所需的字段,然后按 SQL
按钮即可创建文件。
请注意,由于历史原因,开始日期并不是真正的开始日期(它是前一个成功运行的日期)。开始日期称为 Replay date
。
而且如果你需要这个系统来监控负载并知道 运行 是否必须启动,请注意在突然结束时系统有时没有时间写入 "End" 到日志。因此logdate<now-10minutes
更可靠。
要仅对流的第一行执行某些操作,请使用 'Add sequence' 步骤(从 1 开始),然后使用条件为 'seq = 1'.[=10 的 'Filter rows' 步骤=]