Partycjonowanie niestandardowe w usłudze Azure Synapse Link dla usługi Azure Cosmos DB

DOTYCZY: Nosql Mongodb Gremlin

Partycjonowanie niestandardowe umożliwia partycjonowanie danych magazynu analitycznego na polach, które są często używane jako filtry w zapytaniach analitycznych, co zwiększa wydajność zapytań.

Z tego artykułu dowiesz się, jak partycjonować dane w magazynie analitycznym usługi Azure Cosmos DB przy użyciu kluczy, które mają kluczowe znaczenie dla obciążeń analitycznych. Wyjaśniono również, jak korzystać z ulepszonej wydajności zapytań przy użyciu oczyszczania partycji. Dowiesz się również, jak partycjonowanie niestandardowe poprawia wydajność zapytań, gdy obciążenia mają znaczną liczbę aktualizacji lub usuwania.

Uwaga

Aby móc korzystać z partycjonowania niestandardowego, konta i kontenery usługi Azure Cosmos DB powinny mieć włączoną usługę Azure Synapse Link .

Jak to działa?

Partycjonowanie magazynu analitycznego jest niezależne od partycjonowania w magazynie transakcyjnym. Domyślnie magazyn analityczny nie jest partycjonowany. Jeśli chcesz często wykonywać zapytania dotyczące magazynu analitycznego na podstawie pól, takich jak Data, Godzina, Kategoria itp., możesz użyć partycjonowania niestandardowego, aby utworzyć oddzielny magazyn podzielony na partycje na podstawie tych kluczy. Jako klucz partycji magazynu analitycznego można wybrać jedno pole lub kombinację pól z zestawu danych.

Partycjonowanie można wyzwolić z notesu usługi Azure Synapse Spark przy użyciu usługi Azure Synapse Link. Można zaplanować jego uruchamianie jako zadanie w tle, raz lub dwa razy dziennie, ale może być wykonywane częściej, w razie potrzeby.

Uwaga

Magazyn podzielony na partycje wskazuje podstawowe konto magazynu usługi ADLS Gen2 połączone z obszarem roboczym usługi Azure Synapse.

Architecture of partitioned store in Azure Synapse Link for Azure Cosmos DB

Magazyn partycjonowany zawiera dane analityczne usługi Azure Cosmos DB do czasu ostatniego uruchomienia zadania partycjonowania. Podczas wykonywania zapytań dotyczących danych analitycznych przy użyciu filtrów klucza partycji usługa Synapse Link automatycznie scala partycjonowane dane magazynu z najnowszymi zmianami w magazynie analitycznym. Dzięki temu można uzyskać najnowsze wyniki dla zapytań. Mimo że scala ona dane przed wykonaniem zapytania, funkcja delta nie jest zapisywana z powrotem do magazynu partycjonowanego. Ponieważ różnice między danymi w magazynie analitycznym i podzielonym na partycje magazynu rozszerzają się, czasy zapytań dotyczące partycjonowanych danych mogą się różnić. Wyzwalanie zadania partycjonowania częściej zmniejsza tę różnicę. Za każdym razem, gdy wykonujesz zadanie partycji, przetwarzane są tylko zmiany przyrostowe w magazynie analitycznym, a nie pełny zestaw danych.

Kiedy należy używać?

Używanie magazynu partycjonowanego jest opcjonalne podczas wykonywania zapytań dotyczących danych analitycznych w usłudze Azure Cosmos DB. Możesz bezpośrednio wykonywać zapytania dotyczące tych samych danych przy użyciu usługi Synapse Link z istniejącym magazynem analitycznym. Jeśli masz następujące wymagania, możesz włączyć magazyn podzielony na partycje:

  • Typowe filtry zapytań analitycznych, które mogą być używane jako kolumny partycji
  • Kolumny partycji o niskiej kardynalności
  • Kolumna partycji dystrybuuje dane równomiernie między partycjami
  • Duża liczba operacji aktualizacji lub usuwania
  • Powolne pozyskiwanie danych

Jeśli wykonujesz zapytania dotyczące danych na żywo przy użyciu filtrów zapytań innych niż klucze partycji, zalecamy bezpośrednie wykonywanie zapytań względem magazynu analitycznego.

Świadczenia

Zmniejszone skanowanie danych z przycinania partycji

