Omówienie zasad aktualizacji

Przełącz usługi przy użyciu rozwijanej listy Wersja. Dowiedz się więcej o nawigacji.
Dotyczy: ✅ Microsoft Fabric ✅ Azure Data Explorer

Zasady aktualizacji to mechanizmy automatyzacji wyzwalane, gdy nowe dane są zapisywane w tabeli. Eliminują one potrzebę specjalnej aranżacji, uruchamiając zapytanie, aby przekształcić pozyskane dane i zapisać wynik w tabeli docelowej. Wiele zasad aktualizacji można zdefiniować w jednej tabeli, co pozwala na różne przekształcenia i zapisywanie danych w wielu tabelach jednocześnie. Tabele docelowe mogą mieć inny schemat, zasady przechowywania i inne zasady z tabeli źródłowej.

Na przykład tabela źródłowa śledzenia o wysokiej szybkości może zawierać dane sformatowane jako kolumna wolnego tekstu. Tabela docelowa może zawierać określone wiersze śledzenia z dobrze ustrukturyzowanym schematem wygenerowanym na podstawie przekształcenia danych beztekstowych tabeli źródłowej przy użyciu operatora analizy. Aby uzyskać więcej informacji, typowe scenariusze.

Na poniższym diagramie przedstawiono ogólny widok zasad aktualizacji. Zostaną wyświetlone dwie zasady aktualizacji, które są wyzwalane po dodaniu danych do drugiej tabeli źródłowej. Po wyzwoleniu przekształcone dane są dodawane do dwóch tabel docelowych.

Diagram przedstawia przegląd zasad aktualizacji.

Zasady aktualizacji podlegają tym samym ograniczeniom i najlepszym rozwiązaniom co regularne pozyskiwanie. Zasady są skalowane w poziomie zgodnie z rozmiarem klastra i są bardziej wydajne podczas obsługi pozyskiwania zbiorczego.

Zasady aktualizacji podlegają tym samym ograniczeniom i najlepszym rozwiązaniom co regularne pozyskiwanie. Zasady są skalowane w poziomie zgodnie z rozmiarem usługi Eventhouse i są bardziej wydajne podczas obsługi pozyskiwania zbiorczego.

Uwaga

  • Tabela źródłowa i docelowa musi znajdować się w tej samej bazie danych.
  • Schemat funkcji zasad aktualizacji i schemat tabeli docelowej muszą być zgodne z ich typami kolumn i kolejnością.
  • Funkcja zasad aktualizacji może odwoływać się do tabel w innych bazach danych. W tym celu zasady aktualizacji muszą być zdefiniowane za pomocą ManagedIdentity właściwości, a tożsamość zarządzana musi mieć viewerrolę w bazach danych, do których odwołuje się odwołanie. Pozyskiwanie sformatowanych danych zwiększa wydajność, a plik CSV jest preferowany ze względu na dobrze zdefiniowany format. Czasami jednak nie masz kontroli nad formatem danych lub chcesz wzbogacić pozyskane dane, na przykład łącząc rekordy ze statyczną tabelą wymiarów w bazie danych.

Uwaga

  • Tabela źródłowa i docelowa musi znajdować się w tej samej bazie danych.
  • Schemat funkcji zasad aktualizacji i schemat tabeli docelowej muszą być zgodne z ich typami kolumn i kolejnością.

Aktualizowanie zapytania zasad

Jeśli zasady aktualizacji są zdefiniowane w tabeli docelowej, wiele zapytań może być uruchamianych na danych pozyskanych do tabeli źródłowej. Jeśli istnieje wiele zasad aktualizacji, kolejność wykonywania nie musi być znana.

