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

将JSON导入Athena表无结果,求数组拆分建表解决方法

解决Athena中JSON数组拆分为行的问题

首先,你的JSON数据是整个文件为数组结构,默认Hive JsonSerDe对这种格式支持有限,加上需要将数组元素拆分为单独行,按以下步骤操作即可解决:

1. 创建正确的外部表

使用支持JSON数组的SerDe,并将id定义为数组类型,同时注意LOCATION指向文件所在目录而非单个文件:

CREATE EXTERNAL TABLE IF NOT EXISTS id_table (
  id array<bigint>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
)
LOCATION 's3://data-bucket/'; -- 此处填写存储data.json的目录路径,而非具体文件

2. 查询并拆分数组为行

通过UNNEST函数将数组中的每个元素拆分为单独行:

SELECT exploded_id AS id
FROM id_table
CROSS JOIN UNNEST(id) AS t(exploded_id);

执行后即可得到目标结果:

id
1984262
1984260

之前建表无效的原因

  • 第一个表将id定义为string,与JSON中的数组类型不匹配,无法解析数据;
  • 后两个表虽定义了数组类型,但要么使用的SerDe对整文件数组格式支持差,要么LOCATION指向单个文件而非目录,导致数据无法正确加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:50:19