2013-05-30 1 views
3

내가 문제DynamoDB2 및 BOTO 배치 쿼리 및 단일 항목에 대한 잘못된 요청이

내가 이런 배치 쿼리를 할 필요가 DynamoDB2 API를 사용하여 BOTO 2.9.5와 단일 또는 일괄 쿼리를 수행하는 데 문제 얻을 2.9.5 :

one_org = Table('[table-name]').batch_get(keys=[ 
     {'key': '[user-id-hash]'}, 
     {'key': '[user-id-hash]'}, 
     {'key': '[user-id-hash]'}, 
     {'key': '[user-id-hash]'}, 
    ]) 

for user in one_org: 
    for key, value in user.items(): 
     print key, value 

나는이 예외가 계속 :

boto.dynamodb2.exceptions.ValidationException: ValidationException: 400 Bad Request 
{ 
    u'message': u'The provided key element does not match the schema', 
    u'__type': u'com.amazon.coral.validate#ValidationException' 
} 

내가 키 이름에 문제가있을 거라고 생각 것이 메시지를 감안할 때, 그러나 우리의 키를 키라고, 그렇게한다 말도 안돼. 나에게. 오류가 제공된 값 (들) 스키마에 정의 된 유형과 일치하지 않는 것을 말하는

Traceback (most recent call last): 
    File "aws/interfaces.py", line 38, in <module> 
    for user in one_org: 
    File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/results.py", line 59, in next 
    self.fetch_more() 
    File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/results.py", line 141, in fetch_more 
    results = self.the_callable(*args, **kwargs) 
    File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/table.py", line 949, in _batch_get 
    raw_results = self.connection.batch_get_item(request_items=items) 
    File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 152, in batch_get_item 
    body=json.dumps(params)) 
    File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1479, in make_request 
    retry_handler=self._retry_handler) 
    File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/connection.py", line 852, in _mexe 
    status = retry_handler(response, i, next_sleep) 
    File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1518, in _retry_handler 
    response.status, response.reason, data) 
boto.dynamodb2.exceptions.ValidationException: ValidationException: 400 Bad Request 
{u'message': u'The provided key element does not match the schema', u'__type': u'com.amazon.coral.validate#ValidationException'} 

답변

11

나는 오늘 아침에 같은 문제에 직면했다. 스키마에 RangeKey를 정의한 경우이를 지정해야합니다. RangeKey를 지정하고 HashKey를 사용하여 항목을 가져 오지 않으려는 경우 RangeKey를 제거하는 것이 좋습니다.

+0

그 이유는 무엇입니까? batch_get을 사용하여 RangeKey를 포함하는 예를 게시 할 수 있습니까? 내가 어떻게 그것을 내가 dict에 추가 할 것인지 알 수 없다. – mackwerk

+1

내 생각에 {key '대신'[user-id-hash] '} {'hash_key ':'user-id-hash ] ','range_key ':'whatever_it_is '} – Pasada

+0

고맙습니다. Pasada :) 이제 작동합니다. 정말로 훌륭하지만, 특정 행을 얻으려면 정확한 RangeKey가 필요합니다.하지만 그것은 DynamoDB입니다. – mackwerk

3

:

나는 아래의 스택 추적을 포함. 귀하의 스키마가 무엇인지 모르겠지만, 예를 들어 스키마가 기본 키 (귀하의 경우 key)를 문자열로 정의하고 정수 값을 제공했거나 그 반대의 경우이 오류가 발생합니다.

스키마를 확인하고 올바른 값 유형의 쿼리를 전달하는지 확인하십시오.

+0

정확하게 문자열을 전달하고 키가 문자열입니다. 위의 Pasada의 대답을 사용하면 올바르게 작동합니다. – mackwerk