Ograniczenia zapytań

  • Zapytanie związane z zasadami może wywoływać przechowywane funkcje, ale:

    • Nie może wykonywać zapytań między klastrami.
    • Nie może uzyskać dostępu do danych zewnętrznych ani tabel zewnętrznych z następującym wyjątkiem:
      • Zapytanie może odwoływać się do przyspieszonej tabeli zewnętrznej external_table()przy użyciu funkcji, pod warunkiem, że:
        • Tabela zewnętrzna ma włączone zasady przyspieszania zapytań z okresem obejmującym Hot wszystkie dane (obecnie Hot>= 100 lat).
        • Zasady aktualizacji są konfigurowane z właściwością ManagedIdentity , jeśli tabela zewnętrzna używa uwierzytelniania personifikacji.
    • Nie może wykonywać wywołań (za pomocą wtyczki).
  • Zapytanie nie ma dostępu do odczytu do tabel, które mają włączone zasady funkcji RestrictedViewAccess.

  • Aby uzyskać informacje o ograniczeniach zasad aktualizacji w pozyskiwaniu danych przesyłanych strumieniowo, zobacz Ograniczenia pozyskiwania przesyłania strumieniowego.

  • Zapytanie zasad aktualizacji nie powinno odwoływać się do żadnego zmaterializowanego widoku, którego zapytanie używa tabeli docelowej zasad aktualizacji. Może to spowodować nieoczekiwane wyniki.

  • Zapytanie związane z zasadami może wywoływać przechowywane funkcje, ale:

    • Nie może wykonywać zapytań między magazynami zdarzeń.
    • Nie może uzyskać dostępu do danych zewnętrznych ani tabel zewnętrznych z następującym wyjątkiem:
      • Zapytanie może odwoływać się do przyspieszonej tabeli zewnętrznej external_table()przy użyciu funkcji, pod warunkiem, że:
        • Tabela zewnętrzna ma włączone zasady przyspieszania zapytań z okresem obejmującym Hot wszystkie dane (obecnie Hot>= 100 lat).
        • Autoryzacja dostępu do tabeli zewnętrznej jest obsługiwana automatycznie za pośrednictwem właściwości zasad OwnerPrincipalDetails aktualizacji.
    • Nie może wykonywać wywołań (za pomocą wtyczki).
  • Zapytanie nie ma dostępu do odczytu do tabel, które mają włączone zasady funkcji RestrictedViewAccess.

  • Domyślnie zasady pozyskiwania przesyłania strumieniowego są włączone dla wszystkich tabel w usłudze Eventhouse. Aby używać funkcji z operatorem join w zasadach aktualizacji, zasady pozyskiwania przesyłania strumieniowego muszą być wyłączone. Aby go wyłączyć, użyj polecenia .altertableTableNamepolicystreamingingestionPolicyObject.

  • W przypadku zasad aktualizacji kaskadowych, które obejmują join operator, należy wyłączyć pozyskiwanie przesyłania strumieniowego we wszystkich tabelach nadrzędnych. Rozważmy na przykład kaskadowe zasady aktualizacji, w których tabela Table1 aktualizuje tabelę Table2, tabelę Table2 i aktualizację Table3 tabelę 4. Jeśli zasady aktualizacji tabeli Table4 zawierają sprzężenia, należy wyłączyć pozyskiwanie strumieniowe w tabelach Table1, Table2 i Table3.

  • Zapytanie zasad aktualizacji nie powinno odwoływać się do żadnego zmaterializowanego widoku, którego zapytanie używa tabeli docelowej zasad aktualizacji. Może to spowodować nieoczekiwane wyniki.

Ostrzeżenie

Nieprawidłowe zapytanie może uniemożliwić pozyskiwanie danych do tabeli źródłowej. Należy pamiętać, że ograniczenia, a także zgodność między wynikami zapytania a schematem tabel źródłowych i docelowych, mogą spowodować nieprawidłowe zapytanie, aby zapobiec pozyskiwaniu danych do tabeli źródłowej.

Te ograniczenia są weryfikowane podczas tworzenia i wykonywania zasad, ale nie w przypadku zaktualizowania dowolnych przechowywanych funkcji, do których może się odwoływać zapytanie. W związku z tym ważne jest, aby wszelkie zmiany były ze ostrożnością, aby zapewnić, że zasady aktualizacji pozostają nienaruszone.

Podczas odwoływania Source się do tabeli w Query części zasad lub w funkcjach, do których odwołuje się Query część:

  • Nie używaj kwalifikowanej nazwy tabeli. Zamiast tego użyj polecenia TableName.

  • Nie używaj database("<DatabaseName>").TableName ani cluster("<ClusterName>").database("<DatabaseName>").TableName.

  • Nie używaj kwalifikowanej nazwy tabeli. Zamiast tego użyj polecenia TableName.

  • Nie używaj database("<DatabaseName>").TableName ani cluster("<EventhouseName>").database("<DatabaseName>").TableName.

