Boto3 无法从 DynamoDB 检索项目
Boto3 unable to retrieve items from DynamoDB
所以我正在使用 DynamoDB 来存储我的 Spark 作业的状态。我创建了名为 scheduleTime(Partition key) 和 appName(Range key) 的 Primary keys 和我的 spark作业完成后写入作业的状态。在我的 spark 作业完成后,另一个 Python 脚本 被安排来检索作业的状态并在出现故障时重新启动应用程序。对于一组特定的 主键 ,我在 DynamoDB table 中没有得到任何项目,有时即使记录存在并且当我使用 UI 我可以看到各自的记录。我为此使用 boto3 库 table.get_item() 方法。代码片段如下:
table.get_item(
Key = {
'scheduleTime': scheduleTime,
'appName': appName
}
)
所以基本上问题是 DynamoDB Python boto3 库的 get_item() 函数支持不一致的读取默认(这有点奇怪,因为其他记录检索方法如 batch_get_items() 提供一致的读取能力)。所以我只需要将 ConsistantRead 标志启用为 True。
response = table.get_item(
Key = {
"scheduleTime": scheduleTime,
"appName": appName
},
ConsistentRead=True
)
所以上面的代码片段非常适合立即读取。
所以我正在使用 DynamoDB 来存储我的 Spark 作业的状态。我创建了名为 scheduleTime(Partition key) 和 appName(Range key) 的 Primary keys 和我的 spark作业完成后写入作业的状态。在我的 spark 作业完成后,另一个 Python 脚本 被安排来检索作业的状态并在出现故障时重新启动应用程序。对于一组特定的 主键 ,我在 DynamoDB table 中没有得到任何项目,有时即使记录存在并且当我使用 UI 我可以看到各自的记录。我为此使用 boto3 库 table.get_item() 方法。代码片段如下:
table.get_item(
Key = {
'scheduleTime': scheduleTime,
'appName': appName
}
)
所以基本上问题是 DynamoDB Python boto3 库的 get_item() 函数支持不一致的读取默认(这有点奇怪,因为其他记录检索方法如 batch_get_items() 提供一致的读取能力)。所以我只需要将 ConsistantRead 标志启用为 True。
response = table.get_item(
Key = {
"scheduleTime": scheduleTime,
"appName": appName
},
ConsistentRead=True
)
所以上面的代码片段非常适合立即读取。