Ponieważ dane odpowiadające każdemu unikatowego klucza partycji są kolokowane w magazynie partycjonowanym, gdy używasz klucza partycji jako filtru zapytania, wykonania zapytań mogą przycinać dane bazowe i skanować tylko wymagane dane. Przeskanując ograniczone dane, oczyszczanie partycji zwiększa wydajność analitycznych zapytań.

Elastyczność partycjonowania danych analitycznych

Można mieć wiele strategii partycjonowania dla danego kontenera magazynu analitycznego. Możesz użyć złożonych lub oddzielnych kluczy partycji na podstawie wymagań dotyczących zapytania.

Ulepszenia wydajności zapytań

Oprócz ulepszeń zapytań związanych z oczyszczaniem partycji partycjonowanie niestandardowe powoduje również zwiększenie wydajności zapytań dla następujących obciążeń:

  • Aktualizowanie/usuwanie dużych obciążeń — zamiast śledzić wiele wersji rekordów w magazynie analitycznym i ładować je podczas każdego wykonywania zapytania, magazyn partycjonowany zawiera tylko najnowszą wersję danych. Ta funkcja znacznie poprawia wydajność zapytań w przypadku aktualizacji/usuwania dużych obciążeń.

  • Wolne obciążenia pozyskiwania danych — partycjonowanie kompaktuje dane analityczne, a więc jeśli obciążenie ma powolne pozyskiwanie danych, kompaktowanie może spowodować lepszą wydajność zapytań

Gwarancja transakcyjna

Należy pamiętać, że partycjonowanie niestandardowe zapewnia pełną gwarancję transakcyjną. Ścieżka zapytania nie jest blokowana, gdy wykonywanie partycjonowania jest w toku. Każde wykonanie zapytania odczytuje partycjonowane dane z ostatniego pomyślnego partycjonowania. Odczytuje najnowsze dane z magazynu analitycznego, co zapewnia, że zapytania zawsze zwracają najnowsze dane dostępne podczas korzystania z magazynu partycjonowanego.

Zabezpieczenia

Jeśli skonfigurowano zarządzane prywatne punkty końcowe dla magazynu analitycznego, zalecamy również dodanie zarządzanych prywatnych punktów końcowych dla magazynu podzielonego na partycje. Magazyn podzielony na partycje jest podstawowym kontem magazynu skojarzonym z obszarem roboczym usługi Synapse.

Podobnie w przypadku skonfigurowania kluczy zarządzanych przez klienta w magazynie analitycznym należy je bezpośrednio włączyć na podstawowym koncie magazynu obszaru roboczego usługi Synapse, które jest również magazynem podzielonym na partycje.

Strategie partycjonowania