Obiekt zasad aktualizacji

Tabela może mieć skojarzone z nim zero lub więcej obiektów zasad aktualizacji. Każdy taki obiekt jest reprezentowany jako torba właściwości JSON ze zdefiniowanymi następującymi właściwościami.

Właściwość Typ Opis
IsEnabled bool Stany, jeśli zasady aktualizacji mają wartość true — włączone lub false — wyłączone
Źródło string Nazwa tabeli, która wyzwala wywołanie zasad aktualizacji. Może to być natywna tabela lub, w wersji zapoznawczej, zewnętrzna tabela, delta która ma włączone zasady przyspieszania zapytań . Aby uzyskać więcej informacji, zobacz Aktualizowanie zasad dotyczących zewnętrznych tabel różnicowych.
SourceIsWildCard bool Jeśli wartość true, Source właściwość może być wzorcem z symbolami wieloznacznymi. Zobacz Aktualizowanie zasad za pomocą wzorca z symbolami wieloznacznymi tabeli źródłowej
Query string Zapytanie używane do tworzenia danych dla aktualizacji.
IsTransactional bool Stany, jeśli zasady aktualizacji są transakcyjne lub nie, wartość domyślna to false. Jeśli zasady są transakcyjne i zasady aktualizacji nie powiedzie się, tabela źródłowa nie zostanie zaktualizowana.
PropagacjaingestionProperties bool Stany, jeśli właściwości określone podczas pozyskiwania do tabeli źródłowej, takie jak tagi zakresu i czas tworzenia, mają zastosowanie do tabeli docelowej.
ManagedIdentity string Tożsamość zarządzana, w imieniu której są uruchamiane zasady aktualizacji. Tożsamość zarządzana może być identyfikatorem obiektu lub słowem zarezerwowanym system . Zasady aktualizacji należy skonfigurować przy użyciu tożsamości zarządzanej, gdy zapytanie odwołuje się do tabel w innych bazach danych, tabelach z włączonymi zasadami zabezpieczeń na poziomie wiersza lub przyspieszonych tabel zewnętrznych korzystających z uwierzytelniania personifikacji. Aby uzyskać więcej informacji, zobacz Używanie tożsamości zarządzanej do uruchamiania zasad aktualizacji.
Właściwość Typ Opis
IsEnabled bool Stany, jeśli zasady aktualizacji mają wartość true — włączone lub false — wyłączone
Źródło string Nazwa tabeli, która wyzwala wywołanie zasad aktualizacji. Może to być natywna tabela lub, w wersji zapoznawczej, zewnętrzna tabela, delta która ma włączone zasady przyspieszania zapytań . Aby uzyskać więcej informacji, zobacz Aktualizowanie zasad dotyczących zewnętrznych tabel różnicowych.
SourceIsWildCard bool Jeśli wartość true, Source właściwość może być wzorcem z symbolami wieloznacznymi.
Query string Zapytanie używane do tworzenia danych dla aktualizacji
IsTransactional bool Stany, jeśli zasady aktualizacji są transakcyjne lub nie, wartość domyślna to false. Jeśli zasady są transakcyjne i zasady aktualizacji nie powiedzie się, tabela źródłowa nie zostanie zaktualizowana.
PropagacjaingestionProperties bool Stany, jeśli właściwości określone podczas pozyskiwania do tabeli źródłowej, takie jak tagi zakresu i czas tworzenia, mają zastosowanie do tabeli docelowej.
OwnerPrincipalDetails object Wypełniona przez system właściwość tylko do odczytu. Zawiera główne szczegóły użytkownika, który ustawia lub zmienia zasady aktualizacji. Ten podmiot zabezpieczeń jest używany do autoryzacji, gdy zapytanie zasad aktualizacji odwołuje się do tabel zewnętrznych, a w wersji zapoznawczej, aby uruchomić zasady aktualizacji asynchronicznie, gdy Source jest zewnętrzną tabelą różnicową. Ta właściwość jest automatycznie ustawiana przez system i nie można jej modyfikować ręcznie.

Uwaga

W systemach produkcyjnych ustaw wartość IsTransactional:true , aby upewnić się, że tabela docelowa nie utraci danych w przejściowych awariach.

