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输入中的所有工作都是动态的。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...