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 pozysuje dane do tabeli Data Explorer. 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 pozyskuje dane w 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 systemu. Przed rozpoczęciem zapoznaj się z zagadnieniami .

Aby skonfigurować łącznik, wykonaj następujące kroki:

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

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 zastosuj 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łcenia
    id Id Brak
    Nazwa Nazwa Brak
    _Ts _ts Brak
    _Ts _Sygnatury czasowej Używa DateTimeFromUnixSeconds do przekształcania_ts (w sekundach systemu UNIX) do _timestamp (datetime))

    Uwaga

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

    • _ts: ta kolumna służy do uzgadniania danych z usługą Cosmos DB.
    • _timestamp: użyj tej kolumny do uruchamiania filtrów czasu efektywnego 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ą 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 wiele wierszy 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żna użyć następujących metod:

  1. W 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> danychCosmos 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 pozyskać dane.
    Baza danych SQL Wybierz bazę danych Cosmos DB, z której chcesz pozyskać dane.
    Kontener SQL Wybierz kontener usługi Cosmos DB, z którego chcesz pozyskać 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ć jak na poniższej ilustracji:

    Zrzut ekranu przedstawiający okienko wyników z 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. Domyślne zasady dzielenia na partie są skonfigurowane do uszczelniania partii, gdy jeden z następujących warunków jest spełniony dla 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.

Zagadnienia do 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 zdarzeń aktualizacji, które wskazują, 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 przedstawiono w poniższej tabeli:

    Identyfikator dokumentu Obiekt foo Zdarzenie Sygnatura czasowa dokumentu (_ts)
    A Red Tworzenie 10
    B Blue (Niebieski) Tworzenie 20
    A Orange Aktualizacja 30
    A Różowy Aktualizowanie 40
    B Fioletowy Aktualizacja 50
    A Carmine Aktualizacja 50
    B NeonBlue Aktualizacja 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 Red 10
    35 B Blue (Niebieski) 20
    35 A Orange 30
    55 B Fioletowy 50
    55 A Carmine 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 Dwa razy zmienił się w następujący sposób:

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

    Po wprowadzeniu wywołania interfejsu API sygnatury czasowej 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ą właściwości foo z Pink do Carmine.

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

  • 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 korzysta z połączenia danych usługi Cosmos DB, ma wpływ 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:

Koszty 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 pisania dokumentów, ale może się to różnić w zależności od scenariusza. Jeśli na przykład napiszesz 100 dokumentów do kontenera 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 ich zapisu, około 20 jednostek RU.