現在、Amazon AthenaとAmazon S3を評価しています。 1つのテーブル(awsevaluationtable)を持つデータベース(testdb)を作成しました。テーブルには、x(bigint)とy(bigint)の2つの列があります。
私が走ると:
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 に明らかなものは何もありません。任意の提案をいただければ幸いです。
現在の調査結果とAWS GlueとAthenaの両方のサポートチームとの連絡に基づいて、この問題への対応を編集しました。
同じ問題が発生しました-CSVファイルの最初の列でクエリを実行できません。問題は、CSVファイルのエンコードに起因します。つまり、AWS GlueとAthenaは現在 TF-8-BOM でエンコードされたCSVをサポートしていません。 ExcelまたはNotepad ++でバイトオーダーマーク(BOM)でエンコードされたCSVを開くと、コンマ区切りのテキストファイルのように見えます。ただし、それを16進エディターで開くと、根本的な問題が明らかになります。ファイルの先頭に一連の特殊文字があります:ï"¿すなわちBOM。
UTF-8-BOM CSVファイルがAWS Glueで処理されると、これらの特殊文字が保持され、最初の列名に関連付けられます。 Athena内の最初の列に対してクエリを実行しようとすると、エラーが発生します。
AWSでは、これを回避する方法があります。
AWS Glueで、テーブルスキーマを編集し、最初の列を削除してから、適切な列名で再度挿入するか、または
AWS Athenaで SHOW CREATE TABLE DDLを実行して問題のあるテーブルをスクリプト化し、生成されたスクリプトから特殊文字を削除します、次にスクリプトを実行して、クエリを実行できる新しいテーブルを作成します。
簡単にするために、CSVがUTF-8としてエンコードされていることを確認してください。
元のテーブルのcsvソースには、Athenaで表示されていた列名とは異なり、大文字の列ヘッダー(XおよびY)が含まれていることに気付きました。そこで、テーブルを削除し、ヘッダーが小文字(xとy)になるようにcsvファイルを編集してから、テーブルを再作成し、動作しました。