【发布时间】: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