将具有多个布局的json对象从S3复制到红移
我有一个S3存储桶,其中包含许多包含“\n”分隔的json对象的文件。这些json对象可以有几种不同的布局。在所有布局中都有一组通用的标准键。大多数差异只是有几个额外的键,但有些有嵌套的json对象。一个文件可以有任何/所有这些布局 我已经成功地用红移定义了一个基本表,并将数据复制到该表中,但是表中没有的任何键都会丢失 我想为每个布局创建一个表,并将json对象复制到相应的表中。具有嵌套json对象的布局可能会作为json保留在单个字符串列中,因为Redshift能够在查询中解析json 我是AWS的新手,因此任何帮助都将不胜感激。此外,请随意建议可能也有效的非红移服务将具有多个布局的json对象从S3复制到红移,json,amazon-s3,amazon-redshift,Json,Amazon S3,Amazon Redshift,我有一个S3存储桶,其中包含许多包含“\n”分隔的json对象的文件。这些json对象可以有几种不同的布局。在所有布局中都有一组通用的标准键。大多数差异只是有几个额外的键,但有些有嵌套的json对象。一个文件可以有任何/所有这些布局 我已经成功地用红移定义了一个基本表,并将数据复制到该表中,但是表中没有的任何键都会丢失 我想为每个布局创建一个表,并将json对象复制到相应的表中。具有嵌套json对象的布局可能会作为json保留在单个字符串列中,因为Redshift能够在查询中解析json 我是A
谢谢 您需要为要加载的每个表运行单独的副本。但是,嵌套对象可能会有问题(从现在开始)
我们放弃了直接加载JSON,因为它无法加载任意数量的嵌套对象。每个嵌套对象都必须通过其索引(例如“nest[0]”)引用才能加载。这在可能有数千个对象的情况下并不理想。您不能通过“复制”命令跳过行。 您可以考虑的一个选项是假设文件正在加载到S3。您可以拆分文件并将其放到不同的文件夹中。因此,您可以运行不同的复制命令将数据加载到不同的表中。 其他选项: 您可以只将第一级json对象加载到一个临时表中,并且可以使用红移json函数来发布它。 示例: JSON 1: JSON 2:
{
"a": "value",
"b": "value",
"c": "value",
"d": "value",
"e": {
"ea": "value",
"eb": "value",
"ec": {
"eca": "",
"ecb": "value",
"ecc": "value",
"ecd": "value",
}
},
"f": {
"fa": "value"
},
"g": "value"
}
在JSON 2中,“e”标记是额外的。您可以将这两种不同类型的JSON加载到同一个表中,然后使用红移JSON函数进行进一步处理
目标表应包含以下列:
a, b, c, d, e, f, g
您的jsonpath应该如下所示:
{
"jsonpaths": ["$.a", "$.b", "$.c", "$.d", "$.e", "$.f", "$.g"]
}
加载JSON 1时,列e被加载为null
我希望这就是你要找的。如果您找到了解决方案,请告诉我。在进行复制时是否有跳过一行的方法?我也有同样的问题,我可以对每个表进行复制,但是我需要一种方法来说明某些类型/布局的行需要被跳过。谢谢
{
"jsonpaths": ["$.a", "$.b", "$.c", "$.d", "$.e", "$.f", "$.g"]
}