我有一个S3存储桶,其中包含许多包含“\ n”分隔的json对象的文件 . 这些json对象可以有几个不同的布局 . 所有布局都有一组标准的标准键 . 大多数差异只是有一些额外的键,但有些具有嵌套的json对象 . 一个文件可以具有任何/所有这些布局 .
我已经设法在Redshift中定义了一个基本表,并将数据复制到该表中,但是我表中没有的任何键都丢失了 .
我想为每个布局创建1个表,并将json对象复制到相应的表中 . 具有嵌套json对象的布局可能可以作为json保留在单个字符串列中,因为Redshift能够在查询中解析json .
我是AWS的新手,所以任何帮助都将不胜感激 . 此外,随意建议可能也可以使用的非Redshift服务 .
谢谢!
2 回答
您需要为要加载的每个表运行单独的COPY . 但是,您可能遇到嵌套对象的问题(截至目前) .
我们放弃了直接JSON加载,因为它无法加载任意数量的嵌套对象 . 每个嵌套对象都必须通过它的索引引用(例如'nest [0]')才能加载它 . 当可能有数千个物体时,这并不理想 .
您无法通过“复制”命令跳过行 . One option 你可以想到假设文件正被加载到S3 . 您可以拆分文件并将其放入不同的文件夹中 . 因此,您可以运行不同的复制命令将数据加载到不同的表 . Other option: 您可以只将第一级json对象加载到临时表,并可以使用Redshift JSON函数发布 . Example: JSON 1:
JSON 2:
在JSON 2中,'e'标签是额外的 . 您可以将这两种不同类型的JSON加载到同一个表中,然后使用Redshift JSON函数进一步处理 .
您的目标表应该包含以下列:
您的jsonpath应如下所示:
加载JSON 1时,列e加载为null .
我希望这就是你要找的东西 . 如果您找到了解决方案,请告诉我 .