Amazon Athena - 在基本 SQL WHERE 查询中无法解析列

Posted

技术标签:

【中文标题】Amazon Athena - 在基本 SQL WHERE 查询中无法解析列【英文标题】:Amazon Athena - Column cannot be resolved on basic SQL WHERE query 【发布时间】:2019-01-29 03:24:22 【问题描述】:

我目前正在评估 Amazon Athena 和 Amazon S3。 我用一个表(awsevaluationtable)创建了一个数据库(testdb)。该表有两列,x (bigint) 和 y (bigint)。

当我跑步时:

SELECT * 
FROM testdb."awsevaluationtable"

我得到了所有的测试数据:

但是,当我尝试基本的 WHERE 查询时:

SELECT * 
FROM testdb."awsevaluationtable" 
WHERE x > 5

我明白了:

SYNTAX_ERROR: line 3:7: Column 'x' cannot be resolved

我尝试了各种变体:

SELECT * FROM testdb.awsevaluationtable WHERE x > 5
SELECT * FROM awsevaluationtable WHERE x > 5
SELECT * FROM testdb."awsevaluationtable" WHERE X > 5
SELECT * FROM testdb."awsevaluationtable" WHERE testdb."awsevaluationtable".x > 5
SELECT * FROM testdb.awsevaluationtable WHERE awsevaluationtable.x > 5

我还确认 x 列存在:

SHOW COLUMNS IN sctawsevaluation

这似乎是一个非常简单的查询,但我不知道出了什么问题。我在documentation 中看不到任何明显的东西。任何建议将不胜感激。

【问题讨论】:

你试过用不同的列名吗? 这让我明白了,谢谢! 在我的情况下,我使用的是column_name="val",而我应该尝试使用column_name='val' ...值上的单引号 单引号也为我做了。语法如此严格似乎很疯狂。 可以在此处找到来自 AWS 的更多详细信息的说明:aws.amazon.com/de/premiumsupport/knowledge-center/… 【参考方案1】:

就我而言,将双引号更改为单引号可以解决此错误。

Presto 对字符串字面量使用单引号,对标识符使用双引号。

https://trino.io/docs/current/migration/from-hive.html#use-ansi-sql-syntax-for-identifiers-and-strings

字符串用单引号分隔,标识符用双引号引用,而不是反引号:

SELECT name AS "User Name"
FROM "7day_active"
WHERE name = 'foo'

【讨论】:

哇,aws Athena 对我也很有效【参考方案2】:

我已根据我当前的调查结果以及我与 AWS Glue 和 Athena 支持团队的联系编辑了对此问题的回复。

我们遇到了同样的问题 - 无法查询 CSV 文件中的第一列。问题归结为 CSV 文件的编码。简而言之,AWS Glue 和 Athena 目前不支持以UTF-8-BOM 编码的 CSV。如果您在 Excel 或 Notepad++ 中打开使用字节顺序标记 (BOM) 编码的 CSV,它看起来就像任何逗号分隔的文本文件。但是,在十六进制编辑器中打开它会揭示潜在的问题。文件开头有一堆特殊字符:,即 BOM。

在 AWS Glue 中处理 UTF-8-BOM CSV 文件时,它会保留这些特殊字符,然后与第一列名称相关联。当您尝试查询 Athena 中的第一列时,会产生错误。

在 AWS 上有解决此问题的方法:

在 AWS Glue 中,编辑表架构并删除第一列,然后使用正确的列名重新插入,或者

在 AWS Athena 中,执行 SHOW CREATE TABLE DDL 以脚本出有问题的表,删除生成脚本中的特殊字符,然后运行脚本创建一个新表可以查询。

为了让您的生活更简单,只需确保您的 CSV 编码为 UTF-8。

【讨论】:

【参考方案3】:

我注意到原始表的 csv 源的列标题带有大写字母(X 和 Y),这与 Athena 中显示的列名不同。 所以我删除了表格,编辑了 csv 文件,使标题为小写(x 和 y),然后重新创建了表格,现在它可以工作了!

【讨论】:

以上是关于Amazon Athena - 在基本 SQL WHERE 查询中无法解析列的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Amazon Athena 上查询(搜索)具有 JSON 值的 sql?

从 Amazon S3 创建表时,Athena 如何将数据与正确的字段匹配?

Amazon Athena:输入没有可行的替代方案

在 Amazon Athena 上为地图属性创建表

如何将带有 NULL 值的引用 CSV 读入 Amazon Athena

Amazon Athena 表创建问题