需要帮忙! - 无法使用 COPY 命令加载 JSON

Posted

技术标签:

【中文标题】需要帮忙! - 无法使用 COPY 命令加载 JSON【英文标题】:Need help! - Unable to load JSON using COPY command 【发布时间】:2015-09-24 17:16:47 【问题描述】:

这里需要您的专业知识!

我正在尝试使用以下格式的复制命令将JSON 文件(由JSON 转储生成)加载到redshift

[

    "cookieId": "cb2278", 
    "environment": "STAGE", 
    "errorMessages": [
        "70460"
    ]

,

    "cookieId": "cb2271", 
    "environment": "STG", 
    "errorMessages": [
        "70460"
    ]

]

我们遇到了错误 - “无效的 JSONPath 格式:成员不是对象。”

当我试图摆脱方括号 - [] 并删除 JSON dicts 之间的“,”逗号分隔符时,它加载得非常好。


    "cookieId": "cb2278", 
    "environment": "STAGE", 
    "errorMessages": [
        "70460"
    ]



    "cookieId": "cb2271", 
    "environment": "STG", 
    "errorMessages": [
        "70460"
    ]

但实际上大多数来自 API 的 JSON 文件都有这种格式。 我可以进行字符串替换或 reg ex 来摆脱 , 和 [] 但我想知道是否有更好的方法可以在不修改文件的情况下无缝加载到 redshift

【问题讨论】:

【参考方案1】:

将 JSON 数组转换为数组元素流的一种方法是将前者通过管道传输到 jq '.[]'。输出被发送到标准输出。

如果 JSON 数组位于名为 input.json 的文件中,则以下命令将在标准输出上生成数组元素流:

$ jq ".[]" input.json

如果您希望以 jsonlines 格式输出,请使用 -c 开关(即jq -c ......)。

有关 jq 的更多信息,请参阅https://stedolan.github.io/jq

【讨论】:

谢谢@peak!我想知道 redshift 是否有任何功能可以使用这种格式?还想知道是否有 pythonic 方式将第二种格式加载到 dict 中? “cookieId”:“cb2278”,“环境”:“STAGE”,“errorMessages”:[“70460”] “cookieId”:“cb2271”,“环境”:“STG”,“errorMessages”:[“ 70460"]

以上是关于需要帮忙! - 无法使用 COPY 命令加载 JSON的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 Java 执行 Snowflake COPY 命令

GreenPlum数据加载

GreenPlum数据的装载与卸载之copy命令的使用

jquery文件加载出错问题,js调用问题

BeanUtils.copyProperties无法拷贝问题

Timepicker JS在加载后更改选项值