Uwaga

Aktualizacje kaskadowe są dozwolone, na przykład z tabeli A do tabeli B, do tabeli C. Jeśli jednak zasady aktualizacji są definiowane w sposób cykliczny, jest to wykrywane w czasie wykonywania, a łańcuch aktualizacji jest wycinany. Dane są pozyskiwane tylko raz do każdej tabeli w łańcuchu.

Aktualizowanie zasad za pośrednictwem zewnętrznych tabel różnicowych (wersja zapoznawcza)

Uwaga

Ta funkcja jest oferowana w wersji zapoznawczej.

Oprócz tabeli Source natywnej zasady aktualizacji mogą być tabelą zewnętrzną, pod warunkiem, że:

Ta funkcja umożliwia automatyczne pozyskiwanie i przekształcanie nowych danych z zewnętrznej tabeli różnicowej w natywną tabelę docelową bez ręcznej aranżacji.

Example

Następujące polecenie umożliwia skonfigurowanie TargetTable pozyskiwania nowych wierszy z programu ExternalDeltaTable:

.alter table TargetTable policy update
```
[
    {
        "IsEnabled": true,
        "Source": "ExternalDeltaTable",
        "Query": "ExternalDeltaTable | project Timestamp, Value",
        "IsTransactional": false,
        "PropagateIngestionProperties": false
    }
]
```

Wymagania i ograniczenia

  • Właściwość zasad IsTransactional aktualizacji musi mieć wartość false. Transakcyjne zasady aktualizacji nie są obsługiwane, gdy źródło jest tabelą zewnętrzną.
  • Kwerenda zasad aktualizacji nie może odwoływać się do innych tabel zewnętrznych.
  • Nadal obowiązują standardowe wymagania i ograniczenia zasad aktualizacji, takie jak tabela źródłowa i docelowa w tej samej bazie danych oraz zgodność schematu między wynikami zapytania a tabelą docelową.
  • Tabele zewnętrzne korzystające z uwierzytelniania personifikacji lub z włączonymi zasadami zabezpieczeń na poziomie wiersza nie są obecnie obsługiwane jako źródło zasad aktualizacji.

Zachowanie przetwarzania

W przeciwieństwie do zasad aktualizacji w tabelach natywnych, które są uruchamiane synchronicznie w ramach pozyskiwania, zasady aktualizacji w zewnętrznych tabelach różnicowych są uruchamiane asynchronicznie w regularnych okresach.

Ważna

Zasady aktualizacji przetwarzają akcje zmieniające Add dane w dzienniku transakcji delty i ignorują Remove akcje. W związku z tym wiersze nigdy nie są usuwane ani modyfikowane w tabeli docelowej.

To zachowanie różni się od zasad aktualizacji w tabelach natywnych, gdzie .set-or-replace polecenie w tabeli źródłowej może zastąpić lub usunąć dane w pochodnych tabelach docelowych.

Operacja delty Wpływ na tabelę docelową
Dodawanie nowych danych Wstawia nowe wiersze.
Aktualizowanie istniejących danych Wstawia zaktualizowane wiersze. Poprzednie wiersze nie są usuwane.
Usuń dane Nie podejmuje żadnych działań. Usunięte wiersze pozostają w tabeli docelowej.

Uwaga

Aby uzyskać najlepsze wyniki, włącz wektory usuwania w źródłowej tabeli różnicowej. Bez wektorów usuwania operacje usuwania częściowego lub aktualizacji w źródłowej tabeli różnicowej mogą spowodować zduplikowanie wierszy w tabeli docelowej.

Wykonywanie zapytań względem tabeli docelowej

Wykonywanie zapytań względem tabeli docelowej bezpośrednio zwraca up-to-date wyniki, łącząc już przetworzone dane z danych z wersji tabeli różnicowej, które nie zostały jeszcze przetworzone.

Aby wykonywać zapytania tylko o już przetworzone dane, aby uzyskać lepszą wydajność kosztem świeżości, użyj materialized_table() funkcji :

materialized_table("TargetTableName")

Obsługa błędów

  • Jeśli zasady aktualizacji napotkają trwały błąd, taki jak tabela zewnętrzna staje się niedostępna lub niezgodność schematu przez siedem kolejnych dni, zasady aktualizacji zostaną automatycznie wyłączone.

