Amazon Athena DynamoDB コネクタを使用すると、「列が見つかりません」というエラーが表示されます。
簡単な説明
「列が見つかりません」エラーは、Athena DynamoDB コネクタの組み込みスキーマ推論の機能が制限されているために発生します。Athena DynamoDB コネクタは AWS Lambda 関数を使用してテーブルスキーマを推測します。次に、テーブル内のデータのサンプルのみを分析します。
この関数はデータのサンプルのみを分析するため、スキーマではサンプルデータの一部ではない列のデータが欠落する可能性があります。Amazon DynamoDB テーブルのデータが正しくフォーマットされていないと、「列が見つかりません」というエラーが発生する場合もあります。
重要:
- DynamoDB テーブルには、キャメルケース、大文字、または Athena がサポートしていないデータ型を含めることはできません。
- AWS Glue と Athena は、キャメルケース、大文字、またはアンダースコア以外の特殊文字を読み取ることができません。
解決策
AWS Glue を使用して DynamoDB テーブルからスキーマを推測するには、次のステップを実行します。
- AWS Glue クローラーを使用して AWS Glue テーブルを作成します。
- DynamoDB テーブルスキーマを確認して、クローラーがデータを正しく検出したことを確認します。
- ColumnMapping プロパティを使用すると、データ列が欠落するのを防ぐことができます。
**注:**データベース名、テーブル名、および列名は 255 文字以内でなければなりません。使用できる文字には、小文字、数字、およびアンダースコア文字が含まれます。
AWS Glue クローラーを使用して AWS Glue テーブルを作成する
次の手順を実行します。
- AWS Glue コンソールを開きます。
- ナビゲーションペインの [データカタログ] で、[クローラー] を選択します。
- **[クローラー]画面で、[クローラーの作成]**を選択します。
- [クローラーのプロパティの設定]ページの[クローラーの詳細]に、クローラーの名前を入力します。次に、[次へ] を選択します。
- [データソース設定] で、[未定] を選択します。次に、[データソースの追加] を選択します。
- [データソースの追加] ダイアログで、次の情報を入力します。
[データソース] で [DynamoDB] を選択します。
[テーブル名] に、DynamoDB テーブルの名前を入力します。
[DynamoDB データソースを追加] を選択します。次に、[次へ] を選択します。
- [セキュリティ設定の構成] ページの [IAM ロール] で、既存の IAM ロールを選択します。または、[新しい IAM ロールを作成] を選択します。次に、[次へ] を選択します。
**注:**IAM ロールには必要な権限が必要です。
- [出力とスケジュールの設定] ページの [出力設定] で、[データベースの追加] を選択します。新しいタブが開き、[データベースの作成] ページが表示されます。
- [データベースの作成] ページで、次の情報を入力します。
[名前] に、データベースの名前を入力します。
[場所] の値を [dynamo-db-flag] に設定します。[データベースの作成] を選択します。[出力とスケジューリングの設定] タブに戻ります。
**注:**Athena がテーブルを認識できるようにするには、dynamo-db-flag と同じ値を使用する必要があります。
- [出力とスケジュールの設定] ページの [ターゲットデータベース] で、データベースを選択します。次に、**[次へ]**を選択します。
- [クローラーを作成] を選択します。
- クローラーページで、[クローラーを実行] を選択します。
テーブルスキーマの確認
次の手順を実行します。
- AWS Glue コンソールを開きます。
- ナビゲーションペインの [データカタログ] で、[データベース] を選択します。
- データベースを選択します。
- [テーブル] で、テーブルを選択します。
- 列を確認して、列とデータ型が正しく検出されていることを確認します。
列マッピングプロパティの設定
注:列マッピングパラメーターは、最上位の列名にのみ適用されます。ネストされたフィールドには適用されません。
次の手順を実行します。
- AWS Glue コンソールを開きます。
- ナビゲーションペインの [データカタログ] で、[テーブル] を選択します。
- 「テーブル」 ページで、テーブルを選択します。
- [アクション] を選択してから [テーブルの編集] を選択します。
- [テーブルの編集] ページの [テーブルプロパティ] で、[追加] を選択し、次の情報を入力します。
「キー」 フィールドに「列マッピング」と入力します。
「値」フィールドに、「マッピング値 = 列名」という形式で列名を入力します。
たとえば、テーブルには「firstName」、「Lastname」、「Age」、「region」の各列が含まれます。次の columnMapping プロパティ値の形式を使用します。
ファーストネーム = firstName
苗字 = Lastname
年齢=Age
地域=region
- Amazon Athena コンソールを開きます。
- クエリエディタページの [データ] に、次の情報を入力します。
[データソース] に DynamoDB と入力します。
[データベース] で、データベースを選択します。
汎用ユーザーエラー
「GENERIC_USER_ERROR: Encountered an exception」エラーが発生する場合があります。このエラーは、DynamoDB テーブルの列のデータが Athena と互換性がない場合に発生する可能性があります。この問題を解決するには、テーブルのデータを Athena と互換性のあるタイプに変更します。
テーブルのデータ型を変更するには、次の手順を実行します。
- AWS Glue コンソールを開きます。
- ナビゲーションペインの [データカタログ] で、[テーブル] を選択します。
- 「テーブル」 ページで、更新するテーブルを選択します。
- [スキーマ] で [スキーマの編集] を選択します。
- 互換性のないデータを含む列を選択し、[編集] を選択します。
- [データタイプ] で、Athena と互換性のあるデータタイプを選択します。次に、[保存] を選択します。
- [新しいテーブルバージョンとして保存] を選択します。
- Athena コンソールを開きます。
- クエリエディタで、クエリを再実行します。
関連情報
AWS Glue で Athena を使用する場合のベストプラクティス