如何解决Pentaho Kettle:如何动态获取JSON文件列
背景:我在一家主要销售通行证的公司工作。客户下的每个订单将包含N次通过。
问题:我每天都有来自DocumentDB(MongoDB)的这些JSON事件事务文件进入S3存储桶。此JSON文件与每个文档密钥的相关事件类型(插入,修改或删除)相关联(在我的情况下是一个顺序)。下面的示例说明了S3存储桶中发生的“插入”事件类型:
{
"_id": {
"_data": "11111111111111"
},"operationType": "insert","clusterTime": {
"$timestamp": {
"t": 11111111,"i": 1
}
},"ns": {
"db": "abc","coll": "abc"
},"documentKey": {
"_id": {
"$uuid": "abcabcabcabcabcabc"
}
},"fullDocument": {
"_id": {
"$uuid": "abcabcabcabcabcabc"
},"orderNumber": "1234567","externalOrderId": "12345678","orderDateTime": "2020-09-11T08:06:26Z[UTC]","attraction": "abc","entryDate": {
"$date": 2020-09-13
},"entryTime": {
"$date": 04000000
},"requestId": "abc","ticketUrl": "abc","tickets": [
{
"passId": "1111111","externalTicketId": "1234567"
},{
"passId": "222222222","externalTicketId": "122442492"
}
],"_class": "abc"
}
}
正如我们在上面看到的,每个JSON文件可能包含N次传递,并且每个传递-依次-关联到一个外部票据ID,该ID是不同的列(如上所示)。我想使用Pentaho Kettle读取这些JSON文件并将数据加载到DW中。我知道Json输入步骤和行规范化器随后可以将“ PassID 1”,“ PassID 2”,“ PassID 3” ...“ PassID N”列转换为1个唯一列“ Pass”,我必须将类似的逻辑应用于其他列“外部票证ID”。这种方法的问题在于它是完全静态的,例如,我需要“告诉” Pentaho在Json输入步骤中要提前多少次通过。但是,如果明天我要订购10张不同的通票怎么办?我该如何动态地做到这一点,以确保工作不会中断?
解决方法
如果您想要类似表格的输出
TicketUrl Pass ExternalTicketID
---------- ------ ----------------
abc PassID1Value1 ExTicketIDvalue1
abc PassID1Value2 ExTicketIDvalue2
abc PassID1Value3 ExTicketIDvalue3
并根据JSON输入文件值使传入值动态化,然后可以下载此转换Updated Link
我发现JSON输入中的所有工作都是动态的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。