按日期范围查询 DynamoDB 二级索引 returns "Query key condition not supported"
Query DynamoDB secondary index by date range returns "Query key condition not supported"
目前
我正在尝试使用 Lambda 从 DynamoDB 检索按日期范围 transDate
(二级索引)过滤的数据子集。
函数:
const AWS = require("aws-sdk");
var dynamodbClient = new AWS.DynamoDB.DocumentClient();
let params = {
"TableName": "sales",
"IndexName": "transDate-index",
"KeyConditionExpression": "#tdate BETWEEN :v_start AND :v_end",
"ExpressionAttributeNames": {
"#tdate": "transDate"
},
"ExpressionAttributeValues": {
":v_start": "2021-07-29T00:00:00",
":v_end": "2021-08-01T24:00:00"
}
}
await new Promise((resolve, reject) => {
dynamodbClient.query(params, function (err, data) {
if (err) {
console.error(
"Unable to query. Error:",
JSON.stringify(err, null, 2)
);
reject(err);
} else {
console.log("Query succeeded.");
resolve(data);
}
});
});
二级索引:
Name: transDate-index
Partition key: transDate (String)
Sort key: -
Read capacity: On-demand
Projected attributes: Include: total, pluGroup, plu, transDate
Size: 0 Bytes
Item count: 0
问题
我收到以下错误:
"message": "Query key condition not supported",
"code": "ValidationException"
备注
我假设二级索引的大小和项目计数都显示为 0,因为它们尚未填充(即新创建的索引)
问题
我怎样才能让我的查询起作用?
顾名思义,分区键(也称为 HASH 键)用于将您的数据分成多个部分。它不能按范围排序或查询。为此,您需要将其设为排序键(又名 RANGE 键),并选择其他键作为分区键(因为分区键是必需的,而排序键是可选的)。
编辑:
DynamoDB Query
只支持查询单个分区,因此KeyConditionExpression中也需要分区键:
"KeyConditionExpression": "partitionKeyName = :partitionkeyval AND #tdate BETWEEN :v_start AND :v_end"
如果您需要查询整个table,那么在您的二级索引中,每条记录都需要具有相同的分区键值(即只有一个分区)。
目前
我正在尝试使用 Lambda 从 DynamoDB 检索按日期范围 transDate
(二级索引)过滤的数据子集。
函数:
const AWS = require("aws-sdk");
var dynamodbClient = new AWS.DynamoDB.DocumentClient();
let params = {
"TableName": "sales",
"IndexName": "transDate-index",
"KeyConditionExpression": "#tdate BETWEEN :v_start AND :v_end",
"ExpressionAttributeNames": {
"#tdate": "transDate"
},
"ExpressionAttributeValues": {
":v_start": "2021-07-29T00:00:00",
":v_end": "2021-08-01T24:00:00"
}
}
await new Promise((resolve, reject) => {
dynamodbClient.query(params, function (err, data) {
if (err) {
console.error(
"Unable to query. Error:",
JSON.stringify(err, null, 2)
);
reject(err);
} else {
console.log("Query succeeded.");
resolve(data);
}
});
});
二级索引:
Name: transDate-index
Partition key: transDate (String)
Sort key: -
Read capacity: On-demand
Projected attributes: Include: total, pluGroup, plu, transDate
Size: 0 Bytes
Item count: 0
问题
我收到以下错误:
"message": "Query key condition not supported",
"code": "ValidationException"
备注
我假设二级索引的大小和项目计数都显示为 0,因为它们尚未填充(即新创建的索引)
问题
我怎样才能让我的查询起作用?
顾名思义,分区键(也称为 HASH 键)用于将您的数据分成多个部分。它不能按范围排序或查询。为此,您需要将其设为排序键(又名 RANGE 键),并选择其他键作为分区键(因为分区键是必需的,而排序键是可选的)。
编辑:
DynamoDB Query
只支持查询单个分区,因此KeyConditionExpression中也需要分区键:
"KeyConditionExpression": "partitionKeyName = :partitionkeyval AND #tdate BETWEEN :v_start AND :v_end"
如果您需要查询整个table,那么在您的二级索引中,每条记录都需要具有相同的分区键值(即只有一个分区)。