Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将具有多个布局的json对象从S3复制到红移_Json_Amazon S3_Amazon Redshift - Fatal编程技术网

将具有多个布局的json对象从S3复制到红移

将具有多个布局的json对象从S3复制到红移,json,amazon-s3,amazon-redshift,Json,Amazon S3,Amazon Redshift,我有一个S3存储桶,其中包含许多包含“\n”分隔的json对象的文件。这些json对象可以有几种不同的布局。在所有布局中都有一组通用的标准键。大多数差异只是有几个额外的键,但有些有嵌套的json对象。一个文件可以有任何/所有这些布局 我已经成功地用红移定义了一个基本表,并将数据复制到该表中,但是表中没有的任何键都会丢失 我想为每个布局创建一个表,并将json对象复制到相应的表中。具有嵌套json对象的布局可能会作为json保留在单个字符串列中,因为Redshift能够在查询中解析json 我是A

我有一个S3存储桶,其中包含许多包含“\n”分隔的json对象的文件。这些json对象可以有几种不同的布局。在所有布局中都有一组通用的标准键。大多数差异只是有几个额外的键,但有些有嵌套的json对象。一个文件可以有任何/所有这些布局

我已经成功地用红移定义了一个基本表,并将数据复制到该表中,但是表中没有的任何键都会丢失

我想为每个布局创建一个表,并将json对象复制到相应的表中。具有嵌套json对象的布局可能会作为json保留在单个字符串列中,因为Redshift能够在查询中解析json

我是AWS的新手,因此任何帮助都将不胜感激。此外,请随意建议可能也有效的非红移服务


谢谢

您需要为要加载的每个表运行单独的副本。但是,嵌套对象可能会有问题(从现在开始)


我们放弃了直接加载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"]
}