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

时间:2018-08-22 19:44:56

标签: amazon-web-services amazon-s3 amazon-athena

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

当我跑步时:

SELECT * 
FROM testdb."awsevaluationtable"

我获得了所有测试数据: Successful Query

但是,当我尝试基本的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

Column query

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

3 个答案:

答案 0 :(得分:4)

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

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

https://prestosql.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'

答案 1 :(得分:1)

我已经根据我的当前发现以及与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 中,编辑表架构并删除第一列,然后使用正确的列名或ORp重新插入它

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

为简化生活,只需确保CSV编码为UTF-8。

答案 2 :(得分:0)

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