Udostępnij za pośrednictwem


Pozyskiwanie danych z usługi Azure Cosmos DB do usługi Azure Data Explorer

Usługa Azure Data Explorer obsługuje pozyskiwanie danych z usługi Azure Cosmos DB for NoSql przy użyciu zestawienia zmian. Połączenie danych zestawienia zmian usługi Cosmos DB to potok pozyskiwania, który nasłuchuje zestawienia zmian usługi Cosmos DB i pozyskuje dane do tabeli eksploratora danych. Kanał informacyjny zmian nasłuchuje nowych i zaktualizowanych dokumentów, ale nie rejestruje usuwania. Aby uzyskać ogólne informacje na temat pozyskiwania danych w usłudze Azure Data Explorer, zobacz Omówienie pozyskiwania danych w usłudze Azure Data Explorer.

Każde połączenie danych nasłuchuje określonego kontenera usługi Cosmos DB i pozyskiwa dane do określonej tabeli (więcej niż jedno połączenie może pozyskiwać w jednej tabeli). Metoda pozyskiwania obsługuje pozyskiwanie strumieniowe (po włączeniu) i pozyskiwanie w kolejce.

W tym artykule dowiesz się, jak skonfigurować połączenie danych zestawienia zmian usługi Cosmos DB w celu pozyskiwania danych do usługi Azure Data Explorer przy użyciu tożsamości zarządzanej przez system. Przed rozpoczęciem zapoznaj się z zagadnieniami .

Aby skonfigurować łącznik, wykonaj następujące czynności:

Krok 1. Wybieranie tabeli usługi Azure Data Explorer i konfigurowanie mapowania tabeli

Krok 2. Tworzenie połączenia danych usługi Cosmos DB

Krok 3. Testowanie połączenia danych

Wymagania wstępne

Krok 1. Wybieranie tabeli usługi Azure Data Explorer i konfigurowanie mapowania tabeli

Przed utworzeniem połączenia danych utwórz tabelę, w której będą przechowywane pozyskane dane i zastosuje mapowanie zgodne ze schematem w źródłowym kontenerze usługi Cosmos DB. Jeśli scenariusz wymaga więcej niż prostego mapowania pól, możesz użyć zasad aktualizacji do przekształcania i mapowania danych pozyskanych z zestawienia zmian.

Poniżej przedstawiono przykładowy schemat elementu w kontenerze usługi Cosmos DB:

{
    "id": "17313a67-362b-494f-b948-e2a8e95e237e",
    "name": "Cousteau",
    "_rid": "pL0MAJ0Plo0CAAAAAAAAAA==",
    "_self": "dbs/pL0MAA==/colls/pL0MAJ0Plo0=/docs/pL0MAJ0Plo0CAAAAAAAAAA==/",
    "_etag": "\"000037fc-0000-0700-0000-626a44110000\"",
    "_attachments": "attachments/",
    "_ts": 1651131409
}

Wykonaj następujące kroki, aby utworzyć tabelę i zastosować mapowanie tabeli:

  1. W internetowym interfejsie użytkownika usługi Azure Data Explorer z menu nawigacji po lewej stronie wybierz pozycję Zapytanie, a następnie wybierz bazę danych, w której chcesz utworzyć tabelę.

  2. Uruchom następujące polecenie, aby utworzyć tabelę o nazwie TestTable.

    .create table TestTable(Id:string, Name:string, _ts:long, _timestamp:datetime)
    
  3. Uruchom następujące polecenie, aby utworzyć mapowanie tabeli.

    Polecenie mapuje właściwości niestandardowe z dokumentu JSON usługi Cosmos DB na kolumny w tabeli TestTable w następujący sposób:

    Właściwość Cosmos DB Kolumna tabeli Przekształcenie
    id Id Brak
    name Nazwisko Brak
    _Ts _ts Brak
    _Ts _Sygnatury czasowej Używa DateTimeFromUnixSeconds metody do przekształcania _ts (w sekundach systemu UNIX) na _timestamp (datetime))

    Uwaga

    Zalecamy użycie następujących kolumn sygnatury czasowej:

    • _ts: użyj tej kolumny, aby uzgodnić dane z usługą Cosmos DB.
    • _timestamp: użyj tej kolumny do uruchamiania wydajnych filtrów czasu w zapytaniach Kusto. Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązanie dotyczące zapytań.
    .create table TestTable ingestion json mapping "DocumentMapping"
    ```
    [
        {"column":"Id","path":"$.id"},
        {"column":"Name","path":"$.name"},
        {"column":"_ts","path":"$._ts"},
        {"column":"_timestamp","path":"$._ts", "transform":"DateTimeFromUnixSeconds"}
    ]
    ```
    

Przekształcanie i mapowania danych za pomocą zasad aktualizacji

Jeśli scenariusz wymaga więcej niż prostego mapowania pól, możesz użyć zasad aktualizacji do przekształcania i mapowania danych pozyskanych z zestawienia zmian.