Kaskadowe zasady aktualizacji

Zasady aktualizacji można zdefiniować w tabeli docelowej wypełnionej przez zasady aktualizacji w zewnętrznej tabeli różnicowej. Te drugie zasady aktualizacji zachowują się jak regularne, synchroniczne zasady aktualizacji w tabeli natywnej. Zachowanie specyficzne dla tabeli różnicowej opisane w tej sekcji dotyczy tylko pierwszego przeskoku z tabeli zewnętrznej delty do natywnej tabeli docelowej.

Aktualizowanie zasad za pośrednictwem zewnętrznych tabel różnicowych (wersja zapoznawcza)

Uwaga

Ta funkcja jest oferowana w wersji zapoznawczej.

Oprócz tabeli Source natywnej zasady aktualizacji mogą być tabelą zewnętrzną, pod warunkiem, że:

Ta funkcja umożliwia automatyczne pozyskiwanie i przekształcanie nowych danych z zewnętrznej tabeli różnicowej w natywną tabelę docelową bez ręcznej aranżacji.

Example

Następujące polecenie umożliwia skonfigurowanie TargetTable pozyskiwania nowych wierszy z programu ExternalDeltaTable:

.alter table TargetTable policy update
```
[
    {
        "IsEnabled": true,
        "Source": "ExternalDeltaTable",
        "Query": "ExternalDeltaTable | project Timestamp, Value",
        "IsTransactional": false,
        "PropagateIngestionProperties": false
    }
]
```

Wymagania i ograniczenia

  • Właściwość zasad IsTransactional aktualizacji musi mieć wartość false. Transakcyjne zasady aktualizacji nie są obsługiwane, gdy źródło jest tabelą zewnętrzną.
  • Kwerenda zasad aktualizacji nie może odwoływać się do innych tabel zewnętrznych.
  • Nadal obowiązują standardowe wymagania i ograniczenia zasad aktualizacji, takie jak tabela źródłowa i docelowa w tej samej bazie danych oraz zgodność schematu między wynikami zapytania a tabelą docelową.
  • Tabele zewnętrzne z włączonymi zasadami zabezpieczeń na poziomie wiersza nie są obecnie obsługiwane jako źródło zasad aktualizacji.

Zachowanie przetwarzania

W przeciwieństwie do zasad aktualizacji w tabelach natywnych, które są uruchamiane synchronicznie w ramach pozyskiwania, zasady aktualizacji w zewnętrznych tabelach różnicowych są uruchamiane asynchronicznie w regularnych okresach. Polecenie jest uruchamiane w imieniu podmiotu zabezpieczeń we właściwości zasad OwnerPrincipalDetails aktualizacji, które jest wypełniane automatycznie po utworzeniu lub zmianie zasad aktualizacji. Opóźnienie przetwarzania jest porównywalne z innymi okresowymi procesami, takimi jak eksport ciągły lub zmaterializowane widoki.

Ważna

Zasady aktualizacji przetwarzają akcje zmieniające Add dane w dzienniku transakcji delty i ignorują Remove akcje. W związku z tym wiersze nigdy nie są usuwane ani modyfikowane w tabeli docelowej.

To zachowanie różni się od zasad aktualizacji w tabelach natywnych, gdzie .set-or-replace polecenie w tabeli źródłowej może zastąpić lub usunąć dane w pochodnych tabelach docelowych. Ponieważ usunięcia zewnętrznego źródła tabeli delty są zawsze ignorowane, ten scenariusz utraty danych nie ma zastosowania, gdy źródło jest zewnętrzną tabelą różnicową: tabela docelowa tylko kiedykolwiek gromadzi nowe dane.

Operacja delty Wpływ na tabelę docelową
Dodawanie nowych danych Wstawia nowe wiersze.
Aktualizowanie istniejących danych Wstawia zaktualizowane wiersze. Poprzednie wiersze nie są usuwane.
Usuń dane Nie podejmuje żadnych działań. Usunięte wiersze pozostają w tabeli docelowej.

Uwaga

Aby uzyskać najlepsze wyniki, włącz wektory usuwania w źródłowej tabeli różnicowej. Bez wektorów usuwania operacje usuwania częściowego lub aktualizacji w źródłowej tabeli różnicowej mogą spowodować zduplikowanie wierszy w tabeli docelowej.

