Hive を使用して Amazon DynamoDB テーブルを Amazon EMR にインポートしようとすると、「The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code」(指定されたキー要素がスキーマ (サービス: AmazonDynamoDBv2; ステータスコード: 400; エラーコード) というエラーが表示されます。
解決方法
このエラーは一般的に、不正なスキーマ、破損したデータ、一致しないデータがある場合に発生します。これらの一般的な原因を排除した後でもエラーメッセージが表示される場合は、Hive アプリケーションのログを確認してください。ログ記録をオンにすると、次のような場所で Amazon Simple Storage Service (Amazon S3) のログを確認できます。
s3://example-log-location/example-cluster-id/node/example-ec2-master-instance-id/applications/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 スクリプトを移動します。
関連情報
DynamoDB での Amazon EMR オペレーションのパフォーマンスを最適化する
DynamoDBMapper クラス
ログファイルを表示する