Zasady aktualizacji to sposób przekształcania danych w miarę pozyskiwania ich do tabeli. Są one zapisywane w język zapytań Kusto i są uruchamiane w potoku pozyskiwania. Mogą one służyć do przekształcania danych z pozyskiwania zestawienia zmian usługi Cosmos DB, na przykład w następujących scenariuszach:

  • Dokumenty zawierają tablice, które byłyby łatwiejsze do wykonywania zapytań, jeśli są przekształcane w wielu wierszach przy użyciu mv-expand operatora .
  • Chcesz odfiltrować dokumenty. Na przykład można filtrować dokumenty według typu przy użyciu where operatora .
  • Masz złożoną logikę, której nie można przedstawić w mapowaniu tabeli.

Aby uzyskać informacje na temat tworzenia zasad aktualizacji i zarządzania nimi, zobacz Omówienie zasad aktualizacji.

Krok 2. Tworzenie połączenia danych usługi Cosmos DB

Aby utworzyć łącznik danych, możesz użyć następujących metod:

  1. W witrynie Azure Portal przejdź do strony przeglądu klastra, a następnie wybierz kartę Wprowadzenie .

  2. Na kafelku Pozyskiwanie danych wybierz pozycję Utwórz połączenie>danych Cosmos DB.

    Zrzut ekranu przedstawiający kartę Wprowadzenie z opcją Utwórz połączenie danych usługi Cosmos DB.

  3. W okienku Tworzenie połączenia danych w usłudze Cosmos DB wypełnij formularz informacjami w tabeli:

    Zrzut ekranu przedstawiający okienko połączenia danych z polami formularza z wartościami.

    Pole opis
    Nazwa bazy danych Wybierz bazę danych usługi Azure Data Explorer, do której chcesz pozyskać dane.
    Nazwa połączenia danych Określ nazwę połączenia danych.
    Subskrypcja Wybierz subskrypcję zawierającą konto NoSQL usługi Cosmos DB.
    Konto usługi Cosmos DB Wybierz konto usługi Cosmos DB, z którego chcesz pozyskiwać dane.
    Baza danych SQL Wybierz bazę danych Cosmos DB, z której chcesz pozyskiwać dane.
    Kontener SQL Wybierz kontener usługi Cosmos DB, z którego chcesz pozyskiwać dane.
    Nazwa tabeli Określ nazwę tabeli usługi Azure Data Explorer, do której chcesz pozyskiwać dane.
    Nazwa mapowania Opcjonalnie określ nazwę mapowania, która ma być używana dla połączenia danych.
  4. Opcjonalnie w sekcji Ustawienia zaawansowane wykonaj następujące czynności:

    1. Określ datę rozpoczęcia pobierania zdarzeń. Jest to czas, od którego łącznik rozpocznie pozyskiwanie danych. Jeśli nie określisz czasu, łącznik rozpocznie pozyskiwanie danych od momentu utworzenia połączenia danych. Zalecany format daty to standard ISO 8601 UTC określony w następujący sposób: yyyy-MM-ddTHH:mm:ss.fffffffZ.

    2. Wybierz pozycję Przypisane przez użytkownika, a następnie wybierz tożsamość. Domyślnie tożsamość zarządzana przypisana przez system jest używana przez połączenie. W razie potrzeby możesz użyć tożsamości przypisanej przez użytkownika.

      Zrzut ekranu przedstawiający okienko połączenia danych z ustawieniami Zaawansowane.

  5. Wybierz pozycję Utwórz , aby utworzyć połączenie danych.

Krok 3. Testowanie połączenia danych

  1. W kontenerze usługi Cosmos DB wstaw następujący dokument:

    {
        "name":"Cousteau"
    }
    
  2. W internetowym interfejsie użytkownika usługi Azure Data Explorer uruchom następujące zapytanie:

    TestTable
    

    Zestaw wyników powinien wyglądać podobnie do poniższej ilustracji:

    Zrzut ekranu przedstawiający okienko wyników z wyświetlonym pozyskanym dokumentem.

Uwaga

Usługa Azure Data Explorer ma zasady agregacji (dzielenia na partie) na potrzeby pozyskiwania danych w kolejce przeznaczone do optymalizacji procesu pozyskiwania danych. Domyślne zasady dzielenia na partie są skonfigurowane do uszczelniania partii, gdy jeden z następujących warunków jest spełniony w partii: maksymalny czas opóźnienia wynoszący 5 minut, całkowity rozmiar jednego GB lub 1000 obiektów blob. W związku z tym może wystąpić opóźnienie. Aby uzyskać więcej informacji, zobacz zasady dzielenia na partie. Aby zmniejszyć opóźnienie, skonfiguruj tabelę do obsługi przesyłania strumieniowego. Zobacz zasady przesyłania strumieniowego.

Kwestie wymagające rozważenia

