【发布时间】:2021-06-04 09:05:32
【问题描述】:
目前正在将变更数据捕获事件从 MongoDB 流式传输到雪花中,希望将它们应用于已经存在的原始数据。
假设我有一张这样的桌子:
+---------------------+-----------------+-----------+
| key | value | document |
+---------------------+-----------------+-----------+
| foo.bar | "changed value" | <variant> |
| foo.stuff.anArray.1 | 1000 | <variant> |
| ... | ... | ... |
+---------------------+-----------------+-----------+
variant 包含一个非常嵌套的 JSON ex:
{
"foo": {
"bar": "Some info",
"baz": "Other info",
"stuff": {
"anArray": [1, 2, 3],
"things": "More nested info"
}
}
}
我想使用OBJECT_DELETE 和OBJECT_INSERT 函数来更新雪花中的嵌套变体数据。
尝试制作 js UDF 但不支持eval()。
其他方法,例如编写一个执行 key.split(".") 的 UDF,然后递归地遍历结构并更新字段似乎需要很长时间,并且在某些情况下会以 JavaScript out of memory error: UDF thread memory limit exceeded 失败。
寻找更有效的方法来解决这个问题。
【问题讨论】:
-
您能否更具体/举例说明如何更新对象(就数据而言)?
-
@FelipeHoffa 当然,表中提到的键是 json 中的路径。在第一行中,“foo.bar”会将 json 中的“Some info”值更新为“changed value”,在第二行中,“anArray”中的预期值将是
[1, 1000, 3]。我的想法是让它与OBJECT_INSERT功能相同,但能够更深入地了解 json。 -
你的意思是,有人可以编写雪花 SQL 来处理这个问题吗:docs.mongodb.com/manual/reference/change-events/…
-
我真的很想帮忙解决这个问题 - 我只是无法准确理解您想要什么。
-
@SimeonPilgrim 是的,确实这个想法是将来自更改流中的更改应用于已经在仓库中的数据。
variant是现有数据,key, value是来自 mongodb CDC 的解析信息。
标签: snowflake-cloud-data-platform variant