标签: amazon-dynamodb

两个索引字段的DynamoDB查询表

在我的dynamoDB表中,我有两个字段,我打算查询特定的值.一个将返回几个结果,第二个将返回一个结果(也就是一行).

我已经有一个范围键字段,即原始插入的日期.

如果我想要通过单个字段查询两个字段,我有哪些选择?

根据我的理解,有一个创建二级索引的选项,但我必须与哈希键一起查询,这不是我需要的.是否有任何选项可以在单个表中实现,而不是为该查询创建第二个表?

示例文件夹表:

 user_id (hash key)    
 date_created (range key)    
 folder_id
Run Code Online (Sandbox Code Playgroud)

第一个查询:按日期降序选择特定用户订单的所有文件夹ID

第二个查询:为特定的folder_id选择单个raw

如果我在folder_id上使用二级索引,我将不得不在user_id(哈希键)旁边查询它,正如您所看到的那样,而不是我想要实现的目标.

谢谢.

amazon-web-services amazon-dynamodb

0
推荐指数
1
解决办法
3075
查看次数

Elastic Beanstalk 无法连接 DynamoDB

我真的是aws的新手,如果这是一个愚蠢的问题,我很抱歉。

我做了一个与在线 DynamoDB 表连接的网站,它完全在我的本地工作,但是当我在我的 Elastic Beanstalk 环境中部署网站代码时,它没有连接到 DynamoDB 表。

有什么我应该做的配置吗?

恐怕没有其他人遇到过这个问题。

我的网站是由 aws.phar 使用 aws php sdk 编写的。

我确实为 iam 用户创建了一个策略,如下所示:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "dynamodb:GetItem",
                    "dynamodb:PutItem"
                ],
                "Effect": "Allow",
                "Resource": [DynamoDB table],
                "Condition": {
                    "ForAllValues:StringEquals": {
                        "dynamodb:Attributes": [
                            [Lists of attributes]
                        ]
                    }
                }
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 amazon-web-services amazon-dynamodb aws-php-sdk amazon-elastic-beanstalk

0
推荐指数
1
解决办法
1665
查看次数

DynamoDB-为什么不能在关键条件表达式中使用“ _”作为前缀?

我正在使用AWS DynamoDB DocumentClient查询我的DynamoDB表。在我的表中,我有一个名为“ _id”的属性,该属性为每个条目保留唯一的ID。当我尝试基于此ID查询记录时,最终收到一条错误消息:“无效的KeyConditionExpression:语法错误;令牌:\“ _ \”,附近:\“ _ id \”“。进行此查询的代码如下。

    function findById(id) {

     //Build query
    var params = {};
    params.TableName = "recordDev";
    params.IndexName = "_id";
    params.KeyConditionExpression = '_id = :id';
    params.ExpressionAttributeValues = {
      ':id': id
    };

    return DynamoDB
        .query(params).promise()
        .then(function(records) {
          return records.Items[0];
        })
        .catch(function(error) {
          return Promise.reject(error);
        });
   };
Run Code Online (Sandbox Code Playgroud)

在为DynamoDB构建查询参数时,是否缺少有关使用“ _”的内容?我曾尝试查找类似的错误,但是无法找到与我的情况类似的任何错误。

amazon-dynamodb aws-sdk

0
推荐指数
2
解决办法
3375
查看次数

如何在dynamodb中超过1mb的扫描数据限制

我正在将 dynamodb 与 nodejs 一起使用,我有 3000 条记录,并且我正在代码中编写 60 多个段,每个段扫描 1mb 的数据并将结果显示为 60 多个 1 mb 限制的段。所以请提供解决方案如何在单步中获得 3000 条记录扫描,这意味着在一个段中。请快速提供解决方案,因为我在项目中间感到震惊。请帮我。下面是我的代码。

var AWS = require("aws-sdk");
var async = require("async");

    AWS.config.update({
      region: "---",
      endpoint: "-----------",
      accessKeyId: "-----------------",
      secretAccessKey:"----------"
    });


