我有一个Kinesis流,它以JSON格式将原始数据转储到红移中。以下是初始数据结构和示例。
ApproximateArrivalTimestamp | data
--------------------------------------------------------------------------------------
2022-08-04 10:18:21.075 | {"A" : "value of A" , "B" : "Value of B" , "C" : { "D" : "Value of D"}}
我的要求是定期处理传入的数据,并利用调度器将这些JSON数据放入另一个由列分隔的表中。
目标表
ApproximateArrivalTimestamp | A | B | D
--------------------------------------------------------------------------------
2022-08-04 10:18:21.075 | value of A | value of B | value of D
这里有两个问题,
- 有没有办法只从物化视图中选择最新的行,所以只选择之前没有处理的行?我可以使用
ApproximateArrivalTimestamp
,但有更好的方法吗 - Redshift是否有任何函数可以像从s3复制数据一样使用jsonpath来批量处理记录,或者我是否必须使用
json_extract_path_text
函数创建一个存储过程来从循环中的每一行提取数据
任何基于上述表格的帮助或示例查询都将不胜感激。
提前感谢您的帮助!
对于#1,时间戳是一种常见的方法。确切的答案取决于您的数据解决方案。重新处理一行会导致错误还是效率低下?Etc
对于#2,我假设json键与目标表中已经建立的列相匹配。循环不是考虑SQL处理的好方法,相反,将json与目标表列的列表结合起来会提取出您想要的数据。