【问题标题】:Copying json objects with multiple layouts from S3 into Redshift将具有多个布局的 json 对象从 S3 复制到 Redshift
【发布时间】:2014-07-13 04:30:00
【问题描述】:

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

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

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

我是 AWS 新手,因此我们将不胜感激。此外,请随意推荐可能也可以使用的非 Redshift 服务。

谢谢!

【问题讨论】:

    标签: json amazon-s3 amazon-redshift


    【解决方案1】:

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

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

    【讨论】:

    • 有没有办法在复制时跳过一行?我有完全相同的问题,并且可以对每个表进行 COPY,但是我需要一种方法来说明需要跳过某些类型/布局的行。谢谢!
    【解决方案2】:

    您不能通过复制命令跳过行。 您可以想到的一个选项是假设文件正在加载到 S3。您可以拆分文件并将其放入不同的文件夹中。这样您就可以运行不同的复制命令将数据加载到不同的表中。 其他选项: 您可以仅将第一级 json 对象加载到临时表中,然后可以使用 Redshift JSON 函数发布。 示例: 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。

    我希望这是您正在寻找的。如果您找到了解决方案,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多