Dla danych analitycznych można użyć co najmniej jednego klucza partycji. Jeśli używasz wielu kluczy partycji, poniżej przedstawiono kilka zaleceń dotyczących sposobu partycjonowania danych:

  • Używanie kluczy złożonych:

    Załóżmy, że chcesz często wykonywać zapytania na podstawie klucza 1 i klucza 2.

    Na przykład "Zapytanie o wszystkie rekordy, w których ReadDate = '2021-10-08' i Location = 'Sydney'".

    W takim przypadku użycie kluczy złożonych jest bardziej wydajne, aby wyszukać wszystkie rekordy zgodne z wartością ReadDate i rekordami zgodnymi z lokalizacją w ramach tej wartości ReadDate.

    Przykładowe opcje konfiguracji:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Teraz można wykonywać zapytania na podstawie filtru "Lokalizacja":

    • Możesz chcieć wysyłać zapytania bezpośrednio do magazynu analitycznego. Magazyn podzielony na partycje skanuje wszystkie rekordy według wartości ReadDate, a następnie według lokalizacji. Dlatego w zależności od obciążenia i kardynalności danych analitycznych można uzyskać lepsze wyniki, wysyłając zapytanie bezpośrednio do magazynu analitycznego.
    • Można również uruchomić inne zadanie partycji, aby również podzielić na partycje na podstawie lokalizacji w tym samym magazynie podzielonym na partycje.
  • Używanie wielu kluczy oddzielnie:

    Załóżmy, że chcesz często wykonywać zapytania czasami w oparciu o "ReadDate" i inne czasy w oparciu o lokalizację.

    Przykład:

    • Wykonaj zapytanie o wszystkie rekordy, w których readDate = '2021-10-08'
    • Zapytanie o wszystkie rekordy, w których location = 'Sydney'

    Uruchom dwa zadania partycji z kluczami partycji zgodnie z poniższym opisem w tym scenariuszu:

    Zadanie 1:

    .option("spark.cosmos.asns.partition.keys", "ReadDate String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Zadanie 2:

    .option("spark.cosmos.asns.partition.keys", "Location String") \
    .option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \
    

    Należy pamiętać, że nie jest to teraz wydajne, aby często wykonywać zapytania na podstawie filtrów "ReadDate" i "Location" w oparciu o powyższe partycjonowanie. Klucze złożone umożliwiają lepszą wydajność zapytań w tym przypadku.

Ograniczenia

  • Partycjonowanie niestandardowe jest dostępne tylko dla usługi Azure Synapse Spark. Partycjonowanie niestandardowe nie jest obecnie obsługiwane w przypadku bezserwerowych pul SQL.

  • Obecnie podzielony na partycje magazyn może wskazywać tylko podstawowe konto magazynu skojarzone z obszarem roboczym usługi Synapse. Wybranie niestandardowych kont magazynu nie jest obecnie obsługiwane.

  • Partycjonowanie niestandardowe jest dostępne tylko dla interfejsu API dla bazy danych NoSQL w usłudze Azure Cosmos DB. Interfejs API dla baz danych MongoDB, Gremlin i Cassandra jest obecnie w wersji zapoznawczej.

Cennik

Oprócz cennika usługi Azure Synapse Link naliczane są następujące opłaty podczas korzystania z partycjonowania niestandardowego:

  • Opłaty są naliczane za korzystanie z pul platformy Apache Spark usługi Synapse podczas uruchamiania zadań partycjonowania w magazynie analitycznym.

  • Dane partycjonowane są przechowywane na podstawowym koncie usługi Azure Data Lake Storage Gen2 skojarzonym z obszarem roboczym usługi Azure Synapse Analytics. Koszty związane z używaniem magazynu i transakcji usługi ADLS Gen2 są naliczane. Te koszty są określane przez magazyn wymagany odpowiednio przez partycjonowane dane analityczne i dane przetwarzane na potrzeby zapytań analitycznych w usłudze Synapse. Aby uzyskać więcej informacji na temat cen, odwiedź stronę cennika usługi Azure Data Lake Storage.

Często zadawane pytania

Jak często należy uruchomić zadanie partycjonowania niestandardowego?

Istnieje kilka czynników, takich jak wolumin danych przyrostowych, wymagania dotyczące opóźnienia zapytań itp., które określają, jak często można uruchomić zadanie partycjonowania niestandardowego. Może być uruchamiany raz dziennie lub raz na kilka godzin. Możesz chcieć zaplanować zadanie partycjonowania częściej, jeśli wolumin danych przychodzących jest wysoki, a oczekiwane opóźnienie zapytania jest niskie. Należy również najpierw gromadzić dane przyrostowe w magazynie analitycznym, aby oczyszczanie partycji było skuteczne.

Czy wyniki zapytania zawierają najnowsze dane, gdy wykonywanie zadania partycjonowania jest w toku?

Tak, partycjonowanie niestandardowe zapewnia pełną gwarancję transakcyjną. Dlatego wyniki zapytania w dowolnym momencie łączą istniejące partycjonowane dane z danymi ogonowymi zwracającymi najnowszy zestaw danych magazynu analitycznego.

Czy partycjonowanie niestandardowe może korzystać z uwierzytelniania połączonej usługi w usłudze Azure Synapse Analytics?

Tak, uwierzytelnianie połączonej usługi może służyć do partycjonowania magazynu analitycznego.

Czy mogę zmienić klucz partycji dla danego kontenera w późniejszym punkcie w czasie?

Tak, klucz partycji dla danego kontenera można zmienić, a nowa definicja klucza partycji utworzy nowy magazyn podzielony na partycje.

Uwaga

Definicja klucza partycji jest częścią ścieżki magazynu partycjonowanego.

Czy różne klucze partycji mogą wskazywać tę samą ścieżkę BasePath?

Tak, można określić wiele kluczy partycji w tym samym magazynie podzielonym na partycje, co poniżej:

.option("spark.cosmos.asns.partition.keys", "ReadDate String, Location String") \
.option("spark.cosmos.asns.basePath", "/mnt/CosmosDBPartitionedStore/") \

Następne kroki

Aby dowiedzieć się więcej, zobacz następujące dokumenty: