当前位置: 首页 > 知识库问答 >
问题:

用boto3完成发电机B的扫描

郎诚
2023-03-14

我的表大约是220mb,里面有250k记录。我试图将所有这些数据拉入Python。我意识到这需要一个大块的批处理过程,并循环通过,但我不确定如何设置批处理,以开始前一个离开。

有什么方法可以过滤我的扫描吗?据我所知,过滤是在加载后发生的,加载在1mb时停止,因此我实际上无法扫描新对象。

任何协助都将不胜感激。

import boto3
dynamodb = boto3.resource('dynamodb',
    aws_session_token = aws_session_token,
    aws_access_key_id = aws_access_key_id,
    aws_secret_access_key = aws_secret_access_key,
    region_name = region
    )

table = dynamodb.Table('widgetsTableName')

data = table.scan()

共有3个答案

陆伟
2023-03-14

根据Jordon Phillips的答案,下面是如何通过分页传递过滤器表达式的方法:

import boto3

client = boto3.client('dynamodb')
paginator = client.get_paginator('scan')
operation_parameters = {
  'TableName': 'foo',
  'FilterExpression': 'bar > :x AND bar < :y',
  'ExpressionAttributeValues': {
    ':x': {'S': '2017-01-31T01:35'},
    ':y': {'S': '2017-01-31T02:08'},
  }
}

page_iterator = paginator.paginate(**operation_parameters)
for page in page_iterator:
    # do something

苏鸿才
2023-03-14

boto3提供分页器,为您处理所有分页细节。这是扫描分页器的文档页面。基本上,您可以这样使用它:

import boto3

client = boto3.client('dynamodb')
paginator = client.get_paginator('scan')

for page in paginator.paginate():
    # do something
贡建修
2023-03-14

我认为Amazon DynamoDB留档关于表扫描回答了你的问题。

简而言之,您需要在响应中检查LastEvaluatedKey。下面是使用您的代码的示例:

import boto3
dynamodb = boto3.resource('dynamodb',
                          aws_session_token=aws_session_token,
                          aws_access_key_id=aws_access_key_id,
                          aws_secret_access_key=aws_secret_access_key,
                          region_name=region
)

table = dynamodb.Table('widgetsTableName')

response = table.scan()
data = response['Items']

while 'LastEvaluatedKey' in response:
    response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
    data.extend(response['Items'])
 类似资料:
  • 我试过这个: 结果:s3上的5.9 gig文件。似乎不包含多个部分。 我找到了这个示例,但是没有定义

  • 来自Azure的DocumentDB(Cosmos db)后台到AWS DynamoDB,用于已经使用dynamo db的应用程序。 我对DynamoDB上的分区键感到困惑。 据我所知,分区键用于在数据增长时将数据隔离到不同的分区,但是许多人建议使用主键作为分区键,例如用户ID、客户ID、订单ID。在这种情况下,我不确定我们如何获得更好的性能,因为我们有很多分区。所以一个查询可能需要在多个服务器上

  • 我在这里找到了一些关于如何通过链接的答案来完成这项工作的帮助。但它不适合我的用例。我的目标是获取DynamoDB表中的所有记录(用户名和电子邮件)。查看文档时,我必须使用LastEvaluatedKey或ExclusiveStartKey来实现分页。任何指导都将不胜感激。 谢谢

  • JavaScript ES6最令人兴奋的新功能之一是一种新的功能,称为生成器。 在生成器之前,整个脚本通常用于从上到下的顺序执行,没有简单的方法来停止代码执行并在以后使用相同的堆栈重新启动。 生成器是可以退出并稍后重新输入的功能。 他们的上下文(变量绑定)将在重新入口处保存。 生成器允许我们在两者之间停止代码执行。 因此,让我们来看一个简单的生成器。 var generator_func = fu

  • 我为java应用程序配置了以下参数-Xmx=46g,-Xms=46g,NewSize=2g。 我们没有为permgen配置大小,但在JCONSOLE中,它显示最大perm gen大小为83mb。 在运行稳定性测试时,我们可以看到,我在GC日志中随机得到以下内容。 [完整GC(永久发电完整)489.822:[CMS:11384171K- 我找不到这个GC调用的原因,因为有用于永久生成的可用空间(因为

  • 只是想知道在我完成输入后如何终止程序?因为在几次“输入”之后扫描仪仍然会继续,假设我要继续输入...我试过了: 和 它们不起作用....程序继续运行,打乱了初衷,