Amazon EMR で Hive を使用して DynamoDB テーブルをインポートするときに発生する「The provided key element does not match the schema」エラーを解決するには、どうしたらいいですか?

最終更新日: 2020 年 10 月 28 日

Hive を使用して Amazon DynamoDB テーブルを Amazon EMR にインポートしようとすると、「The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code」というエラーメッセージが表示されます。

解決方法

このエラーは一般的に、不正なスキーマ、破損したデータ、一致しないデータがある場合に発生します。これらの一般的な原因を排除した後でもエラーメッセージが表示される場合は、Hive アプリケーションのログを確認してください。ログは、EMR クラスターのマスターノードの /mnt/var/log/hive ディレクトリにあります。次のようなログを確認してください。

Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {"countryasin":"LOCATION '${INPUT}';","hts_type":null,"hts_code":null}
at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:565)
at org.apache.hadoop.hive.ql.exec.tez.MapRecordSource.processRow(MapRecordSource.java:86)
... 17 more
Caused by: java.lang.RuntimeException: com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: 0FF3KB36M2SJD8E79BUPOUP943VV4KQNSO5AEMVJF66Q9ASUAAJG)

{"countryasin":"LOCATION '${INPUT}';","hts_type":null,"hts_code":null} のエラーメッセージで指摘されている行は、Hive スクリプトの一部です。この Hive スクリプトは、入力ファイルと同じ Amazon Simple Storage Service (Amazon S3) の場所にあります。Hive スクリプトは、インポートジョブで使用されます。また、データとしてインポートジョブから DynamoDB テーブルに送信されます。この問題を解決するには、Amazon S3 の別の場所に Hive スクリプトを移動します。