AWS Glue クローラを使用して CSV ファイルから Amazon Athena テーブルを作成しました。テーブルの最初の列に対してクエリを実行すると、「SYNTAX_ERROR: 行 1:9: 列 'column_id' を解決できません」のようなエラーメッセージが表示されます。

通常、このエラーが発生するのは、CSV ファイルが UTF-8 形式で暗号化されていてバイトオーダーマーク (BOM) が付いている場合です。AWS Glue は BOM を認識せず、BOM を疑問符に変更します。疑問符は Amazon Athena で認識されません。

この構文エラーを解決するには、Athena または AWS Glue で疑問符を削除します。

バイトオーダーマークは、最初の列名の先頭に自動的に追加されます。バイトオーダーマークを表示するには、ファイルをヘックスエディタで開きます。次のように表示されます。 

         
1 POSTAL_CODE_START  POSTAL_CODE_START    NM_REGION REGION_CODE
2 69900001 69924999 AC - Capital 15

このファイルに対して AWS Glue クローラを実行すると、クローラはバイトオーダーマークの横に疑問符を追加します。クローラは列ヘッダーを列名として使用するため、Athena テーブルの最初の列は ?POSTAL_CODE_START のような名前になります。(SHOW CREATE TABLE を実行すると、疑問符を表示できます。) Athena では、アンダースコア (_) 以外の特殊文字を列名に使用できません。

Athena で疑問符を削除するには

  1. クローラの DDL ステートメント (SHOW CREATE TABLE table_name) をコピーします。
  2. 疑問符を削除します。
  3. このステートメントを実行します。
    注意: テーブルのプロパティに必ず 'skip.header.line.count'='1' を含めてください。

AWS Glue で疑問符を削除するには

  1. AWS Glue コンソールを開きます。
  2. テーブルを選択します。
  3. [アクション] ドロップダウンメニューから [詳細を表示] を選択します。
  4. [スキーマの編集] を選択します。
  5. 最初の列を選択して、その名前を変更します。必要に応じて、列と同じ名前を使用できます。
    注意: 名前を入力すると、AWS Glue によって疑問符が削除されます (コンソールに疑問符が表示されていない場合でも削除されます)。
  6. ページの右上の [保存] を選択します。

テーブルのスキーマを再構築しないように AWS Glue を設定するには

同じテーブルに対してクローラを再度実行する前に、以下の操作を行います。

  1. AWS Glue コンソールで、[クローラ] を選択し、使用しているクローラを選択します。
  2. [アクション] ドロップダウンメニューを開き、[クローラの編集] を選択します。
  3. [出力] を選択します。
  4. [設定オプション] を展開します。
  5. [クローラがデータストアのスキーマ変更を検出した場合に、AWS Glue はデータカタログでテーブルの更新をどのように取り扱いますか?] の下で以下のオプションを選択します。
    変更を無視して、データカタログのテーブルを変更しない。
    すべての新規および既存のパーティションをテーブルからのメタデータで更新します。
  6. [AWS Glue でデータストアの削除後のオブジェクトはどのように取り扱いますか?] の下で [データカタログからテーブルとパーティションを削除する] を選択します。
  7. [次へ] を選択し、[完了] を選択します。

このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2019 年 01 月 07 日