You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

S3 Inventory与Athena查询问题:类型不兼容及异常值

搞定S3 Inventory表查询的两个问题

嘿,看起来你遇到了S3 Inventory和Hive表之间典型的 schema 不匹配问题,这俩错误其实是同一个根源导致的,咱们一步步来解决:

问题本质分析

你的两个问题核心都是表结构定义和S3 Inventory输出的ORC格式不兼容:

  1. 那个离谱的size数值(4923069104295859283)是类型解析错误的产物——当Hive试图把不匹配的类型硬转成bigint时,就会出现这种乱码值;
  2. HIVE_BAD_DATA错误直接点明了:ORC文件里的size是LONG类型,但你的表schema里定义的却是varchar(虽然你贴的CREATE语句里写的是bigint,但要么是实际表元数据没更新,要么是输入格式配置错了)。

具体修复步骤

1. 最稳妥的方式:重建正确的外部表

你当前表用的SymlinkTextInputFormat是用来读文本符号链接的,根本不适合S3 Inventory的ORC输出。直接重建一个适配ORC格式的表:

CREATE EXTERNAL TABLE s3_inventory_table(
  `bucket` string,
  `key` string,
  `version_id` string,
  `is_latest` boolean,
  `is_delete_marker` boolean,
  `size` bigint,
  `last_modified_date` timestamp,
  `e_tag` string,
  `storage_class` string
)
PARTITIONED BY (dt string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS ORC
LOCATION 's3://你的清单输出存储路径/'
TBLPROPERTIES (
  'transient_lastDdlTime'='1516093603',
  'orc.compress'='SNAPPY' -- 这个可选,和S3 Inventory的压缩格式对应上就行
);

2. 不想重建?修改现有表的配置

如果不想重新建表,那就直接修改现有表的输入输出格式和SerDe:

-- 修改文件格式为ORC
ALTER TABLE `table` SET FILEFORMAT ORC;
-- 切换到ORC专用的SerDe
ALTER TABLE `table` SET SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde';
-- 更新输入输出格式为ORC专用
ALTER TABLE `table` SET INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat';
ALTER TABLE `table` SET OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat';

然后修复分区元数据,让Hive识别所有分区:

MSCK REPAIR TABLE `table`;

3. 确保字段类型完全匹配

S3 Inventory的ORC格式里,size本身就是bigint(对应Hive的LONG)类型,所以表中定义size bigint是对的。如果之前你误把size设成了varchar,得改回来:

ALTER TABLE `table` CHANGE COLUMN size size bigint;

验证修复结果

先跑个小查询看看size是否正常:

SELECT key, size FROM `table` LIMIT 10;

如果数值正常,再执行全表查询确认没有错误就搞定了!

内容的提问来源于stack exchange,提问作者duzvik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:23:36