Apache Hive を使用して Amazon DynamoDB テーブルを Amazon EMR にインポートすると、「Provided key element doesn’t match the schema」というエラーが表示されます。
解決策
スキーマに誤りがあるか、データが破損しているか、データに不一致がある場合、次のエラーが発生する可能性があります。
「The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: #ABC###########) (指定したキー要素がスキーマと一致しません)」
エラーの原因が、スキーマの誤り、データの破損、データの不一致ではなかった場合は、Hive アプリケーションログを確認してください。Hive アプリケーションログは、Amazon EMR クラスターのプライマリノードに接続し、/mnt/var/log/hive ディレクトリに移動すると確認できます。
ログ記録を有効化済みの場合は、Amazon Simple Storage Service (Amazon S3) でログを確認できます。パスには、s3://log-location/cluster-id/node/primary-instance-id/applications/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)
エラーメッセージ内の行 s3://log-location/cluster-id/node/primary-instance-id/applications/hive は Hive スクリプトの一部です。この Hive スクリプトは、入力ファイルと同じ Amazon S3 の場所にあります。インポートジョブは Hive スクリプトをデータとして DynamoDB テーブルに送信し、インポートジョブで使用します。この問題を解決するには、Hive スクリプトを別の Amazon S3 の場所に移動します。
関連情報
Amazon EMR ログファイルを確認する