Amazon s3 文本必须在2处以“}”结尾[字符3第1行] 雅典娜以普雷斯托为原型。您可以直接使用Presto(例如,在EMR上使用Presto),它将在错误响应中报告有问题的文件路径。(您可能需要在Presto CLI中使用--debug选项来获取完整的错误响应,或者从
文本必须在2处以“}”结尾[字符3第1行]Amazon s3 文本必须在2处以“}”结尾[字符3第1行] 雅典娜以普雷斯托为原型。您可以直接使用Presto(例如,在EMR上使用Presto),它将在错误响应中报告有问题的文件路径。(您可能需要在Presto CLI中使用--debug选项来获取完整的错误响应,或者从,amazon-s3,amazon-athena,Amazon S3,Amazon Athena,文本必须在2处以“}”结尾[字符3第1行] 雅典娜以普雷斯托为原型。您可以直接使用Presto(例如,在EMR上使用Presto),它将在错误响应中报告有问题的文件路径。(您可能需要在Presto CLI中使用--debug选项来获取完整的错误响应,或者从Presto Web UI获取)。我不知道如何直接从雅典娜那里获得相同的信息。你的数据的参考文件格式是什么?是JSON/CSV吗?你的DDL是什么样子的?你遇到过吗?建议使用SELECT“$PATH”,*从您的_列为NULL的_表中来识别格式不
雅典娜以普雷斯托为原型。您可以直接使用Presto(例如,在EMR上使用Presto),它将在错误响应中报告有问题的文件路径。(您可能需要在Presto CLI中使用
--debug
选项来获取完整的错误响应,或者从Presto Web UI获取)。我不知道如何直接从雅典娜那里获得相同的信息。你的数据的参考文件格式是什么?是JSON/CSV吗?你的DDL是什么样子的?你遇到过吗?建议使用SELECT“$PATH”,*从您的_列为NULL的_表中
来识别格式不正确的文件records@IlyaKisil我找不到那一点。我也不知道哪列是问题所在。从中,我假设您知道哪列的格式不正确,即profile.score
(一个字符串而不是整数)。Athena基于Presto。您可以直接使用Presto(例如,在EMR上使用Presto),它将在错误响应中报告有问题的文件路径。(您可能需要在Presto CLI中使用--debug
选项来获取完整的错误响应,或者从Presto Web UI获取)。我不知道如何直接从雅典娜那里获得相同的信息。你的数据的参考文件格式是什么?是JSON/CSV吗?你的DDL是什么样子的?你遇到过吗?建议使用SELECT“$PATH”,*从您的_列为NULL的_表中
来识别格式不正确的文件records@IlyaKisil我找不到那一点。我也不知道哪一列是问题所在。从中,我假设您知道哪一列的格式不正确,即profile.score
(一个字符串而不是整数)。您能否验证您的表是否使用'org.openx.data.jsonserde.jsonserde'
,并且具有SerDe属性'ignore.malformed.json'='true'
。另一方面,可能只有当文件结构格式不正确时,这种方法才有效,例如,每行不止一条记录,行尾有逗号,或者json是未声明的版本。然而,从JSON的角度来看,您的所有记录都非常好,但它们只是不一致。我可以确认这些属性已启用。JSON格式很好,但是int应该是一个字符串。我所能想到的是手动方法(如果你有很多数据,这可能会很昂贵)。尝试执行从regexp类似(“$PATH”,“regex for directories”)的\u表中选择COUNT(*)
。如果这不会产生错误,则该正则表达式上的文件是正常的。您能否验证您的表是否使用了'org.openx.data.jsonserde.jsonserde'
,并且具有SerDe属性'ignore.malformed.json'='true'
。另一方面,可能只有当文件结构格式不正确时,这种方法才有效,例如,每行不止一条记录,行尾有逗号,或者json是未声明的版本。然而,从JSON的角度来看,您的所有记录都非常好,但它们只是不一致。我可以确认这些属性已启用。JSON格式很好,但是int应该是一个字符串。我所能想到的是手动方法(如果你有很多数据,这可能会很昂贵)。尝试执行从regexp类似(“$PATH”,“regex for directories”)的\u表中选择COUNT(*)
。如果这不会产生错误,则该正则表达式上的文件是正常的。
CREATE EXTERNAL TABLE my.data (
`id` string,
`timestamp` string,
`profile` struct<
`name`: string,
`score`: int>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1',
'ignore.malformed.json' = 'true'
)
LOCATION 's3://my-bucket-of-data'
TBLPROPERTIES ('has_encrypted_data'='false');
// inside s3://path/to/bad.json
{"name":"1Patrick", "age":35}
{"name":"1Carlos", "age":"eleven"}
{"name":"1Fabiana", "age":22}
// inside s3://path/to/good.json
{"name":"2Patrick", "age":35}
{"name":"2Carlos", "age":11}
{"name":"2Fabiana", "age":22}
source_s3_file | name | age
---------------------------------------
s3://path/to/good.json | 1Patrick | 35
s3://path/to/good.json | 1Carlos | 11
s3://path/to/good.json | 1Fabiana | 22
{ "id" : 50, "name":"John" }
{ "id" : 51, "name":"Jane" }
{ "id" : 53, "name":"Jill" }
{"name": "2Patrick","age": 35,"address": "North Street"}
{
"name": "2Carlos",
"age": 11,
"address": "Flowers Street"
}
{"name": "2Fabiana","age": 22,"address": "Main Street"}
source_s3_file | name | age | address
-----------------------------|----------|-----|-------------
1 s3://path/to/malformed.json| 2Patrick | 35 | North Street
2 s3://path/to/malformed.json| | |
3 s3://path/to/malformed.json| | |
4 s3://path/to/malformed.json| | |
5 s3://path/to/malformed.json| | |
6 s3://path/to/malformed.json| | |
7 s3://path/to/malformed.json| 2Fabiana | 22 | Main Street