web-dev-qa-db-ja.com

Amazon Athena-基本的なSQL WHEREクエリで列を解決できない

現在、Amazon AthenaとAmazon S3を評価しています。 1つのテーブル(awsevaluationtable)を持つデータベース(testdb)を作成しました。テーブルには、x(bigint)とy(bigint)の2つの列があります。

私が走ると:

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 に明らかなものは何もありません。任意の提案をいただければ幸いです。

8
Joel

現在の調査結果と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 AthenaSHOW CREATE TABLE DDLを実行して問題のあるテーブルをスクリプト化し、生成されたスクリプトから特殊文字を削除します、次にスクリプトを実行して、クエリを実行できる新しいテーブルを作成します。

簡単にするために、CSVがUTF-8としてエンコードされていることを確認してください。

4
owl7

元のテーブルのcsvソースには、Athenaで表示されていた列名とは異なり、大文字の列ヘッダー(XおよびY)が含まれていることに気付きました。そこで、テーブルを削除し、ヘッダーが小文字(xとy)になるようにcsvファイルを編集してから、テーブルを再作成し、動作しました。

0
Joel