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

使用查询从DynamoDB检索所有项目?

关苗宣
2023-03-14

我正在尝试使用查询检索dynamodb表中的所有项。下面是我的代码:

import boto.dynamodb2
from boto.dynamodb2.table import Table
from time import sleep

c    = boto.dynamodb2.connect_to_region(aws_access_key_id="XXX",aws_secret_access_key="XXX",region_name="us-west-2")

tab  = Table("rip.irc",connection=c)

x    = tab.query()

for i in x:
    print i
    sleep(1)

但是,我收到以下错误:

ValidationException: ValidationException: 400 Bad Request
{'message': 'Conditions can be of length 1 or 2 only', '__type': 'com.amazon.coral.validate#ValidationException'}

我的代码非常简单,出自boto dynamodb2文档,因此我不确定为什么会出现上述错误。任何见解都将受到赞赏(这是新的,有点迷失)。谢谢

编辑:我有一个散列键和一个范围键。我能够通过特定的哈希键进行查询。例如

x = tab.query(hash__eq="2014-01-20 05:06:29")

但我如何检索所有项目?

共有3个答案

季阳朔
2023-03-14

.scan()不会由于表分页而自动返回表的所有元素。存在1Mb最大响应限制Dynamodb最大响应限制

下面是boto3扫描的递归实现:

import boto3
dynamo = boto3.resource('dynamodb')


def scanRecursive(tableName, **kwargs):
        """
        NOTE: Anytime you are filtering by a specific equivalency attribute such as id, name 
        or date equal to ... etc., you should consider using a query not scan

        kwargs are any parameters you want to pass to the scan operation
        """
        dbTable = dynamo.Table(tableName)
        response = dbTable.scan(**kwargs)
        if kwargs.get('Select')=="COUNT":
            return response.get('Count')
        data = response.get('Items')
        while 'LastEvaluatedKey' in response:
            response = kwargs.get('table').scan(ExclusiveStartKey=response['LastEvaluatedKey'], **kwargs)
            data.extend(response['Items'])
        return data
卞安邦
2023-03-14

我在用groovy,但它会给你一个提示。错误:

{'message': 'Conditions can be of length 1 or 2 only'}

告诉你你的关键条件是长度1-

    String keyQuery = " hashKey = :hashKey and rangeKey between :start and :end "
    queryRequest.setKeyConditionExpression(keyQuery)// define key query
    String filterExpression = " yourParam = :yourParam "
    queryRequest.setFilterExpression(filterExpression)// define filter expression
    queryRequest.setExpressionAttributeValues(expressionAttributeValues)
    queryRequest.setSelect('ALL_ATTRIBUTES')
    QueryResult queryResult = client.query(queryRequest)
常子濯
2023-03-14

啊,好吧,算了。如果有人需要:

如果不指定特定的哈希键,则无法对表使用查询方法。取而代之的方法是扫描。因此,如果我替换:

x    = tab.query()

具有

x    = tab.scan()

我把所有的东西都放在桌子上。

 类似资料:
  • 如何使用节点扫描AWS dynamodb中的所有项目。js。我在这里张贴我的代码。 我已经跟踪了链接https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.04.html 过了一会儿我就有时间离开这里了。我也检查了这个链接,如何使用节点从“AWS dynamodb”获取/扫描所有项

  • 所以我使用DynamoDB来存储我的火花作业的状态。我已经创建了主键名为计划时间(分区键)和appName(范围键)和我的火花作业写作业完成后的状态。在我的火花作业完成后,另一个Python脚本计划检索作业的状态,并在失败时重新启动应用程序。有时,即使记录存在,我也不会在DynamoDB表中为一组特定的主键获取任何项目,当我使用用户界面时,我可以看到相应的记录。我使用boto3库table.get

  • 假设我有一个DynamoDB表,比如 每个项目都有一个名称,属于一个客户,所以我也有一个索引 假设我有以下数据: 现在,我想查询特定客户的所有项目,并过滤部分名称的结果(本质上是一个搜索操作)。例如,给我所有属于客户42且名称中包含“果汁”的项目(橙汁和苹果汁是预期结果)。 如果我查询,我将得到一个错误,说不支持。我可以理解这个限制,因为意味着必须扫描所有项目(在给定的散列键内),但是,你可以用查

  • 问题内容: 文件夹中的文档很少,我想检查该文件夹中的所有文档是否都已编制索引。为此,对于该文件夹中的每个文档名称,我想循环遍历ES中索引的文档并进行比较。所以我想检索所有文档。 有喜欢同一个问题的其他几个可能的重复[检索AElasticSearch)NEST查询所有记录,并在此处输入链接的描述,但他们没有帮助我的文档已经从那个时候改变了。(有什么关于扫描当前文档中) 我尝试使用。但是根据文档,将检

  • 使用DynamoDB,没有简单的方法可以对列执行索引范围查询。主键、本地二级索引和全局二级索引都需要分区键来进行范围查询。 例如,假设我有一个带有数字分数属性的高分表。使用索引范围查询无法获得前10名或前25至50名 那么,执行这项极其常见的任务的惯用方式或首选方式是什么呢? > 接受表格扫描。 使用静态分区键并利用分区查询。 使用固定数量的静态分区键并使用多个分区查询。

  • 如何在Gremlin查询中检索从根顶点开始的所有顶点属性? 我们有以下结构: 根顶点:Employee 边缘:EdCompany,EdDepartment,EdRole顶点:公司,部门,角色 我们试图接收与根顶点连接的其他顶点的数据。有人这样想: 我们尝试了该查询,但返回了一个复杂的JSON: 编辑: 我们还尝试了Kelvin建议的查询: 堆栈跟踪:提交查询失败:g.V().hasLabel(“E