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 输入中的一切都是动态的。
背景:我在一家主要销售通行证的公司工作。客户下的每个订单都将包含 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 输入中的一切都是动态的。