【使用环境】
生产环境
【OB or 其他组件】
- OceanBase 4.4.2
- Hive Metastore / Hive 外表
- S3 对象存储(endpoint:
s3.ap-northeast-1.amazonaws.com,region:ap-northeast-1)
【使用版本】
OceanBase 4.4.2
【问题描述】
OceanBase 查询 Hive 外表时报错:
select * from trades_last7d010_parquet0000_part_00 limit 10;
报错信息如下:
ERROR 9120 (HY000): cannot find object on object storage
另有一组测试中,创建 LOCATION 使用 s3:// 路径时,查询会报:
ERROR 9026 (HY000): backup destination is not valid
当前怀疑 OceanBase 4.4.2 在读取 Hive 外表时,对于 s3a:// 目录型 Parquet LOCATION 处理存在问题:
Hive/Hue 可以正常查询,但 OceanBase 访问时似乎没有正确展开目录下的 parquet 文件,而是直接将目录路径当作对象访问,导致 S3 返回 404,最终报错 9120。
【复现路径】
- Hive 中存在如下外表,Hue 中可正常查询:
CREATE EXTERNAL TABLE `test_db.trades_last7d010_parquet0000_part_00`(
`id` bigint COMMENT 'id',
`contract` string COMMENT 'contract',
`create_time` double COMMENT 'create_time',
`size` int COMMENT 'size',
`close_size` int COMMENT 'close_size',
`price` double COMMENT 'price',
`order_id` string COMMENT 'order_id',
`fee` double COMMENT 'fee',
`point_fee` double COMMENT 'point_fee',
`role` string COMMENT 'role',
`text` string COMMENT 'text',
`biz_info` string COMMENT 'biz_info',
`amend_text` string COMMENT 'amend_text',
`account` string COMMENT 'account',
`market` string COMMENT 'market',
`settle` string COMMENT 'settle',
`create_time_str` string COMMENT 'create_time_str',
`kafka_timestamp` timestamp COMMENT 'kafka_timestamp')
COMMENT 'test data'
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
's3a://your-bucket/your-prefix/test_db/trades_last7d010_parquet0000_part_00'
TBLPROPERTIES (
'parquet.compression'='SNAPPY',
'transient_lastDdlTime'='1770954969');
-
该表在 Hive/Hue 中可以正常查询数据。
-
S3 上验证目录及文件存在:
aws s3 ls s3://your-bucket/your-prefix/test_db/trades_last7d010_parquet0000_part_00/ --recursive
返回:
2026-02-13 11:55:59 1186256318 your-prefix/test_db/trades_last7d010_parquet0000_part_00/parquet0000_part_00.parquet
说明:
- S3 目录存在
- 目录下真实 parquet 文件存在
- Hive 可以正常读取该目录型 location
- 在 OceanBase 中查询该表:
select * from trades_last7d010_parquet0000_part_00 limit 10;
报错:
ERROR 9120 (HY000): cannot find object on object storage
- 查看 OceanBase 日志,发现其实际访问的是目录路径本身,而不是目录下具体 parquet 文件,例如:
cannot get file stat for not exist file(ret=-9120, uri=s3://your-bucket/your-prefix/test_db/trades_last7d010_parquet0000_part_00)
以及:
S3 info(request_id="...", code=404, exception="", err_msg="No response body.")
- 另外测试
CREATE LOCATION:
使用 s3://:
CREATE LOCATION hive_dw_s3_test_dir
URL = 's3://your-bucket/your-prefix/test_db/trades_last7d010_parquet0000_part_00'
CREDENTIAL = (
ACCESSID = '***',
ACCESSKEY = '***',
HOST = 's3.ap-northeast-1.amazonaws.com',
S3_REGION = 'ap-northeast-1'
);
查询时报:
ERROR 9026 (HY000): backup destination is not valid
使用 s3a://:
CREATE LOCATION hive_dw_s3_test_dir
URL = 's3a://your-bucket/your-prefix/test_db/trades_last7d010_parquet0000_part_00'
CREDENTIAL = (
ACCESSID = '***',
ACCESSKEY = '***',
HOST = 's3.ap-northeast-1.amazonaws.com',
S3_REGION = 'ap-northeast-1'
);
查询时报:
ERROR 9120 (HY000): cannot find object on object storage
-
SHOW CREATE LOCATION中还观察到一个异常现象:ACCESSKEY回显被拼接进ACCESSID,类似:
ACCESSID = '***''access_key=***'
【附件及日志】
可提供以下材料:
- Hive 表 DDL
- OceanBase 查询报错截图
- OceanBase 相关错误日志
- S3 路径验证命令及结果
-
SHOW CREATE LOCATION输出结果
目前日志关键信息包括:
ERROR 9120: cannot find object on object storageERROR 9026: backup destination is not valid- S3 返回
404 - OceanBase 访问的是目录路径本身,而不是目录下的 parquet 文件
如有需要,我这边可以再使用 obdiag 补充采集诊断信息。
【备注】
当前判断问题不在 Hive 和 S3 数据本身,依据如下:
- Hive/Hue 可正常查询该表
- S3 上 parquet 文件实际存在
- OceanBase 访问时命中的路径是目录,而不是目录下的具体 parquet 文件
- 怀疑 OceanBase 4.4.2 对 Hive +
s3a://目录型 Parquet 外表的处理存在兼容性或缺陷
想确认以下几点:
- OceanBase 4.4.2 是否支持通过 Hive 外表读取
s3a://目录型 Parquet LOCATION - 对 Hive 外表是否会自动枚举目录下 parquet 文件
-
CREATE LOCATION对s3:///s3a://的支持边界 -
SHOW CREATE LOCATION中ACCESSKEY回显异常是否为已知问题 - 是否有补丁版本或规避方案






