根据文本文件输入元数据制作数据库插入
Posted
技术标签:
【中文标题】根据文本文件输入元数据制作数据库插入【英文标题】:Make a DB INSERT based on Text File Input metadata 【发布时间】:2017-08-28 16:17:19 【问题描述】:我正在开发一个 ETL,并且必须执行一些例程来监控它。
一开始,我必须在 DB 上的 INSERT 中创建一条记录,告知文件名和启动进程的日期时间。此查询将返回记录的 PK 并且必须存储。当该文件的 ETL 完成时,我必须更新该记录,通知 ETL 成功完成及其结束过程的日期时间。
我使用文本文件输入来查找与其正则表达式匹配的文件,并将其“附加输出字段”添加到流中。但我找不到一个只为第一条记录运行并为 INSERT 执行 SQL 命令的组件。
【问题讨论】:
【参考方案1】:您可以同时使用“识别最后一行”和“过滤行”,因此您将只保留输入中的一行(仅过滤最后一行)。您将在过滤行步骤之后插入。
由于您需要拆分流程,因此您需要将 ID 列与原始文本输入行连接起来。
【讨论】:
我想我理解你的想法,但无法仅基于图像实现它。我所做的是检查文本文件输入上的“输出中的Rownum”选项。然后我使用过滤器行来拆分流,将第一行移动到一个流中,将所有其他行移动到另一个流中。在接收第一行的流上,我使用数据库查找来查询表中的文件名。如果查找带来表 PK,我知道该文件已被处理,如果它为 null,我知道该文件是新的要处理的。 @Hikari 我知道您想要 1) 插入一行并 b) 在转换结束时更新该行。对?只有一行后,执行数据库插入并将 ID 字段与主流连接。【参考方案2】:您还有一个Unique row
。如果你没有指定在哪个字段上过滤一个唯一值,它将输出一行并且正好一行。
现在,除非我误解了您的规格,否则我宁愿使用Kettle's logging system。单击任意位置,在弹出窗口中选择属性,然后选择日志选项卡。它将为您提供状态(开始/结束/停止/...)和大量附加信息,例如错误数量、读取和写入的行(只需告诉 PDI 必须在哪个步骤上查找这些数字) .
您甚至可以在数据库中几乎实时读取与您在 PDI 底部面板上看到的信息相同的信息。只需单击您想要的字段,然后按SQL
按钮即可创建文件。
请注意,由于历史原因,开始日期并不是真正的开始日期(它是上一次成功运行的日期)。开始日期称为Replay date
。
此外,如果您需要该系统来监控负载并知道运行是否必须开始,请注意在突然结束时系统有时没有时间将“结束”写入日志。因此logdate<now-10minutes
更可靠。
【讨论】:
非常有趣!我去看看谢谢!【参考方案3】:要仅对流的第一行执行某些操作,请使用“添加序列”步骤(从 1 开始),然后使用条件“seq = 1”的“过滤行”步骤。
【讨论】:
以上是关于根据文本文件输入元数据制作数据库插入的主要内容,如果未能解决你的问题,请参考以下文章
读取 txt 文件并插入文本小部件后显示的括号。任何简单的修复方法?