Próbowałem dokumentów DynamoDB i pracowałem z przykładem używając QueryResult
, nie mogłem znaleźć żadnego źródła jak używać min, max i avg w DynamoDB (używam Java API).Czy DynamoDB obsługuje zagregowane funkcje, takie jak AVG, MAX, MIN?
Odpowiedz
Nie są one dostarczane. Możesz je zaimplementować, wykonując zapytanie lub skanując za pomocą filtru i obliczając wartości samodzielnie. Aby nieco uprościć elementy, można użyć parametru Count
parameter, aby zwrócić tylko liczbę elementów, które zostaną zwrócone przez to zapytanie/skanowanie zamiast rzeczywistych elementów. (Zwróć uwagę, że licznik zwraca tylko częściową liczbę - możesz potrzebować zliczać sumy na wielu stronach zapytań/skanów).
Alternatywnie, możesz zachować osobną tabelę, która przechowuje te wartości dla ciebie, gdy główne tabele są aktualizowane (zauważ, że to może być trudne do zsynchronizowania, będziesz musiał użyć jakiejś formy zarządzania transakcjami i wziąć pod uwagę dynamiczny model konsystencji).
Miałem ten sam problem jak ty, a następnie mam 2 pomysły, aby rozwiązać ten problem. Pierwsza - służy do wysyłania zapytań do wszystkich danych za pomocą zapytania/skanowania, a następnie do agregowania danych w kodzie Java. Druga - to użycie Hive SQL, możesz używać Hive i DyanmoDB razem i agregować swoje dane w Hivql.
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Tutorial.html
liczyć tylko jest obsługiwany https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#Count – cjungel
Niezupełnie - zwraca liczyć tylko częściowe wyniki z tej kwerendy - Ty nadal trzeba samemu zebrać całkowitą liczbę. Skopiowałem i wkleiłem odpowiednie uwagi do dokumentu z twojego linku tutaj: "* Jeśli pasujące elementy dla wyrażenia filtru lub warunku zapytania są większe niż 1 MB, liczba zawiera częściową liczbę całkowitej liczby elementów pasujących do żądania. pobierz pełną liczbę pasujących elementów, weź wartość LastEvaluatedKey z poprzedniego żądania i użyj tej wartości jako klucza ExclusiveStartKey w następnym żądaniu. Powtarzaj tę czynność, dopóki DynamoDB nie zwróci klucza LastEvaluatedKey. * " – Krease
Masz rację, możesz muszą zsumować wszystkie częściowe liczby, aby uzyskać całkowitą liczbę. Ale nadal jest to bardziej wydajne niż pobieranie pojedynczych przedmiotów i liczenie ich po stronie aplikacji. Oczywiście to działałoby tylko dla zliczeń, a nie dla żadnej innej funkcji agregującej. – cjungel