var db = new AWS.DynamoDB.DocumentClient()

var table = "rets_property_all";
var pstart =new Date () .getTime ();

async.parallel({
            0 : function(callback){
        db.scan ({TableName: table,
          ProjectionExpression: "#cityname,ListingKey ",
          FilterExpression: "#cityname = :v_id",
          ExpressionAttributeNames: {
              "#cityname": "CityName",
          },
          ExpressionAttributeValues: {":v_id" : 'BALTIMORE'},
            TotalSegments: 63,
            Segment:  0//by the worker …
Run Code Online (Sandbox Code Playgroud)

amazon-dynamodb

0
推荐指数
1
解决办法
4647
查看次数

python DynamoDB扫描操作不返回所有记录

在 DynamoDB 表中,我在没有任何过滤器的情况下应用时有161712 条记录,我只收到了 10589 条扫描计数值

这是 mytable 元

{
  "AttributeDefinitions": [
    {
      "AttributeName": "question_id",
      "AttributeType": "N"
    },
    {
      "AttributeName": "timestamp",
      "AttributeType": "S"
    }
  ],
  "TableName": "users_answers",
  "KeySchema": [
    {
      "AttributeName": "timestamp",
      "KeyType": "HASH"
    },
    {
      "AttributeName": "question_id",
      "KeyType": "RANGE"
    }
  ],
  "TableStatus": "ACTIVE",
  "CreationDateTime": "2017-09-12T12:33:22.615Z",
  "ProvisionedThroughput": {
    "LastIncreaseDateTime": "2017-09-12T16:46:26.742Z",
    "NumberOfDecreasesToday": 0,
    "ReadCapacityUnits": 80,
    "WriteCapacityUnits": 80
  },
  "TableSizeBytes": 16014441,
  "ItemCount": 161712
}
Run Code Online (Sandbox Code Playgroud)

当我做上面表的扫描操作时只会得到 10589 条记录

table = dynamo.get_table('answer_options')
x    = table.scan()
Run Code Online (Sandbox Code Playgroud)

请建议我如何从表中获取整个记录

环境:python 3.5.1,flask dynamodb

提前致谢

python amazon-web-services amazon-dynamodb

0
推荐指数
1
解决办法
1963
查看次数

扫描操作时Dynamo db中的分页

我想扫描我的 Dynamo db 表并对其应用分页。在我的请求中,我想从我想要开始分页的地方发送号码。说,例如,我发送的请求的 start = 3 和 limit = 10,其中 start 是我希望扫描从表中的第三个项目开始,而限制最多为 10 个项目。但是我可以使用 .withLimit() 方法来实现限制(我使用的是 java)。我遵循了这个aws 文档。以下是我想要实现的代码:

<Map<String, AttributeValue>> mapList = new ArrayList<>();
      AmazonDynamoDB client =AmazonDynamoDBClientBuilder.standard().build();

      Gson gson = new GsonBuilder().serializeNulls().create();

      Map<String, AttributeValue> expressionAttributeValues = new 
      HashMap<String,AttributeValue>(); 
      expressionAttributeValues.put(":name",
      newAttributeValue().withS(name));

      List<ResponseDomain> domainList = new ArrayList<>(); 
      ResponseDomain responseDomain = null;

      //lastKeyEvaluated = start
      Map<String, AttributeValue> lastKeyEvaluated = null; 
      do { 
      ScanRequest scanRequest = new 
      ScanRequest().withTableName(STUDENT_TABLE)
      .withProjectionExpression("studentId, studentName")
      .withFilterExpression("begins_with(studentName, :name)")
      .withExpressionAttributeValues(expressionAttributeValues).
      withExclusiveStartKey(lastKeyEvaluated);

      ScanResult result = client.scan(scanRequest);

      for (Map<String, AttributeValue> …
Run Code Online (Sandbox Code Playgroud)

database pagination json amazon-web-services amazon-dynamodb

0
推荐指数
1
解决办法
5822
查看次数

AWS DynamoDb 使用主键和排序键删除项目

我有一个 DynamoDb 表,我想使用主键和排序键从表中删除一个项目,

以下是我的代码 -

public Boolean deleteItem(String primaryKey, String sortKey) {
        DynamoDBUtil dynamoDBUtil = new DynamoDBUtil();
        AmazonDynamoDB dynamoDBClient = dynamoDBUtil.getDynamoDBClient();
        DynamoDB dynamoDB = new DynamoDB(dynamoDBClient);

        Table table = dynamoDB.getTable("demo_table");
        DeleteItemSpec deleteItemSpec = new DeleteItemSpec()
                .withPrimaryKey(new PrimaryKey("primaryKey", primaryKey))
                .withConditionExpression("primaryKey = :p_key and sortKey = :s_key")
                .withValueMap(new ValueMap()
                .withString(":p_key", primaryKey)
                .withString(":s_key", sortKey));

        table.deleteItem(deleteItemSpec);
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误响应 -

Received error response: 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: …
Run Code Online (Sandbox Code Playgroud)

java amazon-web-services amazon-dynamodb

0
推荐指数
1
解决办法
5074
查看次数

在 DynamoDB 表中使用 GSI 时估计额外的维护成本

我在 DynamoDB 中有一个 Users 表,它有一个唯一的哈希键username。但是,我希望能够通过仅提供用户名或仅提供电子邮件(电子邮件也是唯一的)以最有效的方式找到特定用户。我可以将电子邮件设为全局二级索引,但我无法估算这种方法的额外成本。使用索引检索用户会导致两次读取操作吗?或者到底有多少操作?

此外,我希望索引的读写吞吐量等于表的吞吐量(理想情况下,自动缩放),我可以通过在使用 API 创建索引时不提供特定吞吐量值来实现,还是必须提供它们?

database amazon-web-services amazon-dynamodb

0
推荐指数
1
解决办法
3388
查看次数

dynamodb获取项目打字稿地狱

任何人都可以解释在调用DocumentClient.get时如何使用GetItemInput类型,如果我传入任何类型的对象都可以工作,但是如果我尝试强烈键入params对象,则会收到错误消息

ValidationException:提供的键元素与架构不匹配

这是我的lambda函数代码,我在其中传递参数作为任何类型...

export const get: Handler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {

  console.log(event.pathParameters)
  if (!event.pathParameters) {
    throw Error("no path params")
  }

  const params: any = {
    Key: {
      id: event.pathParameters.id
    },
    TableName: table
  }

  console.log(params)
  try {
    const result: any = await dynamoDb.get(params).promise()
    return {
      body: JSON.stringify(result.Item),
      statusCode: result.$response.httpResponse.statusCode
    }

  } catch (error) {
    console.log(error)
    return {
      body: JSON.stringify({
        message: `Failed to get project with id: ${event.pathParameters!.id}`
      }),
      statusCode: 500
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试使其与GetItemInput类型一起使用 …

amazon-web-services amazon-dynamodb aws-sdk aws-lambda aws-sdk-js

0
推荐指数
2
解决办法
1212
查看次数

如何依次执行四个异步功能?

我正在使用包含四个异步函数的这段代码。我需要他们严格执行。
我该如何执行它们将按照示例中给出的顺序执行?
我的用例在Lambda中,并且可以访问异步。

    function scanProducts() {
      dynamoClient.scan(productParams, function (err, data) {

      });
    }

    function scanCoupons() {
      dynamoClient.scan(couponsParams, function (err, data) {

      });
    }

    function scanRetailers() {
      dynamoClient.scan(retailerParams, function (err, data) {

      });
    }

    function sendEmail(ses) {
      var email = {
        "Source": "test@gmail.com",
        "Template": "test-template",
        "Destination": {
          "ToAddresses": ["test@gmail.com"]
        },
        "TemplateData": `{}`
      }

      ses.sendTemplatedEmail(email);
    }
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous amazon-web-services node.js amazon-dynamodb

0
推荐指数
1
解决办法
69
查看次数