在我的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(哈希键)旁边查询它,正如您所看到的那样,而不是我想要实现的目标.
谢谢.
我真的是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
我正在使用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构建查询参数时,是否缺少有关使用“ _”的内容?我曾尝试查找类似的错误,但是无法找到与我的情况类似的任何错误。
我正在将 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) 在 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
提前致谢
我想扫描我的 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
我有一个 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) 我在 DynamoDB 中有一个 Users 表,它有一个唯一的哈希键username。但是,我希望能够通过仅提供用户名或仅提供电子邮件(电子邮件也是唯一的)以最有效的方式找到特定用户。我可以将电子邮件设为全局二级索引,但我无法估算这种方法的额外成本。使用索引检索用户会导致两次读取操作吗?或者到底有多少操作?
此外,我希望索引的读写吞吐量等于表的吞吐量(理想情况下,自动缩放),我可以通过在使用 API 创建索引时不提供特定吞吐量值来实现,还是必须提供它们?
任何人都可以解释在调用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
我正在使用包含四个异步函数的这段代码。我需要他们严格执行。
我该如何执行它们将按照示例中给出的顺序执行?
我的用例在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
amazon-dynamodb ×10
aws-sdk ×2
database ×2
amazon-ec2 ×1
asynchronous ×1
aws-lambda ×1
aws-php-sdk ×1
aws-sdk-js ×1
java ×1
javascript ×1
json ×1
node.js ×1
pagination ×1
python ×1