Amazon dynamodb 仅使用dynamo DB中的二级索引进行查询
我可以只在二级索引上使用条件查询dynamodb表吗。我不想保留哈希键的任何条件。有办法吗?没有,要查询DynamoDB,您必须知道哈希键。如果您不知道散列键,则获取数据的唯一方法是全表扫描。否,要查询DynamoDB,您必须知道散列键。如果您不知道散列键,则获取数据的唯一方法是进行全表扫描。从2013年12月起,您可以。Dynamo支持全局二级索引Amazon dynamodb 仅使用dynamo DB中的二级索引进行查询,amazon-dynamodb,Amazon Dynamodb,我可以只在二级索引上使用条件查询dynamodb表吗。我不想保留哈希键的任何条件。有办法吗?没有,要查询DynamoDB,您必须知道哈希键。如果您不知道散列键,则获取数据的唯一方法是全表扫描。否,要查询DynamoDB,您必须知道散列键。如果您不知道散列键,则获取数据的唯一方法是进行全表扫描。从2013年12月起,您可以。Dynamo支持全局二级索引 有关如何执行查询,请参见页面。您基本上必须指定表和索引。如果将所有属性投影到索引上,则可以获取一条记录,或者获取原始哈希键,可以像以前一样在表中查
有关如何执行查询,请参见页面。您基本上必须指定表和索引。如果将所有属性投影到索引上,则可以获取一条记录,或者获取原始哈希键,可以像以前一样在表中查找对象。截至2013年12月,您可以。Dynamo支持全局二级索引
有关如何执行查询,请参见页面。您基本上必须指定表和索引。如果将所有属性投影到索引上,则可以获取一条记录,或者获取原始散列键,可以像以前一样在表中查找对象。查询操作
始终需要散列键,即使查询的是或 Query
操作始终需要哈希键,即使您正在查询或 您可以使用辅助索引查询dynamodb
let params = {
TableName: 'users',
KeyConditionExpression: "#_id = :_id",
IndexName: "_id-index",
ExpressionAttributeNames:{
"#_id": "_id"
},
ExpressionAttributeValues: {
":_id":userId
}
};
documentClient.query(params, function (err, data) {
if (err) {
callback(err);
}
else {
if (data && data.Items && data.Items[0].accessToken) {
userData = data.Items[0];
}
else userData ={};
callback(null,{userData:userData})
}
})
您可以使用辅助索引查询dynamodb
let params = {
TableName: 'users',
KeyConditionExpression: "#_id = :_id",
IndexName: "_id-index",
ExpressionAttributeNames:{
"#_id": "_id"
},
ExpressionAttributeValues: {
":_id":userId
}
};
documentClient.query(params, function (err, data) {
if (err) {
callback(err);
}
else {
if (data && data.Items && data.Items[0].accessToken) {
userData = data.Items[0];
}
else userData ={};
callback(null,{userData:userData})
}
})
TL;DR是,可以基于辅助索引进行查询
let params = {
TableName: 'users',
KeyConditionExpression: "#_id = :_id",
IndexName: "_id-index",
ExpressionAttributeNames:{
"#_id": "_id"
},
ExpressionAttributeValues: {
":_id":userId
}
};
documentClient.query(params, function (err, data) {
if (err) {
callback(err);
}
else {
if (data && data.Items && data.Items[0].accessToken) {
userData = data.Items[0];
}
else userData ={};
callback(null,{userData:userData})
}
})
例如:
请考虑具有以下结构的表:
- user_id (partition key)
- created_at (sort key)
- account_id
- api_path
- execution_time
- platform
- ttl
- metadata
如果要基于帐户\ u id进行查询,可以按如下方式创建GSI:
account_id (partition key)
created_at (sort key)
假设您将此索引命名为:account\u id-created\u at-index
现在可以按如下方式查询它们(为了简洁起见,选择python作为语言,这适用于它们的所有SDK):
请注意此处的索引名称参数,它是键
如果有任何项目适用于
KeyConditionExpression
,则可以在响应['items']
中作为对象列表进行访问。TL;DR是,可以基于辅助索引进行查询
let params = {
TableName: 'users',
KeyConditionExpression: "#_id = :_id",
IndexName: "_id-index",
ExpressionAttributeNames:{
"#_id": "_id"
},
ExpressionAttributeValues: {
":_id":userId
}
};
documentClient.query(params, function (err, data) {
if (err) {
callback(err);
}
else {
if (data && data.Items && data.Items[0].accessToken) {
userData = data.Items[0];
}
else userData ={};
callback(null,{userData:userData})
}
})
例如:
请考虑具有以下结构的表:
- user_id (partition key)
- created_at (sort key)
- account_id
- api_path
- execution_time
- platform
- ttl
- metadata
如果要基于帐户\ u id进行查询,可以按如下方式创建GSI:
account_id (partition key)
created_at (sort key)
假设您将此索引命名为:account\u id-created\u at-index
现在可以按如下方式查询它们(为了简洁起见,选择python作为语言,这适用于它们的所有SDK):
请注意此处的索引名称参数,它是键
如果有任何项应用于
KeyConditionExpression
,则可以在响应['items']
中作为对象列表进行访问。是的,您可以仅使用二级索引查询DynamoDb,而无需使用哈希键。。
假设您有DynamoDB表EmployeeData
,其中包含列EmployeeID、Department和created\u at\u date.。此表的分区键为EmployeeID,排序键为Department。。
您希望根据创建的日期获取数据。因此,首先在DynamoDB表上创建名为dateindex
的二级索引。。
然后,您可以使用以下代码使用辅助索引获取数据:
from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('EmployeeData')
response = table.query(IndexName="date-index",
KeyConditionExpression=Key('created_at_date').eq('2020-01-03'))
print(response)
是的,您可以只使用二级索引查询DynamoDb,而不使用任何哈希键。。 假设您有DynamoDB表
EmployeeData
,其中包含列EmployeeID、Department和created\u at\u date.。此表的分区键为EmployeeID,排序键为Department。。
您希望根据创建的日期获取数据。因此,首先在DynamoDB表上创建名为dateindex
的二级索引。。
然后,您可以使用以下代码使用辅助索引获取数据:
from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('EmployeeData')
response = table.query(IndexName="date-index",
KeyConditionExpression=Key('created_at_date').eq('2020-01-03'))
print(response)