Kafka 连接过滤器 jsonpath 问题
Issue with Kafka connect filters jsonpath
我正在使用 kafka connect 将数据从 kafka 接收到 mongo db。在此过程中,我尝试使用过滤器 (https://docs.confluent.io/current/connect/transforms/filter-confluent.html) 过滤一些记录。对于这个过滤器,我们需要给出一个谓词指定 JSON 路径作为条件来过滤来自 Kafka 的数据。
下面是我从 kafka 收到的 json 数据
**Input json:**
{
"EventMetadata": {
"ColumnsUpdated": "FirstName,LastName,Age"
},
"TotalBooking__c": 1
}
我有一个要求,它应该满足以下条件,如果满足以下条件,kafka connect 应该允许将此类记录插入 mongo db.
条件:
如果 TotalBooking__c > 0 并且 EventMetadata.ColumnsUpdated 包含任何“FirstName”或“LastName”值,它应该允许将此类记录插入 mongo db.
我尝试使用下面的 Kafka connect Filter operators
[?(@.TotalBooking__c > 0 && @.EventMetadata.ColumnsUpdated =~ /(?=\b\b)\b(FirstName|LastName)\b/)]
但是,只有当输入 EventMetadata.ColumnsUpdated 值只有“FirstName”或“LastName”时才有效。如果该值由逗号分隔(如上述输入 json 中给出的“FirstName,LastName,Age”),则它不起作用。
请帮我解决这个问题。
链接的 Confluent 文档显示 JayWay 的 JsonPath 实现在这里起作用,这一点很高兴知道,因为在功能和过滤器语法方面或多或少存在一些细微差别。
根据您的要求,我认为您使用正则表达式模式的方向正确。
但是,该模式需要匹配整个字符串(值),因为 =~
执行正则表达式 match 而不是正则表达式 find。换句话说,我们需要允许在开头和结尾使用 .*
的可选文本(如果需要,可以使用更具体的模式):
$[?(@.TotalBooking__c >0 && @.EventMetadata.ColumnsUpdated =~ /.*\b(FirstName|LastName)\b.*/)]
我正在使用 kafka connect 将数据从 kafka 接收到 mongo db。在此过程中,我尝试使用过滤器 (https://docs.confluent.io/current/connect/transforms/filter-confluent.html) 过滤一些记录。对于这个过滤器,我们需要给出一个谓词指定 JSON 路径作为条件来过滤来自 Kafka 的数据。
下面是我从 kafka 收到的 json 数据
**Input json:**
{
"EventMetadata": {
"ColumnsUpdated": "FirstName,LastName,Age"
},
"TotalBooking__c": 1
}
我有一个要求,它应该满足以下条件,如果满足以下条件,kafka connect 应该允许将此类记录插入 mongo db.
条件: 如果 TotalBooking__c > 0 并且 EventMetadata.ColumnsUpdated 包含任何“FirstName”或“LastName”值,它应该允许将此类记录插入 mongo db.
我尝试使用下面的 Kafka connect Filter operators
[?(@.TotalBooking__c > 0 && @.EventMetadata.ColumnsUpdated =~ /(?=\b\b)\b(FirstName|LastName)\b/)]
但是,只有当输入 EventMetadata.ColumnsUpdated 值只有“FirstName”或“LastName”时才有效。如果该值由逗号分隔(如上述输入 json 中给出的“FirstName,LastName,Age”),则它不起作用。
请帮我解决这个问题。
链接的 Confluent 文档显示 JayWay 的 JsonPath 实现在这里起作用,这一点很高兴知道,因为在功能和过滤器语法方面或多或少存在一些细微差别。
根据您的要求,我认为您使用正则表达式模式的方向正确。
但是,该模式需要匹配整个字符串(值),因为 =~
执行正则表达式 match 而不是正则表达式 find。换句话说,我们需要允许在开头和结尾使用 .*
的可选文本(如果需要,可以使用更具体的模式):
$[?(@.TotalBooking__c >0 && @.EventMetadata.ColumnsUpdated =~ /.*\b(FirstName|LastName)\b.*/)]