首页 > 解决方案 > Athena 查询失败,字段不存在

问题描述

我有 JSON 格式的 S3 数据文件,在运行胶水爬虫后,数据在 Athena 表中可用。

在 Athena 表中,我有一个类型为 的列(比如属性)<struct<x:string>,<y: int>,etc.>。现在,在某个截止日期之后,z在此属性列中添加了一个新字段(例如 ),现在数据类型为<struct<x:string>,<y: int>,<z:String> , <etc.>>

要求

我想使用相同的查询来查询旧数据和新数据,该查询基于z.

问题

问题是以前的数据不包含此字段,当我应用该where子句时,由于在旧数据中找不到该字段,因此会出错。是否可以选择不使旧数据的查询失败或将属性中的缺失字段视为空?

标签: sqlamazon-web-servicesamazon-athena

解决方案


您可以使用COALESCE()为 插入默认值z。这样的事情应该可以解决问题:

SELECT col.x, col.y, COALESCE(col.z, 0)
FROM table
WHERE COALESCE(col.z, 0) > 0;

推荐阅读