2017-05-02 4 views
1

내 문제는 다음과 같이 I는 다음과 같이 설정되어 푸른 표 저장이 :푸른 표 저장 검색어 키

  • 파티션 키 : 문자열
  • 행 : 수

주어진 숫자 X와 같은 쿼리를 만들고 싶습니다. 각 파티션 키에 대해 X보다 작은 가장 높은 행 키를 반환하고 싶습니다. ,

9 "안녕하세요",

7 "안녕하세요",

"안녕하세요"키 행 (12)

파티션 키 : 즉, 그래서 여기에 가지 혼동하게 표현 인 예이다 나는 10 번으로 조회하는 경우

"다른"6

, 나는 같은 목록을 반환하려면 [("안녕하세요", 9), ("기타", 6)]. 난 단지 고유의 파티션 키와 가장 높은 번호를하고자합니다 미만 10

내가 (간결성을 위해 몇 가지 물건을 떠나) 같은 것을 함께 특정 이름이 작업을 수행 할 수

:

string orderFilter = TableQuery.GenerateFilterConditionForLong("RowKey", "le", 10); 
    string nameFilter = TableQuery.GenerateFilterCondition("PartitionKey", "eq", "hello"); 

    TableQuery query = new TableQuery().Where(TableQuery.CombineFilters(orderFilter, "and", nameFilter)); 

    IEnumerable<NameEntity> names = await nameTable.ExecuteQuerySegmentedAsync<NameEntity>(query, entityResolver, continuationToken); 

    // Get newest name 
    NameEntity newestName = names.Last(); 

그러나 모든 다른 파티션 키를 사용하여이를 수행하는 방법을 알아낼 수 없습니다. 이것이 단일 쿼리에서 가능합니까? 어떤 도움을 주셔서 감사합니다!

답변

2

은 (테이블 스캔을하지 않고) 파티션 키를 열거 할 수있는 방법이 없다, 그래서 당신도 할 수 있습니다

  • 는 함께, 당신은 길을 따라 찾아 다양한 파티션 키를 추적, 전체 테이블 스캔을 할 가장 높은 값의 행 키가있는
  • 파티션 키를 테이블 스토리지에 기록 할 때 파티션 키를 추적하십시오 (예 : 파티션 키만으로 다른 테이블을 생성).

다른 대답은 동시에 해당 파티션 키의 최대 값을 쓰는 것이 좋습니다. 확실하게 실행 가능합니다. 그러나이 메타 데이터를 유지해야한다는 것을 기억해야합니다.

1

확실히 할 수는 없습니다. Azure 테이블은 AFAIK와 같은 일을하도록 설정되지 않았습니다. 또 다른 해결책은 파티션 당 최대 값 (즉, 열심히 이것을 계산) 또는 그와 비슷한 것으로 번호와 행을 기반으로 한 파티션 키가있는 두 번째 테이블을 만드는 것입니다.