我可以使用 AWS Athena 查询印刷精美的 JSON 吗?
Can I query pretty-printed JSON with AWS Athena?
我有一个 S3 存储桶,其中包含数千个 JSON 文件,这些文件“印刷精美”,这意味着它们有效 JSON 但包含换行符和缩进。
每个 JSON 文件包含一个文档,这意味着它以 {
开头并以 }
结尾。
示例:
{
"id": "0d8147aa-f08f-4b02-aaec-db1af70c2904",
"customer": {
"id": "10d55752-9fbc-434c-bcff-f80b55216c07",
"given_name": "Edward",
"middle_initial": "M",
"family_name": "Fielding"
}
}
我创建了一个 table 像这样:
CREATE EXTERNAL TABLE `sales` (
`id` STRING,
`customer` STRUCT<
`id`:STRING,
`given_name`:STRING,
`middle_initial`:STRING,
`family_name`:STRING>)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION
's3://my-bucket/my-folder/'
但是当我尝试 运行 任何查询时,我得到:
Row is not a valid JSON Object - JSONException: A JSONObject text must end with '}'
作为实验,我抓取了一些文件并删除了换行符,使每个 JSON 文档都在一行中,问题就消失了。
难道雅典娜根本无法应对“印刷精美”JSON?
有没有办法配置 SERDE 来支持这个?
在我的环境中,这些文件是由极难更改的东西生成的。
在任何编程语言中,处理这样的文件都是微不足道的。如果结论是无法将这些文件与 Athena 一起使用,我将非常失望。
Athena 不支持漂亮的打印 JSON,除了将数据重新格式化为每行一个对象外,没有其他解决方法。参见
我有一个 S3 存储桶,其中包含数千个 JSON 文件,这些文件“印刷精美”,这意味着它们有效 JSON 但包含换行符和缩进。
每个 JSON 文件包含一个文档,这意味着它以 {
开头并以 }
结尾。
示例:
{
"id": "0d8147aa-f08f-4b02-aaec-db1af70c2904",
"customer": {
"id": "10d55752-9fbc-434c-bcff-f80b55216c07",
"given_name": "Edward",
"middle_initial": "M",
"family_name": "Fielding"
}
}
我创建了一个 table 像这样:
CREATE EXTERNAL TABLE `sales` (
`id` STRING,
`customer` STRUCT<
`id`:STRING,
`given_name`:STRING,
`middle_initial`:STRING,
`family_name`:STRING>)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION
's3://my-bucket/my-folder/'
但是当我尝试 运行 任何查询时,我得到:
Row is not a valid JSON Object - JSONException: A JSONObject text must end with '}'
作为实验,我抓取了一些文件并删除了换行符,使每个 JSON 文档都在一行中,问题就消失了。
难道雅典娜根本无法应对“印刷精美”JSON? 有没有办法配置 SERDE 来支持这个?
在我的环境中,这些文件是由极难更改的东西生成的。 在任何编程语言中,处理这样的文件都是微不足道的。如果结论是无法将这些文件与 Athena 一起使用,我将非常失望。
Athena 不支持漂亮的打印 JSON,除了将数据重新格式化为每行一个对象外,没有其他解决方法。参见