使用 Athena 查询 S3 清单时出现 HIVE_CURSOR_ERROR - 大小列是否正确?

问题描述

我正在尝试使用 Athena 对我们的一个 S3 存储桶进行一些分析,但遇到了一些我无法解释的错误,也无法找到适合我查找的任何地方的解决方案。

我遵循的指南是https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory-athena-query.html

我昨天创建了我的 S3 清单,现在已经收到了 S3 中的第一份报告。格式为 Apache ORC,最后一次导出显示为昨天,存储的附加字段为 SizeLast modifiedStorage classEncryption

我可以看到存储在 s3://{my-inventory-bucket}/{my-bucket}/{my-inventory} 下的数据,所以我知道那里有数据。

库存存储桶和库存配置的认加密都启用了 SSE-S3 加密。

要创建表,我使用以下查询

CREATE EXTERNAL TABLE my_table (
  `bucket` string,key string,version_id string,is_latest boolean,is_delete_marker boolean,size bigint
)
PARTITIONED BY (dt string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeytextoutputFormat'
LOCATION 's3://{my-inventory-bucket}/{my-bucket}/{my-inventory}/hive/';

创建表后,我使用以下方法加载数据:

MSCK REPAIR TABLE my_table;

加载数据结果显示数据已加载:

Partitions not in metastore:    my_table=2021-07-17-00-00
Repair: Added partition to metastore my_table=2021-07-17-00-00

加载后,我使用以下方法验证数据是否可用:

SELECT disTINCT dt FROM my_table ORDER BY 1 DESC limit 10;

输出

1   2021-07-17-00-00

现在,如果我运行类似下面的程序,一切都运行良好,我得到了预期的结果:

SELECT key FROM my_table ORDER BY 1 DESC limit 10;

但是一旦我包含尺寸列,我就会收到一个错误

SELECT key,size FROM my_table ORDER BY 1 DESC limit 10;

Your query has the following error(s):

HIVE_CURSOR_ERROR: Failed to read ORC file: s3://{my-inventory-bucket}/{my-bucket}/{my-inventory}/data/{UUID}.orc

This query ran against the "my_table" database,unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: {UUID}.

我觉得我的尺寸列有问题。谁能帮忙解决这个问题?

解决方法

好郁闷。我想我在这里找到了答案:https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html

IsLatest – Set to True if the object is the current version of the object. (This field is not included if the list is only for the current version of objects.)

删除该列解决了问题。