Pentaho Kettle:如何动态获取 JSON 文件列

Pentaho Kettle: How to dynamically fetch JSON file columns

背景:我在一家主要销售通行证的公司工作。客户下的每个订单都将包含 N 个通行证。

问题:我每天都有这些 JSON 事件事务文件从 DocumentDB (MongoDB) 进入 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 相关联,这是一个不同的列(如上所示)。我想使用 Pentaho Kettle 读取这些 JSON 文件并将数据加载到 DW 中。我知道 Json 输入步骤和 Row Normalizer 然后可以将“PassID 1”、“PassID 2”、“PassID 3”...“PassID N”列转换为 1 个唯一列“Pass”,我将不得不对另一列“外部票证 ID”应用类似的逻辑。该方法的问题在于它是相当静态的,因为我需要“告诉”Pentaho 在 Json 输入步骤中提前有多少个 Pass。但是,如果明天我有一个包含 10 个不同通行证的订单怎么办?我怎样才能动态地执行此操作以确保作业不会中断?

如果你想要像

这样的表格输出
TicketUrl   Pass            ExternalTicketID
----------  ------          ----------------
abc         PassID1Value1    ExTicketIDvalue1
abc         PassID1Value2    ExTicketIDvalue2
abc         PassID1Value3    ExTicketIDvalue3

并根据 JSON 输入文件值使传入值动态化,然后您可以下载此转换 Updated Link

我发现 JSON 输入中的一切都是动态的。