gpt4 book ai didi

ruby - 动态模块 : Querying tables with secondary index

转载 作者:数据小太阳 更新时间:2023-10-29 06:46:22 33 4
gpt4 key购买 nike

我正在使用 gem aws-sdk-ruby查询看起来像这样的表:

hk (Hashkey)  |  guid(Rangekey)  |  Timestamp (Secondary Range index)  |  other attributes
aaaa | 50 | 2013-02-04T12:33:00Z |
aaaa | 244 | 2013-04-22T04:54:00Z |
aaaa | 342 | 2013-05-18T06:52:00Z |
bbbb | 243 | 2013-06-21T13:17:00Z |

我想要做的是获取在特定日期之后创建的所有“aaaa”行。例如:

AWS.config(access_key_id: 'xxx', secret_access_key: 'xxx', :dynamo_db => { :api_version => '2012-08-10' })
client = AWS::DynamoDB::Client.new
client.query(
{
table_name: 'table',
select: 'ALL_ATTRIBUTES',
key_conditions: {
'hk' => {
comparison_operator: 'EQ',
attribute_value_list: [
{'s' => 'aaaa'}
]
},
'timestamp' => {
comparison_operator: 'GE',
attribute_value_list: [
{'s' => Time.now.utc.iso8601}
]
}
}
})

当我运行上面的代码时,我得到了这个:

Query condition missed key schema element guid (AWS::DynamoDB::Errors::ValidationException)

使用 hashKey 和 RangeKey 运行查询有效,但是当我用辅助范围索引替换 rangeKey 时,它无法告诉我需要 rangeKey。

如果我然后添加范围键(这没有意义),我会收到以下错误:

Conditions can be of length 1 or 2 only (AWS::DynamoDB::Errors::ValidationException)

有人知道会发生什么吗?

最佳答案

您不是在查询二级索引,而是在查询主索引(哈希和范围键)。要在 DynamoDB 中使用二级索引,您必须使用 API 的 V2 并在查询操作中指定索引

client = AWS::DynamoDB::Client.new(api_version: '2012-08-10') 

client.query( { :table_name: 'table', :index_name: "timestamp-index", :select: 'ALL_PROJECTED_ATTRIBUTES', :key_conditions: {
'hk' => {
:comparison_operator: 'EQ',
:attribute_value_list: [
{'s' => 'aaaa'}
]
},
'timestamp' => {
:comparison_operator: 'GE',
:attribute_value_list: [
{'s' => Time.now.utc.iso8601}
]
} } })

关于ruby - 动态模块 : Querying tables with secondary index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18020353/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com