首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >五旬节数据集成中新插入或更新的行计数

五旬节数据集成中新插入或更新的行计数
EN

Stack Overflow用户
提问于 2015-10-20 07:18:40
回答 3查看 2.9K关注 0票数 5

我是五旬节数据集成的新手;我需要将一个数据库集成到另一个位置作为ETL作业。我希望计数ETL作业期间insert/updat的数量,并将该计数插入到另一个表中。有人能帮我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-20 08:02:28

我不认为到目前为止,在PDI中返回受影响的插入/更新步骤的行数没有内置功能。

不过,大多数数据库供应商都能够为您提供从给定操作中获取受影响行数的能力。

例如,在PostgreSQL中,它看起来如下所示:

代码语言:javascript
复制
/* Count affected rows from INSERT */
WITH inserted_rows AS (
    INSERT INTO ...
    VALUES
        ...
    RETURNING 1
)
SELECT count(*) FROM inserted_rows;

/* Count affected rows from UPDATE */
WITH updated_rows AS (
    UPDATE ...
    SET ...
    WHERE ...
    RETURNING 1
)
SELECT count(*) FROM updated_rows;

但是,您的目标是在PDI作业中实现这一点,因此我建议您尝试达到控制SQL脚本的程度。

建议:将源数据保存在目标DB服务器上的文件中,然后使用它(可能具有批量加载功能)插入/更新,然后将受影响的行数保存到PDI变量中。请注意,您可能需要在作业的作用域中使用SQL脚本步骤。

编辑:实现是一个选择设计的问题,所以建议的解决方案是众多的解决方案之一。在一个很高的层次上,你可以做如下的事情。

  • 转换i-从源提取数据
    • 从源获取数据,无论是数据库还是其他任何东西。
    • 以适合目标DB结构的方式为输出做准备
    • 使用文件系统上的文本文件输出步骤保存CSV文件

  • 父作业
    • 如果PDI服务器与目标DB服务器相同:
      • 使用执行SQL脚本步骤:
        • 从文件中读取数据并执行插入/更新
        • 将受影响的行数写入表中(理想情况下,此表还可以包含操作的时间戳,这样您就可以跟踪事情)。

代码语言:javascript
复制
- If the PDI server is NOT the same as the target DB server:  
    - Upload the source data file to the server, e.g. with the FTP/SFTP file upload steps
    - Use the Execute SQL Script step to:  
        - Read data from the file and perform the INSERT/UPDATE
        - Write the number of affected rows into a table 

编辑2:另一个建议的解决方案

正如@user3123116所建议的那样,您可以使用比较字段步骤(如果不是环境的一部分,请查看市场)。

我看到的唯一缺点是在插入/更新之前必须查询目标数据库,这当然是性能较差的。

最后,它可能看起来是这样的(请注意,这只是比较和计数部分):

还请注意,您可以拆分源数据流的输入(复制,而不是分发),并执行插入/更新,但是该流必须等待字段比较的流来结束目标数据库上的查询,否则可能会得到错误的统计信息。

票数 4
EN

Stack Overflow用户

发布于 2015-10-21 15:30:44

“比较字段”步骤将以2个流作为比较的输入,其输出为4个不同的流,用于“相同”、“更改”、“添加”和“删除”记录。您可以对这4条记录进行计数,然后使用Insert/Update处理“更改”、“添加”和“删除”记录。

票数 3
EN

Stack Overflow用户

发布于 2015-10-26 06:30:42

您可以在转换设置中的日志选项中执行此操作。请遵循以下步骤:

  1. 点击编辑菜单->设置
  2. 切换到日志记录选项卡
  3. 从左侧菜单中选择Step
  4. 提供日志连接&日志表名(例如StepLog)
  5. 选择logging(LINES_OUTPUT所需的字段-用于插入计数& LINES_UPDATED -用于更新计数)
  6. 单击SQL按钮并单击执行按钮创建表
  7. 现在,所有步骤都将记录到日志表(StepLog)中,您可以将其用于进一步的操作。
  8. 尽情享受
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33230332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档