IBM CDC-Kafka的数据复制(在LiveAudit上定制)

问题描述 投票:0回答:1

我们正在使用IBM AS400作为源表。我想做的是:

  1. 使用描述性的column_name(例如“收盘价”)代替system_column_name(“ CPHKD001”)
  2. 将时间戳格式“ 2020-03-10 18:25:31.123456000000”转换为“ 2020-03-10T18:25:31.123Z”

我想我应该处理文件KcopLiveAuditSingleRowIntegrated.java。对于时间戳,可能在那里有解决方案,但是我认为我找不到在那里的答案。

java apache-kafka ibm-midrange ibm-data-replication
1个回答
0
投票
根据开源Avro文档中记录的Avro通用记录的行为,然后可以选择您感兴趣的相关值,并使用转换后的值创建新的Avro通用记录。然后将此新的Avro通用记录传递到KCOP的其余部分。

[请注意,审核KCOP包含执行此操作的代码,单行Avro审核KCOP是一个很好的示例。您可以在产品安装的samples.jar文件中找到我们所有集成KCOP的代码。

单行Avro审计KCOP记录了Avro之前和之后的通用记录,并生成了新的Avro通用记录,这些记录是它们的组合。如果在复制值时检查了列的类型,则可以标识时间戳记的列并更改要放入新的复合Avro通用记录中的值。

但是,根据以下链接,我们确实提供了一些预格式化的灵活性

https://www.ibm.com/support/knowledgecenter/en/SSTRGZ_11.4.0/com.ibm.cdcdoc.mcadminguide.doc/refs/mirror_timestamp_write_format_Kafka.html

注意,要使用此可选的预格式化程序,您需要“要启用此参数,必须将mirror_write_format参数设置为DYNAMIC。”

您将注意,可以设置一个数据存储区参数,该参数通常允许对您的KCOP接收到的时间戳数据进行自定义。

“ AVRO(默认)

将TIMESTAMP列值格式化为距1970年1月1日UNIX纪元(ISO日历)的微秒数。为了进行此计算,假定时间戳为UTC。

对于精度大于微秒的TIMESTAMP列,值格式化为字符串。您可以使用timestamp_format数据存储区参数指定字符串格式。 timestamp_format的默认值为yyyy-MM-dd HH:mm:ss.SSSNNNnnnppp。

TIMESTAMP WITH TIMEZONE列值被格式化为字符串。您可以使用timestamp_tz_format数据存储区参数指定字符串格式。 timestamp_tz_format的默认值为yyyy-MM-dd HH:mm:ss.SSSNNNnnnppp T。“

如果没有提供所需的确切格式,则可以选择最接近的格式并修改KCOP中的timestamp列的值。

修改KCOP的步骤如下...

https://www.ibm.com/support/knowledgecenter/en/SSTRGZ_11.4.0/com.ibm.cdcdoc.mcadminguide.doc/tasks/createkafkacop.html

关于列名的问题是相同的。如果使用的KCOP使用的是Avro架构注册表,则可以以编程方式更改在架构注册表中注册的架构。如果它是JSON,则可以在创建后更改JSON字符串,也可以在调用Avro to JSON方法之前进行更改。

或者,如果您的源支持派生的列,我相信您可以在管理控制台中使用新名称定义派生的列,该新名称只是原始列的值。我的回忆是,您可以取消选择原始列,因此您的名称将被更改。

© www.soinside.com 2019 - 2024. All rights reserved.