【问题标题】:Pentaho Kettle: How to dynamically fetch JSON file columnsPentaho Kettle:如何动态获取 JSON 文件列
【发布时间】:2020-09-13 19:24:25
【问题描述】:

背景:我在一家主要销售通行证的公司工作。客户下的每个订单都将包含 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 输入步骤中提前有多少通行证。但是,如果明天我有一个包含 10 个不同通行证的订单怎么办?如何动态执行此操作以确保作业不会中断?

【问题讨论】:

    标签: json mongodb pentaho kettle aws-documentdb


    【解决方案1】:

    如果你想要一个表格输出,比如

    TicketUrl   Pass            ExternalTicketID
    ----------  ------          ----------------
    abc         PassID1Value1    ExTicketIDvalue1
    abc         PassID1Value2    ExTicketIDvalue2
    abc         PassID1Value3    ExTicketIDvalue3
    
    

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

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

    【讨论】:

    • 完美,谢谢,我会看看,让你知道。
    • 您好,我尝试使用您的方法,但收到以下消息:“JSON Input.0 - 资源内部的数据结构不同!我们找到 13 个 json 路径值 [$..passId] ,这与为路径 [$.fullDocument.ticketUrl] 返回的数字不同(1 个值)。我们必须为所有路径具有相同数量的值。”。你知道该怎么做吗?谢谢
    • 我已经更新了转换。如果您还有其他需要,请告诉我。
    • 嗨 Runa 感谢您更新此内容。我尝试运行新方法,但现在收到其他错误消息“选择值.0 - 错误(版本 7.0.0.0-25,buildguy 从 2016-11-05 15.35.36 构建 1):找不到字段'operation_type' 在行中!”。使用 2 个不同的 Json 输入步骤时,Pentaho 似乎由于某种原因找不到列“operation_type”?
    • 错误似乎“选择值”步骤没有获得列操作类型。请确保“选择值”输入中心中的确切列名。您也可以分享您的转换,以便我可以查看问题。
    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多