首页 文章

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

提问于
浏览
1

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

我已经设法在Redshift中定义了一个基本表,并将数据复制到该表中,但是我表中没有的任何键都丢失了 .

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

我是AWS的新手,所以任何帮助都将不胜感激 . 此外,随意建议可能也可以使用的非Redshift服务 .

谢谢!

2 回答

  • 0

    您需要为要加载的每个表运行单独的COPY . 但是,您可能遇到嵌套对象的问题(截至目前) .

    我们放弃了直接JSON加载,因为它无法加载任意数量的嵌套对象 . 每个嵌套对象都必须通过它的索引引用(例如'nest [0]')才能加载它 . 当可能有数千个物体时,这并不理想 .

  • 1

    您无法通过“复制”命令跳过行 . One option 你可以想到假设文件正被加载到S3 . 您可以拆分文件并将其放入不同的文件夹中 . 因此,您可以运行不同的复制命令将数据加载到不同的表 . Other option: 您可以只将第一级json对象加载到临时表,并可以使用Redshift JSON函数发布 . Example: JSON 1:

    {
        "a": "value",
        "b": "value",
        "c": "value",
        "d": "value",
        "f": {
            "fa": "value",
            "fb": "value",
            "fc": "value",
            "fd": "value"
        },
        "g": "value"
    }
    

    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加载到同一个表中,然后使用Redshift JSON函数进一步处理 .

    您的目标表应该包含以下列:

    a, b, c, d, e, f, g
    

    您的jsonpath应如下所示:

    {
        "jsonpaths": ["$.a", "$.b", "$.c", "$.d", "$.e", "$.f", "$.g"]
    }
    

    加载JSON 1时,列e加载为null .

    我希望这就是你要找的东西 . 如果您找到了解决方案,请告诉我 .

相关问题