Wykonywanie zapytań względem tabeli docelowej

Podobnie jak w przypadku zmaterializowanych widoków, wykonywanie zapytań względem tabeli docelowej bezpośrednio zwraca up-to— wyniki daty przez połączenie już przetworzonych danych z danych z wersji tabeli delty, które nie zostały jeszcze przetworzone.

Aby wykonywać zapytania tylko o już przetworzone dane, aby uzyskać lepszą wydajność kosztem świeżości, użyj materialized_table() funkcji :

materialized_table("TargetTableName")

Obsługa błędów

  • Jeśli zasady aktualizacji napotkają trwały błąd, taki jak tabela zewnętrzna staje się niedostępna lub niezgodność schematu przez siedem kolejnych dni, zasady aktualizacji zostaną automatycznie wyłączone.
  • Jeśli w źródłowej tabeli delty wystąpi zmiana powodująca niezgodność, na przykład zmiana kolumny partycji, zasady aktualizacji zostaną automatycznie wstrzymane. Należy rozwiązać ten problem i ręcznie ponownie włączyć zasady aktualizacji.
  • Jeśli podmiot zabezpieczeń w OwnerPrincipalDetails programie nie ma już dostępu do tabeli zewnętrznej, zasady aktualizacji nie powiedzą się, dopóki nie zmieni się ponownie przez podmiot zabezpieczeń z odpowiednimi uprawnieniami.

Kaskadowe zasady aktualizacji

Zasady aktualizacji można zdefiniować w tabeli docelowej wypełnionej przez zasady aktualizacji w zewnętrznej tabeli różnicowej. Te drugie zasady aktualizacji zachowują się jak regularne, synchroniczne zasady aktualizacji w tabeli natywnej. Zachowanie specyficzne dla tabeli różnicowej opisane w tej sekcji dotyczy tylko pierwszego przeskoku z tabeli zewnętrznej delty do natywnej tabeli docelowej.

Polecenia zarządzania

Polecenia zarządzania zasadami aktualizacji obejmują:

Zasady aktualizacji są inicjowane po pozyskiwaniu

Zasady aktualizacji zaczynają obowiązywać, gdy dane są pozyskiwane lub przenoszone do tabeli źródłowej lub zakresy są tworzone w tabeli źródłowej. Te akcje można wykonać przy użyciu dowolnego z następujących poleceń:

Ostrzeżenie

Gdy zasady aktualizacji są wywoływane jako część .set-or-replace polecenia, domyślnie dane w tabelach pochodnych są zastępowane w taki sam sposób jak w tabeli źródłowej. Dane mogą zostać utracone we wszystkich tabelach z relacją zasad aktualizacji, jeśli jest wywoływane replace polecenie. Rozważ użycie .set-or-append zamiast tego.

Aktualizowanie zasad za pomocą wzorca z symbolami wieloznacznymi tabeli źródłowej

Zasady aktualizacji obsługują pozyskiwanie z wielu tabel źródłowych, które współdzielą ten sam wzorzec, przy użyciu tego samego zapytania co zapytanie zasad aktualizacji. Jest to przydatne, jeśli masz kilka tabel źródłowych, zwykle współużytkując ten sam schemat (lub podzbiór kolumn, które współużytkują wspólny schemat), i chcesz wyzwolić pozyskiwanie do pojedynczej tabeli docelowej podczas pozyskiwania do jednej z tych tabel. W takim przypadku zamiast definiować wiele zasad aktualizacji, z których każda dla pojedynczej tabeli źródłowej, można zdefiniować pojedyncze zasady aktualizacji z symbolami wieloznacznymi jako Source. Zasady Query aktualizacji muszą być zgodne ze wszystkimi tabelami źródłowymi zgodnymi ze wzorcem. Aby odwołać się do tabeli źródłowej w zapytaniu zasad aktualizacji, można użyć specjalnego symbolu o nazwie $source_table. Zobacz przykładowe zasady aktualizacji symboli wieloznanych.

Usuwanie danych z tabeli źródłowej

