我正在研究使用aws athena对大量json文件进行查询。
我的json文件有以下格式(为方便起见,预先打印):
{
"data":[
{<ROW1>},
{<ROW2>},
...
],
"foo":[...],
"bar":[...]
}
“data”数组中包含的行是应该查询的。json文件的其余部分并不重要。
这可以在不修改json文件的情况下完成吗?如果是,怎么做?据我所知,serdes(或者是hive本身?)假设每行输入有一行输出,这意味着在上传到s3之前,我只能修改所有json文件(并将它们转换为jsonl?)。
(雅典娜使用hive json serde和openx json serde;afaict,没有选择写我自己的serde或文件格式…)
1条答案
按热度按时间fwzugrvs1#
你不能让serde自动完成它,但是你可以在查询中实现你想要的。然后,可以创建一个视图来模拟数据元素已展开的表。
这样做的方法是使用
UNNEST
关键字。这将为数组中的每个元素生成一个新行:如果您的json如下所示:
查询结果如下所示: