簡體   English   中英

使用低級Java API查詢dynamoDB的本地二級索引

[英]Querying a local secondary index of dynamoDB using low level java API

我正在嘗試使用哈希鍵查詢本地二級索引。

我的表:Table1用戶名(哈希鍵),Id(范圍鍵),時間戳。

我的本地二級索引(因為我想查詢所有用戶名並按時間對其進行排序)我的LSI:Table1_TimestampLSI用戶名(哈希鍵),時間戳(范圍鍵)

例如user1 | 123 | 2015年12月12日user1 | 456 | 2015年11月1日user2 | 789 | 2015年12月1日

注意:因為(Username + Timestamp)不是唯一的,所以我不能僅使時間戳成為表本身的范圍鍵。 因此,我必須創建一個ID字段以確保唯一性。

因為我想要異步客戶端,所以我使用了低級API(NOT模型文檔)java API。

查詢索引的功能

HashMap<String, Condition> queryFilter = new HashMap<String, Condition>();
        Condition condition = new Condition()
                .withComparisonOperator(ComparisonOperator.EQ.toString())
                .withAttributeValueList(new AttributeValue().withS(username));
        queryFilter.put("Username", condition);

        QueryRequest queryRequest = new QueryRequest(tableName + "_TimestampLSI").withQueryFilter(queryFilter);

        queryRequest.setScanIndexForward(false);

        Future<QueryResult> fQueryResult = dynamoDB.queryAsync(queryRequest,
            new AsyncHandler<QueryRequest,QueryResult>() {
                public void onSuccess(QueryRequest request, QueryResult result) {
                    System.out.println("Table: " + result);
                }

                public void onError(Exception exception) {
                    System.out.println("Error describing table: " + exception.getMessage());
                    // Callers can also test if exception is an instance of 
                    // AmazonServiceException or AmazonClientException and cast 
                    // it to get additional information
                }             
            });

        System.out.println("Result: " + fQueryResult);

我收到以下錯誤錯誤描述表:必須在請求中指定KeyConditions或KeyConditionExpression參數。 (服務:AmazonDynamoDBv2;狀態代碼:400;錯誤代碼:ValidationException;

我想念什么嗎? 以為我應該能夠僅在哈希值上查詢索引。

您誤解了本地索引。

查詢始終使用哈希鍵。 因此,您的QueryRequest應該具有setHashKeyValue設置。

您不能使用哈希+范圍主鍵和LSI來交叉哈希查詢。 您可以使用GSI來做到這一點,但是我不確定這對您有什么幫助。

目前尚不清楚您到底想達到什么目標。 如果要使用所有用戶名,則需要“ 掃描”而不是“查詢”,因為要顯示所有哈希鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM