Omówienie zasad aktualizacji
Zasady aktualizacji są mechanizmami automatyzacji wyzwalanymi po zapisaniu nowych danych do tabeli. Eliminują 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 umożliwia jednoczesne przekształcanie i zapisywanie danych w wielu tabelach. 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 linie śledzenia z dobrze ustrukturyzowanym schematem wygenerowanym na podstawie przekształcenia danych wolnego tekstu 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. Pokazuje ona dwie zasady aktualizacji wyzwalane po dodaniu danych do drugiej tabeli źródłowej i powoduje dodanie przekształconych danych do dwóch tabel docelowych.
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.
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 w nazwach kolumn, typach i kolejności.
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.
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 niekoniecznie jest 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.
- Nie może wykonywać wywołań (przy użyciu wtyczki).
- Zapytanie nie ma dostępu do odczytu do tabel z włączonymi zasadami Funkcji RestrictedViewAccess .
- Aby uzyskać ograniczenia zasad aktualizacji w pozyskiwaniu przesyłania strumieniowego, zobacz Ograniczenia pozyskiwania przesyłania strumieniowego.
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, może 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. Dlatego ważne jest, aby wszelkie zmiany były ostrożnie wprowadzane w celu zapewnienia, ż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 Query
się część:
- Nie używaj kwalifikowanej nazwy tabeli. Zamiast tego użyj polecenia
TableName
. - Nie używaj ani
database("DatabaseName").TableName
cluster("ClusterName").database("DatabaseName").TableName
.
Obiekt zasad aktualizacji
Tabela może zawierać co najmniej zero obiektów zasad aktualizacji skojarzonych z nią. Każdy taki obiekt jest reprezentowany jako torba właściwości JSON z następującymi właściwościami zdefiniowanymi.
Właściwość | Typ | Opis |
---|---|---|
IsEnabled | bool |
Stany, jeśli zasady aktualizacji są prawdziwe — włączone lub false — wyłączone |
Source | string |
Nazwa tabeli, która wyzwala wywołanie zasad aktualizacji |
Zapytanie | 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, a zasady aktualizacji kończą się niepowodzeniem, 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 zarezerwowanym wyrazem 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 lub tabelach z włączonymi zasadami zabezpieczeń na poziomie wiersza. Aby uzyskać więcej informacji, zobacz Używanie tożsamości zarządzanej do uruchamiania zasad aktualizacji. |
Uwaga
W systemach produkcyjnych ustaw wartość IsTransactional
:true , aby upewnić się, że tabela docelowa nie traci 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.
Polecenia zarządzania
Polecenia zarządzania zasadami aktualizacji obejmują:
.show table *TableName* policy update
pokazuje bieżące zasady aktualizacji tabeli..alter table *TableName* policy update
definiuje bieżące zasady aktualizacji tabeli..alter-merge table *TableName* policy update
dołącza definicje do bieżących zasad aktualizacji tabeli..delete table *TableName* policy update
usuwa bieżące zasady aktualizacji tabeli.
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 przy użyciu dowolnego z następujących poleceń:
- Pozyskiwanie (ściąganie)
- .ingest (wbudowany)
- .set | .append | .set-or-append | .set-or-replace
- .move extents
- .replace extents
- Polecenie
PropagateIngestionProperties
ma zastosowanie tylko w operacjach pozyskiwania. Po wyzwoleniu zasad aktualizacji w ramach.move extents
polecenia lub.replace extents
ta opcja nie ma wpływu.
- Polecenie
Ostrzeżenie
Gdy zasady aktualizacji są wywoływane w ramach .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 replace
zostanie wywołane polecenie.
Rozważ użycie .set-or-append
zamiast tego.
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. Obowiązują następujące warunki:
- Dane źródłowe nie można wykonywać 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ść klastra, a pozyskiwanie zakresów danych jest mnożone przez liczbę tabel docelowych. Ważne jest, aby zoptymalizować zapytanie związane z zasadami. Wpływ zasad aktualizacji na wydajność można przetestować, wywołując zasady w istniejących zakresach, przed utworzeniem lub zmianą zasad albo 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
- Ustawianie właściwości w
Query
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
Błędy
Przy domyślnym IsTransactional:
false
ustawieniu programu dane mogą być nadal pozyskiwane do tabeli źródłowej, nawet jeśli zasady nie zostaną uruchomione.
Ustawienie IsTransactional:
true
gwarantuje spójność między danymi w tabeli źródłowej i docelowej. Jeśli jednak warunki zasad nie powiedzą się, dane nie są pozyskiwane do tabeli źródłowej. Alternatywnie, w zależności od warunków, czasami dane są pozyskiwane do tabeli źródłowej, ale nie do tabeli docelowej. Jeśli jednak zasady są zdefiniowane niepoprawnie lub występuje niezgodność schematu, dane nie są pozyskiwane do tabeli źródłowej ani docelowej. Na przykład niezgodność między schematem danych wyjściowych zapytania a tabelą docelową może być spowodowana usunięciem kolumny z tabeli docelowej.
Błędy można wyświetlić przy .show ingestion failures
użyciu polecenia .
.show ingestion failures
| where FailedOn > ago(1hr) and OriginatesFromUpdatePolicy == true
Leczenie niepowodzeń
Zasady nietransakcyjne
Po ustawieniu IsTransactional:
false
wartości na wartość wszystkie błędy uruchamiania zasad są ignorowane. Pozyskiwanie nie jest automatycznie ponawiane. Możesz ręcznie ponowić próbę pozyskiwania.
Zasady transakcyjne
W przypadku ustawienia IsTransactional:
true
wartości , jeśli metoda pozyskiwania ma pull
wartość , usługa Zarządzanie danymi jest zaangażowana, a pozyskiwanie jest automatycznie ponawiane zgodnie z następującymi warunkami:
- Ponowne próby są wykonywane do momentu spełnienia jednego z następujących konfigurowalnych ustawień limitu:
DataImporterMaximumRetryPeriod
lubDataImporterMaximumRetryAttempts
- Domyślnie ustawienie to
DataImporterMaximumRetryPeriod
dwa dni iDataImporterMaximumRetryAttempts
wynosi 10 - Okres wycofywania rozpoczyna się o 2 minuty i podwaja się. Więc oczekiwanie zaczyna się od 2 minut, a następnie zwiększa się do 4 minut, do 8 minut, do 16 minut itd.
W każdym innym przypadku można ręcznie ponowić próbę pozyskiwania.
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 operacji 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.
Utwórzmy tabelę źródłową:
.create table MySourceTable (OriginalRecord:string)
Następnie utwórz tabelę docelową:
.create table MyTargetTable (Timestamp:datetime, ThreadId:int, ProcessId:int, TimeSinceStartup:timespan, Message:string)
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 }
Teraz ustaw zasady aktualizacji, aby wywołać utworzoną funkcję:
.alter table MyTargetTable policy update @'[{ "IsEnabled": true, "Source": "MySourceTable", "Query": "ExtractMyLogs()", "IsTransactional": true, "PropagateIngestionProperties": false}]'
Aby opróżnić tabelę źródłową po pozyskaniu 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
Zawartość pokrewna
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla