Amazon dynamodb 如何查询AWS dynamodb以获得每小时、每天和30天的数据?

Amazon dynamodb 如何查询AWS dynamodb以获得每小时、每天和30天的数据?,amazon-dynamodb,dynamodb-queries,Amazon Dynamodb,Dynamodb Queries,我写的查询如下。我能够随时检索数据。我的问题是每分钟都有30张唱片。我想得到帮助,以获得每一个小时的第一张记录和一天24张记录,我需要这30天 var config = new QueryRequest { TableName = "dfgfdgdfg", KeyConditionExpression = "id= :id AND plctime BETWEEN :fromtime AND :totime", ExpressionA

我写的查询如下。我能够随时检索数据。我的问题是每分钟都有30张唱片。我想得到帮助,以获得每一个小时的第一张记录和一天24张记录,我需要这30天

    var config = new QueryRequest
    {
        TableName = "dfgfdgdfg",
        KeyConditionExpression = "id= :id AND plctime BETWEEN :fromtime AND :totime",
        ExpressionAttributeValues = new Dictionary<string, AttributeValue> {
               {
                ":serialNumber", new AttributeValue {S = id}
                },
               {
                ":fromtime", new AttributeValue {S = fromtime }
                },
               {
                ":totime", new AttributeValue {S = totime }
                }
            },

    };

    return await _dynamoClient.QueryAsync(config);
var config=newqueryrequest
{
TableName=“dfgfdgdfg”,
KeyConditionExpression=“id=:id和plctime介于:fromtime和:totime之间”,
ExpressionAttributeValues=新字典{
{
“:serialNumber”,新属性值{S=id}
},
{
“:fromtime”,新属性值{S=fromtime}
},
{
“:totime”,新属性值{S=totime}
}
},
};
return wait_dynamoClient.QueryAsync(配置);

< /代码> 除了按原样存储记录外,还可以考虑插入另一个这样的记录:

{
  pk : "DailyMarker_" + DateTime.Now.ToString("yyMMdd"),   // partition key
  sk : "HourlyMarker_" + DateTime.Now.ToString("yyMMddhh")  // range key
  record: <your entire record> 
}
{
pk:“DailyMarker_u3;”+DateTime.Now.ToString(“yyMMdd”),//分区键
sk:“HourlyMarker_u”+DateTime.Now.ToString(“yyMMddhh”)//范围键
记录:
}
pk
sk
的结构应为
DailyMarker_201911
HourlyMarker_2019112101
。基本上,下划线后面的部分充当日期/时间戳,只具有您感兴趣的粒度

插入标记记录时,可以添加先决条件检查,如果先决条件检查失败,将阻止插入(请参阅)。如果条件评估为false,此操作将引发大多数SDK的异常,因此您希望处理该异常

在这一点上,每小时只有第一条记录被插入到这个PK/SK组合中,并且一天的所有SK都在同一个PK下结束

要查询不同的范围,您必须在应用程序代码中执行一些计算,以确定要查询的开始和结束存储桶(pk和sk)。虽然您需要对每个感兴趣的pk进行一次调用,但可以使用


您还可以将pk改为每月而不是每天,这样可以减少要查询的pk数量,同时增加不平衡键(也称为热键)的可能性。

添加“ScanIndexForward:true”它将按升序对您的配置进行排序,降序时设置为false。如果您正在搜索fromtime、totime,并且这是一个一小时的时间段,并且您正在按升序进行排序,则只需选择第一个结果。我想获取两个日期之间的数据,它应该每一小时只选择一条记录。好的,为此,我在函数中,在返回结果之前,添加一些逻辑以筛选出不需要的结果,或将确实需要的结果推送到新数组或对象中,然后返回该数组或对象。我喜欢这样做,但返回结果需要很长时间。我正在进行30天的查询,每分钟大约有10条记录,600条记录一个小时,一天1440,30天43200。每个记录有250个属性。这很复杂,所以最好在查询中执行