带有 jsonpaths 的 Redshift 复制 JSON 数据失败并出现不正确的 json 格式错误
Posted
技术标签:
【中文标题】带有 jsonpaths 的 Redshift 复制 JSON 数据失败并出现不正确的 json 格式错误【英文标题】:Redshift copy JSON data with jsonpaths fails with not in correct json format error 【发布时间】:2020-11-25 17:29:49 【问题描述】:我正在尝试使用 Firehose 传输流将数据加载到 Redshift。
我在以下位置使用上传到 S3 的 jsonpaths 文件。
s3://my_bucket/jsonpaths.json
此文件包含以下 jsonpaths 配置
"jsonpaths": [
"$['col_1']",
"$['col_2']",
"$['col_3']",
"$['col_4']"
]
对我来说,这个配置看起来不错,但 Firehose Redshift 日志一直显示以下错误。
"The provided jsonpaths file is not in a supported JSON format."
即使我直接在 Redshift 集群上运行以下复制命令,也会看到类似的错误。
reshift_db=# COPY my_schema.my_table
FROM 's3://my_bucket/data.json'
FORMAT JSON 's3://my_bucket/jsonpaths.json'
CREDENTIALS 'aws_iam_role=<role_arn>'
;
ERROR: Manifest file is not in correct json format
DETAIL:
-----------------------------------------------
error: Manifest file is not in correct json format
code: 8001
context: Manifest file location = s3://my_bucket/jsonpaths.json
query: yyyyy
location: s3_utility.cpp:338
process: padbmaster [pid=xxxxx]
-----------------------------------------------
有人可以帮忙解决这里出了什么问题吗?
【问题讨论】:
【参考方案1】:我的问题是 jsonpaths 文件开头的 BOM (Byte Order Mark)。一些编辑器可以使用 BOM 保存文件,在编辑器中看到时,这不会显示为字符。而且显然 Redshift 不喜欢 jsonpaths 文件开头的 BOM。
如果您想检查您的 jsonpaths 文件是否属于这种情况,您可以在十六进制编辑器中打开该文件。对于 S3 文件,可以按如下方式完成。
# aws s3 cp s3://my_bucket/jsonpaths.json - | hexdump -C
要从文件中删除 BOM,您可以执行以下操作。
# aws s3 cp s3://my_bucket/jsonpaths.json - | dos2unix | aws s3 cp - s3://my_bucket/jsonpaths.json
几乎在尝试了 2 天之后,在提出 AWS Support 票证并发布了这个问题之后,它告诉我应该在十六进制编辑器中检查文件。
【讨论】:
以上是关于带有 jsonpaths 的 Redshift 复制 JSON 数据失败并出现不正确的 json 格式错误的主要内容,如果未能解决你的问题,请参考以下文章
AWS Data Pipeline DynamoDB 到 S3 到 Redshift,包括 JsonPaths
如何创建 Jsonpath 文件以在 redshift 中加载数据
用于动态 json 文件的 Redshift JSONPaths 文件
复制 json 文件时出现 Amazon Redshift 错误 - JSONPath 格式无效:成员不是对象