AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

Athena DynamoDB コネクタの「列が見つかりません」エラーを解決する方法を教えてください。

所要時間2分
0

Amazon Athena DynamoDB コネクタを使用すると、「列が見つかりません」というエラーが表示されます。

簡単な説明

「列が見つかりません」エラーは、Athena DynamoDB コネクタの組み込みスキーマ推論の機能が制限されているために発生します。Athena DynamoDB コネクタは AWS Lambda 関数を使用してテーブルスキーマを推測します。次に、テーブル内のデータのサンプルのみを分析します。

この関数はデータのサンプルのみを分析するため、スキーマではサンプルデータの一部ではない列のデータが欠落する可能性があります。Amazon DynamoDB テーブルのデータが正しくフォーマットされていないと、「列が見つかりません」というエラーが発生する場合もあります。

重要:

  • DynamoDB テーブルには、キャメルケース、大文字、または Athena がサポートしていないデータ型を含めることはできません。
  • AWS Glue と Athena は、キャメルケース、大文字、またはアンダースコア以外の特殊文字を読み取ることができません。

解決策

AWS Glue を使用して DynamoDB テーブルからスキーマを推測するには、次のステップを実行します。

  1. AWS Glue クローラーを使用して AWS Glue テーブルを作成します
  2. DynamoDB テーブルスキーマを確認して、クローラーがデータを正しく検出したことを確認します。
  3. ColumnMapping プロパティを使用すると、データ列が欠落するのを防ぐことができます。

**注:**データベース名、テーブル名、および列名は 255 文字以内でなければなりません。使用できる文字には、小文字、数字、およびアンダースコア文字が含まれます。

AWS Glue クローラーを使用して AWS Glue テーブルを作成する

次の手順を実行します。

  1. AWS Glue コンソールを開きます。
  2. ナビゲーションペインの [データカタログ] で、[クローラー] を選択します。
  3. **[クローラー]画面で、[クローラーの作成]**を選択します。
  4. [クローラーのプロパティの設定]ページの[クローラーの詳細]に、クローラーの名前を入力します。次に、[次へ] を選択します。
  5. [データソース設定] で、[未定] を選択します。次に、[データソースの追加] を選択します。
  6. [データソースの追加] ダイアログで、次の情報を入力します。
    [データソース][DynamoDB] を選択します。
    [テーブル名] に、DynamoDB テーブルの名前を入力します。
    [DynamoDB データソースを追加] を選択します。次に、[次へ] を選択します。
  7. [セキュリティ設定の構成] ページの [IAM ロール] で、既存の IAM ロールを選択します。または、[新しい IAM ロールを作成] を選択します。次に、[次へ] を選択します。
    **注:**IAM ロールには必要な権限が必要です。
  8. [出力とスケジュールの設定] ページの [出力設定] で、[データベースの追加] を選択します。新しいタブが開き、[データベースの作成] ページが表示されます。
  9. [データベースの作成] ページで、次の情報を入力します。
    [名前] に、データベースの名前を入力します。
    [場所] の値を [dynamo-db-flag] に設定します。[データベースの作成] を選択します。[出力とスケジューリングの設定] タブに戻ります。
    **注:**Athena がテーブルを認識できるようにするには、dynamo-db-flag と同じ値を使用する必要があります。
  10. [出力とスケジュールの設定] ページの [ターゲットデータベース] で、データベースを選択します。次に、**[次へ]**を選択します。
  11. [クローラーを作成] を選択します。
  12. クローラーページで、[クローラーを実行] を選択します。

テーブルスキーマの確認

次の手順を実行します。

  1. AWS Glue コンソールを開きます。
  2. ナビゲーションペインの [データカタログ] で、[データベース] を選択します。
  3. データベースを選択します。
  4. [テーブル] で、テーブルを選択します。
  5. 列を確認して、列とデータ型が正しく検出されていることを確認します。

列マッピングプロパティの設定

注:列マッピングパラメーターは、最上位の列名にのみ適用されます。ネストされたフィールドには適用されません。

次の手順を実行します。

  1. AWS Glue コンソールを開きます。
  2. ナビゲーションペインの [データカタログ] で、[テーブル] を選択します。
  3. テーブル」 ページで、テーブルを選択します。
  4. [アクション] を選択してから [テーブルの編集] を選択します。
  5. [テーブルの編集] ページの [テーブルプロパティ] で、[追加] を選択し、次の情報を入力します。
    キー」 フィールドに「列マッピング」と入力します。
    」フィールドに、「マッピング値 = 列名」という形式で列名を入力します。
    たとえば、テーブルには「firstName」、「Lastname」、「Age」、「region」の各列が含まれます。次の columnMapping プロパティ値の形式を使用します。
    ファーストネーム = firstName
    苗字 = Lastname
    年齢=Age
    地域=region
  6. Amazon Athena コンソールを開きます。
  7. クエリエディタページの [データ] に、次の情報を入力します。
    [データソース] に DynamoDB と入力します。
    [データベース] で、データベースを選択します。

汎用ユーザーエラー

「GENERIC_USER_ERROR: Encountered an exception」エラーが発生する場合があります。このエラーは、DynamoDB テーブルの列のデータが Athena と互換性がない場合に発生する可能性があります。この問題を解決するには、テーブルのデータを Athena と互換性のあるタイプに変更します。

テーブルのデータ型を変更するには、次の手順を実行します。

  1. AWS Glue コンソールを開きます。
  2. ナビゲーションペインの [データカタログ] で、[テーブル] を選択します。
  3. テーブル」 ページで、更新するテーブルを選択します。
  4. [スキーマ][スキーマの編集] を選択します。
  5. 互換性のないデータを含む列を選択し、[編集] を選択します。
  6. [データタイプ] で、Athena と互換性のあるデータタイプを選択します。次に、[保存] を選択します。
  7. [新しいテーブルバージョンとして保存] を選択します。
  8. Athena コンソールを開きます。
  9. クエリエディタで、クエリを再実行します。

関連情報

AWS Glue で Athena を使用する場合のベストプラクティス

AWS公式
AWS公式更新しました 10ヶ月前