Po pozyskiwaniu danych do tabeli docelowej możesz opcjonalnie usunąć je z tabeli źródłowej. Ustaw okres usuwania nietrwałego 0sec (lub 00:00:00) w zasadach przechowywania tabeli źródłowej i zasady aktualizacji jako transakcyjne. Należy uwzględnić następujące warunki:

  • Dane źródłowe nie są możliwe do wykonywania zapytań z tabeli źródłowej
  • Dane źródłowe nie są utrwalane w trwałym magazynie w ramach operacji pozyskiwania
  • Wydajność operacyjna poprawia się. Zasoby po pozyskiwaniu są zmniejszane w przypadku operacji pielęgnacji w tle w zakresach w tabeli źródłowej.

Uwaga

Jeśli tabela źródłowa ma okres usuwania nietrwałego 0sec (lub 00:00:00), wszystkie zasady aktualizacji odwołujące się do tej tabeli muszą być transakcyjne.

Wpływ na wydajność

Zasady aktualizacji mogą mieć wpływ na wydajność, a pozyskiwanie zakresów danych jest mnożone przez liczbę tabel docelowych. Ważne jest, aby zoptymalizować zapytanie związane z zasadami. Możesz przetestować wpływ zasad aktualizacji na wydajność, wywołując zasady w już istniejących zakresach, przed utworzeniem lub zmianą zasad lub na funkcję używaną z zapytaniem.

Ocena użycia zasobów

Użyj polecenia .show queries, aby ocenić użycie zasobów (procesor CPU, pamięć itd.) przy użyciu następujących parametrów:

  • Source Ustaw właściwość , nazwę tabeli źródłowej jakoMySourceTable
  • Query Ustawianie właściwości w celu wywołania funkcji o nazwieMyFunction()
// '_extentId' is the ID of a recently created extent, that likely hasn't been merged yet.
let _extentId = toscalar(
    MySourceTable
    | project ExtentId = extent_id(), IngestionTime = ingestion_time()
    | where IngestionTime > ago(10m)
    | top 1 by IngestionTime desc
    | project ExtentId
);
// This scopes the source table to the single recent extent.
let MySourceTable =
    MySourceTable
    | where ingestion_time() > ago(10m) and extent_id() == _extentId;
// This invokes the function in the update policy (that internally references `MySourceTable`).
MyFunction

Ustawienia transakcyjne

Ustawienie zasad IsTransactional aktualizacji określa, czy zasady aktualizacji są transakcyjne i mogą mieć wpływ na zachowanie aktualizacji zasad w następujący sposób:

  • IsTransactional:false: Jeśli wartość jest ustawiona na wartość domyślną, false, zasady aktualizacji nie gwarantują spójności między danymi w tabeli źródłowej i docelowej. Jeśli zasady aktualizacji nie powiedzą się, dane są pozyskiwane tylko do tabeli źródłowej, a nie do tabeli docelowej. W tym scenariuszu operacja pozyskiwania zakończyła się pomyślnie.
  • IsTransactional:true: Jeśli wartość jest ustawiona na true, ustawienie gwarantuje spójność między danymi w tabelach źródłowych i docelowych. Jeśli zasady aktualizacji nie powiedzą się, dane nie są pozyskiwane do tabeli źródłowej ani docelowej. W tym scenariuszu operacja pozyskiwania nie powiedzie się.

Obsługa błędów

Gdy aktualizacje zasad kończą się niepowodzeniem, są obsługiwane inaczej w zależności od tego IsTransactional , czy ustawienie ma true wartość , czy false. Typowe przyczyny błędów zasad aktualizacji to:

  • Niezgodność między schematem danych wyjściowych zapytania a tabelą docelową.
  • Dowolny błąd zapytania.

Błędy aktualizacji zasad można wyświetlić przy użyciu .show ingestion failures polecenia z następującym poleceniem: W każdym innym przypadku można ręcznie ponowić próbę pozyskiwania.

.show ingestion failures
| where FailedOn > ago(1hr) and OriginatesFromUpdatePolicy == true

Przykład wyodrębniania, przekształcania, ładowania

Za pomocą ustawień zasad aktualizacji można wykonywać wyodrębnianie, przekształcanie, ładowanie (ETL).

