Pentaho Kettle:如何动态获取 JSON 文件列
Posted
技术标签:
【中文标题】Pentaho Kettle:如何动态获取 JSON 文件列【英文标题】:Pentaho Kettle: How to dynamically fetch JSON file columns 【发布时间】: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 个不同通行证的订单怎么办?如何动态执行此操作以确保作业不会中断?
【问题讨论】:
【参考方案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”? 错误似乎“选择值”步骤没有获得列操作类型。请确保“选择值”输入中心中的确切列名。您也可以分享您的转换,以便我可以查看问题。以上是关于Pentaho Kettle:如何动态获取 JSON 文件列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Pentaho 数据集成 (Kettle) 中的“用户定义的 Java 类”步骤中获取所有参数
从 Pentaho Kettle Job 的 java api 调用中获取数据
如何从 Pentaho Kettle 读取所有文件夹和子文件夹 使用 SFTP 步骤获取文件