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 如何将数据与正确的字段匹配?