Joe*_*oel 5 amazon-s3 amazon-web-services amazon-athena
我目前正在评估Amazon Athena和Amazon S3。我用一个表(awsevaluationtable)创建了一个数据库(testdb)。该表有两列,x(bigint)和y(bigint)。
当我跑步时:
SELECT *
FROM testdb."awsevaluationtable"
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试基本的WHERE查询时:
SELECT *
FROM testdb."awsevaluationtable"
WHERE x > 5
Run Code Online (Sandbox Code Playgroud)
我得到:
SYNTAX_ERROR: line 3:7: Column 'x' cannot be resolved
Run Code Online (Sandbox Code Playgroud)
我尝试了各种变化:
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
Run Code Online (Sandbox Code Playgroud)
我还确认x列存在:
SHOW COLUMNS IN sctawsevaluation
Run Code Online (Sandbox Code Playgroud)
nek*_*uuu 11
就我而言,将双引号更改为单引号可以解决此错误。
Presto 对字符串文字使用单引号,对标识符使用双引号。
字符串用单引号分隔,标识符用双引号引用,而不是反引号:
Run Code Online (Sandbox Code Playgroud)SELECT name AS "User Name" FROM "7day_active" WHERE name = 'foo'
我已根据我当前的调查结果以及我与 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。
| 归档时间: |
|
| 查看次数: |
3801 次 |
| 最近记录: |