W tym przykładzie użyj zasad aktualizacji z prostą funkcją do wykonania etL. Najpierw tworzymy dwie tabele:

  • Tabela źródłowa — zawiera pojedynczą kolumnę typu ciąg, w której pozyskiwane są dane.
  • Tabela docelowa — zawiera żądany schemat. Zasady aktualizacji są zdefiniowane w tej tabeli.
  1. Utwórzmy tabelę źródłową:

    .create table MySourceTable (OriginalRecord:string)
    
  2. Następnie utwórz tabelę docelową:

    .create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
    
  3. Następnie utwórz funkcję w celu wyodrębnienia danych:

    .create function
     with (docstring = 'Parses raw records into strongly-typed columns', folder = 'UpdatePolicyFunctions')
         ExtractMyLogs()
        {
        MySourceTable
        | parse OriginalRecord with "[" Timestamp:datetime "] [ThreadId:" ThreadId:int "] [ProcessId:" ProcessId:int "] TimeSinceStartup: " TimeSinceStartup:timespan " Message: " Message:string
        | project-away OriginalRecord
    }
    
  4. Teraz ustaw zasady aktualizacji, aby wywołać utworzoną funkcję:

    .alter table MyTargetTable policy update
    @'[{ "IsEnabled": true, "Source": "MySourceTable", "Query": "ExtractMyLogs()", "IsTransactional": true, "PropagateIngestionProperties": false}]'
    
  5. Aby opróżnić tabelę źródłową po pozyskiwaniu danych do tabeli docelowej, zdefiniuj zasady przechowywania w tabeli źródłowej, aby mieć wartość 0s jako wartość SoftDeletePeriod.

     .alter-merge table MySourceTable policy retention softdelete = 0s
    

Przykład zasad aktualizacji symboli wieloznanych

Poniższy przykład tworzy zasady aktualizacji z pojedynczym wpisem w tabeli TargetTable. Zasady odwołują się do wszystkich tabel pasujących do wzorca SourceTable* jako źródła. Każde pozyskiwanie do tabeli zgodnej ze wzorcem (w lokalnej bazie danych) spowoduje wyzwolenie zasad aktualizacji i pozyskanie danych do TargetTable, na podstawie zapytania zasad aktualizacji.

  1. Utwórz dwie tabele źródłowe:

    .create table SourceTable1(Id:long, Value:string)
    
    .create table SourceTable2(Id:long, Value:string)
    
  2. Utwórz tabelę docelową:

    .create table TargetTable(Id:long, Value:string, Source:string)
    
  3. Utwórz funkcję, która będzie służyć jako Query zasady aktualizacji. Funkcja używa symbolu $source_table do odwołowania Source się do zasad aktualizacji. Użyj polecenia skipValidation=true , aby pominąć walidację podczas tworzenia funkcji, ponieważ $source_table jest znany tylko podczas wykonywania zasad aktualizacji. Funkcja jest weryfikowana w następnym kroku podczas zmiany zasad aktualizacji.

    .create function with(skipValidation=true) IngestToTarget()
    {
        $source_table 
        | parse Value with "I'm from table " Source
        | project Id, Value, Source
    }
    
  4. Utwórz zasady aktualizacji w witrynie TargetTable. Zasady odwołują się do wszystkich tabel pasujących do wzorca SourceTable* jako źródła.

        .alter table TargetTable policy update
        ```[{ 
                "IsEnabled": true, 
                "Source": "SourceTable*", 
                "SourceIsWildCard" : true,
                "Query": "IngestToTarget()",
                "IsTransactional": true,
                "PropagateIngestionProperties": true
        }]```
    
    
  5. Pozyskiwanie do tabel źródłowych. Oba pozyskiwania wyzwalają zasady aktualizacji:

    .set-or-append SourceTable1 <| 
        datatable (Id:long, Value:string)
        [
            1, "I'm from table SourceTable1",
            2, "I'm from table SourceTable1"
        ]
    
    .set-or-append SourceTable2 <| 
        datatable (Id:long, Value:string)
        [
            3, "I'm from table SourceTable2",
            4, "I'm from table SourceTable2"
        ]
    
  6. Zapytanie TargetTable:

     TargetTable
    
    Id Wartość Źródło
    1 Jestem z tabeli SourceTable1 SourceTable1
    2 Jestem z tabeli SourceTable1 SourceTable1
    3 Jestem z tabeli SourceTable2 SourceTable2
    4 Jestem z tabeli SourceTable2 SourceTable2