将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
相关产品推荐
相关产品推荐

