2014-09-26 64 views
1

我有一個簡單的dynamodb2表,其中包含task_names(字符串)及其開始時間(數字/浮點數)。我怎樣才能得到開始時間大於給定數字X的所有記錄? 目前,我試圖讓開始時間作爲全局二級索引,並使用以下內容:如何使用gte比較運算符查詢dynamodb表

表hashkey是task_name,範圍鍵是開始時間。 我做了start_time(start_time-index)的第二全局索引,並用它來查詢下面。

recs =tab.query(start_time__gte=1, index='start_time-index') 

然而,它說:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/nail/home/osarood/work/.venv/local/lib/python2.7/site-packages/boto/dynamodb2/results.py", line 62, in __next__ 
    self.fetch_more() 
    File "/nail/home/osarood/work/.venv/local/lib/python2.7/site-packages/boto/dynamodb2/results.py", line 146, in fetch_more 
    results = self.the_callable(*args, **kwargs) 
    File "/nail/home/osarood/work/.venv/local/lib/python2.7/site-packages/boto/dynamodb2/table.py", line 1132, in _query 
    **kwargs 
    File "/nail/home/osarood/work/.venv/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1522, in query 
    body=json.dumps(params)) 
    File "/nail/home/osarood/work/.venv/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 2100, in make_request 
    retry_handler=self._retry_handler) 
    File "/nail/home/osarood/work/.venv/local/lib/python2.7/site-packages/boto/connection.py", line 937, in _mexe 
    status = retry_handler(response, i, next_sleep) 
    File "/nail/home/osarood/work/.venv/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 2140, in _retry_handler 
    response.status, response.reason, data) 
boto.dynamodb2.exceptions.ValidationException: ValidationException: 400 Bad Request 
{u'message': u'Query key condition not supported', u'__type': u'com.amazon.coral.validate#ValidationException'} 
+0

你的''start_time''屬性是什麼類型? – garnaat 2014-09-27 11:57:43

+0

它是一個數字。基本上這是一個時代。 – 2014-09-28 15:11:43

回答

-2

而不是GSI(這也將需要支付自己的吞吐量),只是讓START_TIME在餐桌上,範圍鍵。

然後將查詢使用更大的應用篩選的範圍鍵/小於/ /等之間的參考AWS Documentation on conditions以獲得更多信息。

另外,還要注意Hash keys only support the equality condition

您必須指定散列鍵屬性的名稱和值作爲均衡狀態。

你的錯誤實質上是說你不能將條件應用到散列鍵(這是你在GSI中做的start_time) - 這就是範圍鍵的用途。

+0

添加一個範圍鍵(可能)在這裏沒有幫助。正如您的答案中所指出的那樣,範圍鍵僅在您使用已知散列鍵查詢條目時纔有用。因此,除非所有的哈希鍵事先已知(在本例中爲任務名稱),否則您不能僅通過start_time查詢。 – jonson 2015-03-03 14:29:14