presto - 尽管有双引号,但当键是保留关键字时,AWS Athena 行转换失败
问题描述
我正在处理 AWS Athena 中的数据,并且正在尝试匹配一些输入数据的结构。这涉及一个嵌套结构,其中“from”是一个键。这始终会引发错误。
我已将问题缩小到当您尝试使用保留关键字作为行中的键时 Athena 查询不起作用的事实。以下示例演示了此行为。
这个简单的案例
SELECT CAST(ROW(1) AS ROW("from" INTEGER))
失败并出现以下错误:GENERIC_INTERNAL_ERROR: Unable to create class com.facebook.presto.execution.TaskInfo from JSON response: [io.airlift.jaxrs.JsonMapperParsingException: Invalid json for Java type
这个简单的案例运行成功:
SELECT CAST(ROW(1) AS ROW("work" INTEGER))
Athena 文档说将保留关键字括在双引号中以在 SELECT 语句中使用它们,但上面的示例表明,当使用关键字作为行中的键时,查询仍然会失败。
我知道我还有其他选择,但这种方式是迄今为止最方便的。在这种情况下有没有办法使用保留关键字?
解决方案
正如 Piotr 在评论中提到的,这是一个 Presto 错误,鉴于它是在几天前发布的,因此不太可能很快在 Athena 中修复。当在 Presto 中修复错误时,它可能会进入 Athena,我知道 Athena 团队有时会应用上游补丁,即使 Athena 是基于旧版本的 Presto。这可能不足以出现在他们的雷达上,但是如果您使用 AWS 开具支持票证,它可能会发生(请务必明确您不需要任何解决方法,只需报告错误,否则您将有支持人员花费太多时间试图帮助您关闭和重新打开事物)。
推荐阅读
- android - Tablayout 后面的视差滚动图像
- ios - How can I add image in UITableView section header using swift?
- java - Where can I find the Java documentation for "==" equals operand?
- java - 在 Java 中,如何在没有循环语句的情况下使用 Scanner 类在一行中接收多个输入?
- python - 无法从 kivy 对象获取 id
- r - ggplot2:将变量移交给函数(非标准评估)
- mysql - Laravel 在其他表中查找平均结果
- mongodb - 使用 GridFS 使用 mongo-go-driver 将文件上传到 MongoDB
- javascript - Generate unique random numbers
- c# - OnTriggerEnter doesn't trigger when hitting another object