Następujące zagadnienia dotyczą zestawienia zmian usługi Cosmos DB:

  • Kanał informacyjny zmian nie ujawnia zdarzeń usuwania .

    Zestawienie zmian usługi Cosmos DB zawiera tylko nowe i zaktualizowane dokumenty. Jeśli musisz wiedzieć o usuniętych dokumentach, możesz skonfigurować zestawienie przy użyciu znacznika nietrwałego , aby oznaczyć dokument usługi Cosmos DB jako usunięty. Właściwość jest dodawana do aktualizacji zdarzeń wskazujących, czy dokument został usunięty. Następnie możesz użyć where operatora w zapytaniach, aby je odfiltrować.

    Jeśli na przykład zamapujesz usuniętą właściwość na kolumnę tabeli o nazwie IsDeleted, możesz odfiltrować usunięte dokumenty przy użyciu następującego zapytania:

    TestTable
    | where not(IsDeleted)
    
  • Kanał informacyjny zmian uwidacznia tylko najnowszą aktualizację dokumentu.

    Aby zrozumieć konsekwencje drugiego zagadnienia, zapoznaj się z następującym scenariuszem:

    Kontener usługi Cosmos DB zawiera dokumenty A i B. Zmiany właściwości o nazwie foo są wyświetlane w poniższej tabeli:

    Identyfikator dokumentu Obiekt foo Zdarzenie Sygnatura czasowa dokumentu (_ts)
    A Czerwony Tworzenie 10
    B Blue (Niebieski) Tworzenie 20
    A Orange Zaktualizuj 30
    A Różowy Update 40
    B Fiołek Zaktualizuj 50
    A Karminowy Zaktualizuj 50
    B NeonBlue Zaktualizuj 70

    Interfejs API zestawienia zmian jest sondowany przez łącznik danych w regularnych odstępach czasu, zazwyczaj co kilka sekund. Każda ankieta zawiera zmiany, które wystąpiły w kontenerze między wywołaniami, ale tylko najnowszą wersją zmiany na dokument.

    Aby zilustrować problem, rozważ sekwencję wywołań interfejsu API ze znacznikami czasu 15, 35, 55 i 75, jak pokazano w poniższej tabeli:

    Sygnatura czasowa wywołania interfejsu API Identyfikator dokumentu Obiekt foo Sygnatura czasowa dokumentu (_ts)
    15 A Czerwony 10
    35 B Blue (Niebieski) 20
    35 A Orange 30
    55 B Fiołek 50
    55 A Karminowy 60
    75 B NeonBlue 70

    Porównanie wyników interfejsu API z listą zmian wprowadzonych w dokumencie usługi Cosmos DB zauważysz, że nie są one zgodne. Zdarzenie aktualizacji dokumentu A, wyróżnione w tabeli zmian w znaczniku czasu 40, nie jest wyświetlane w wynikach wywołania interfejsu API.

    Aby zrozumieć, dlaczego zdarzenie nie jest wyświetlane, przeanalizujemy zmiany dokumentu A między wywołaniami interfejsu API w znacznikach czasu 35 i 55. Między tymi dwoma wywołaniami dokument A uległ zmianie dwa razy w następujący sposób:

    Identyfikator dokumentu Obiekt foo Zdarzenie Sygnatura czasowa dokumentu (_ts)
    A Różowy Zaktualizuj 40
    A Karminowy Zaktualizuj 50

    Po wprowadzeniu wywołania interfejsu API znacznika czasu 55 interfejs API zestawienia zmian zwraca najnowszą wersję dokumentu. W tym przypadku najnowsza wersja dokumentu A to aktualizacja sygnatury czasowej 50, która jest aktualizacją foo właściwości od Pink do Carmine.

    W związku z tym scenariuszem łącznik danych może przegapić pewne pośrednie zmiany dokumentu. Na przykład niektóre zdarzenia mogą zostać pominięte, jeśli usługa połączenia danych nie działa przez kilka minut lub częstotliwość zmian dokumentu jest wyższa niż częstotliwość sondowania interfejsu API. Przechwytywany jest jednak najnowszy stan każdego dokumentu.

  • Usuwanie i ponowne tworzenie kontenera usługi Cosmos DB nie jest obsługiwane

    Usługa Azure Data Explorer śledzi zestawienie zmian, wskazując „pozycję”, w której znajduje się zestawienie. Odbywa się to przy użyciu tokenu kontynuacji na każdej fizycznej partycji kontenera. Po usunięciu/ponownym utworzeniu kontenera te tokeny kontynuacji są nieprawidłowe i nie są resetowane: należy usunąć i ponownie utworzyć połączenie danych.

Szacowanie kosztów

Ile korzystasz z połączenia danych usługi Cosmos DB, wpływa na użycie jednostek żądań (RU) kontenera usługi Cosmos DB?

Łącznik wywołuje interfejs API zestawienia zmian usługi Cosmos DB na każdej partycji fizycznej kontenera do maksymalnie raz na sekundę. Następujące koszty są skojarzone z tymi wywołaniami:

Koszt opis
Koszty stałe Koszty stałe to około 2 jednostek RU na partycję fizyczną co sekundę.
Zmienne koszty Koszty zmienne to około 2% jednostek RU używanych do zapisywania dokumentów, ale może się to różnić w zależności od scenariusza. Jeśli na przykład zapisujesz 100 dokumentów w kontenerze usługi Cosmos DB, koszt pisania tych dokumentów wynosi 1000 jednostek RU. Odpowiedni koszt użycia łącznika do odczytania tego dokumentu wynosi około 2% kosztów zapisu, czyli około 20 jednostek RU.