Pozyskiwanie z zapytania (.set, .append, .set-or-append, .set-or-replace)
Te polecenia wykonują zapytanie lub polecenie zarządzania i pozyskując wyniki zapytania w tabeli. Różnica między tymi poleceniami polega na tym, jak traktują istniejące lub nieistniejących tabel i danych.
Polecenie | Jeśli tabela istnieje | Jeśli tabela nie istnieje |
---|---|---|
.set |
Polecenie kończy się niepowodzeniem | Tabela jest tworzona, a dane są pozyskiwane |
.append |
Dane są dołączane do tabeli | Polecenie kończy się niepowodzeniem |
.set-or-append |
Dane są dołączane do tabeli | Tabela jest tworzona, a dane są pozyskiwane |
.set-or-replace |
Dane zastępują dane w tabeli | Tabela jest tworzona, a dane są pozyskiwane |
Aby anulować pozyskiwanie z polecenia zapytania, zobacz cancel operation
.
Uwaga
Ta metoda pozyskiwania jest przeznaczona do eksploracji i tworzenia prototypów. Nie używaj go w scenariuszach produkcyjnych ani dużych ilości.
Uprawnienia
Aby wykonać różne akcje w tabeli, wymagane są określone uprawnienia:
- Aby dodać wiersze do istniejącej tabeli przy użyciu
.append
polecenia , musisz mieć co najmniej uprawnienia funkcji Table Ingestor. - Aby utworzyć nową tabelę przy użyciu różnych
.set
poleceń, musisz mieć co najmniej uprawnienia użytkownika bazy danych. - Aby zastąpić wiersze w istniejącej tabeli za pomocą
.set-or-replace
polecenia , musisz mieć co najmniej uprawnienia do Administracja tabeli.
Aby uzyskać więcej informacji na temat uprawnień, zobacz Kusto role-based access control (Kontrola dostępu oparta na rolach w usłudze Kusto).
Składnia
(.set
.append
.set-or-replace
| .set-or-append
| | ) [async
] tableName [with
(
propertyName =
propertyValue [,
...]] <|
)
queryOrCommand
Dowiedz się więcej o konwencjach składniowych.
Parametry
Nazwa | Typ | Wymagane | Opis |
---|---|---|---|
Async | string |
Jeśli zostanie określony, polecenie zwróci i będzie kontynuować pozyskiwanie w tle. Użyj zwróconego OperationId polecenia , .show operations aby pobrać stan ukończenia pozyskiwania i wyniki. |
|
Tablename | string |
✔️ | Nazwa tabeli do pozyskiwania danych. Parametr tableName jest zawsze powiązany z bazą danych w kontekście. |
propertyName, propertyValue | string |
Co najmniej jedna obsługiwana właściwości pozyskiwania używana do kontrolowania procesu pozyskiwania. | |
queryOrCommand | string |
✔️ | Tekst zapytania lub polecenia zarządzania, którego wyniki są używane jako dane do pozyskiwania. |
Uwaga
Obsługiwane są tylko .show
polecenia zarządzania.
Obsługiwane właściwości pozyskiwania
Właściwość | Typ | Opis |
---|---|---|
creationTime |
string |
Wartość data/godzina, sformatowana jako ciąg ISO8601, która ma być używana w czasie tworzenia pozyskanych zakresów danych. Jeśli nie zostanie określona, now() zostanie użyta. Po określeniu Lookback upewnij się, że właściwość w obowiązujących zasadach scalania Zakresy tabeli docelowej jest wyrównana do określonej wartości. |
extend_schema |
bool |
Jeśli true polecenie , może rozszerzyć schemat tabeli. Wartość domyślna to false . Ta opcja dotyczy tylko .append poleceń , .set-or-append i set-or-replace . Ta opcja wymaga co najmniej uprawnień Administracja tabeli. |
recreate_schema |
bool |
Jeśli true polecenie , może ponownie utworzyć schemat tabeli. Wartość domyślna to false . Ta opcja dotyczy tylko .set-or-replace polecenia . Ta opcja ma pierwszeństwo przed właściwością extend_schema , jeśli obie są ustawione. Ta opcja wymaga co najmniej uprawnień Administracja tabeli. |
folder |
string |
Folder do przypisania do tabeli. Jeśli tabela już istnieje, ta właściwość zastępuje folder tabeli. |
ingestIfNotExists |
string |
Jeśli zostanie określony, pozyskiwanie nie powiedzie się, jeśli tabela zawiera już dane oznaczone tagiem ingest-by: o tej samej wartości. Aby uzyskać więcej informacji, zobacz ingest-by: tags (Pozyskiwanie według tagów). |
policy_ingestiontime |
bool |
Jeśli true wartość , zasady czasu pozyskiwania zostaną włączone w tabeli. Wartość domyślna to true . |
tags |
string |
Ciąg JSON reprezentujący listę tagów do skojarzenia z utworzonym zakresem. |
docstring |
string |
Opis używany do dokumentowania tabeli. |
distributed |
bool |
Jeśli true polecenie jest pozyskiwane ze wszystkich węzłów wykonujących zapytanie równolegle. Wartość domyślna to false . Zobacz porady dotyczące wydajności. |
persistDetails |
Wartość logiczna, która, jeśli została określona, wskazuje, że polecenie powinno utrwalić szczegółowe wyniki pobierania przez polecenie .show operation details . Wartość domyślna to false . |
with (persistDetails=true) |
Zagadnienia dotyczące schematu
.set-or-replace
Zachowuje schemat, chyba że jedna z właściwości pozyskiwaniaextend_schema
lubrecreate_schema
pozyskiwania jest ustawiona natrue
wartość ..set-or-append
polecenia i.append
zachowują schemat, chyba że właściwość pozyskiwaniaextend_schema
jest ustawiona natrue
wartość .- Dopasowanie schematu zestawu wyników do tabeli docelowej jest oparte na typach kolumn. Nie ma pasujących nazw kolumn. Upewnij się, że kolumny schematu wyników zapytania znajdują się w tej samej kolejności co tabela, a inne dane zostaną pozyskane do nieprawidłowych kolumn.
Przestroga
Jeśli schemat zostanie zmodyfikowany, nastąpi to w oddzielnej transakcji przed rzeczywistym pozyskiwaniem danych. Oznacza to, że schemat może zostać zmodyfikowany nawet wtedy, gdy nie można pozyskać danych.
Porady dotyczące wydajności
- Pozyskiwanie danych to operacja intensywnie korzystająca z zasobów, która może mieć wpływ na współbieżne działania w klastrze, w tym uruchamianie zapytań. Unikaj uruchamiania zbyt wielu poleceń pozyskiwania w tym samym czasie.
- Ogranicz dane pozyskiwania do mniej niż 1 GB na operację pozyskiwania. W razie potrzeby użyj wielu poleceń pozyskiwania.
- Ustaw flagę
distributed
natrue
wartość , jeśli ilość danych generowanych przez zapytanie jest duża, przekracza 1 GB i nie wymaga serializacji. Następnie wiele węzłów może generować dane wyjściowe równolegle. Nie używaj tej flagi, gdy wyniki zapytania są małe, ponieważ może niepotrzebnie generować wiele małych fragmentów danych.
Ograniczenie znaków
Polecenie zakończy się niepowodzeniem, jeśli zapytanie wygeneruje nazwę jednostki z znakiem $
. Nazwy jednostek muszą być zgodne z regułami nazewnictwa, więc $
znak musi zostać usunięty, aby polecenie pozyskiwania powiodło się.
Na przykład w poniższym zapytaniu search
operator generuje kolumnę $table
. Aby przechowywać wyniki zapytania, użyj nazwy projektu, aby zmienić nazwę kolumny.
.set Texas <| search State has 'Texas' | project-rename tableName=$table
Przykłady
Utwórz nową tabelę o nazwie RecentErrors w bazie danych, która ma taki sam schemat, jak LogsTable i przechowuje wszystkie rekordy błędów w ciągu ostatniej godziny.
.set RecentErrors <|
LogsTable
| where Level == "Error" and Timestamp > now() - time(1h)
Utwórz nową tabelę o nazwie "OldExtents" w bazie danych, która ma jedną kolumnę "ExtentId" i przechowuje identyfikatory zakresu wszystkich zakresów w bazie danych, która została utworzona ponad 30 dni wcześniej. Baza danych ma istniejącą tabelę o nazwie "MyExtents". Ponieważ zestaw danych ma być większy niż 1 GB (ponad 1 milion wierszy) użyj flagi rozproszonej
.set async OldExtents with(distributed=true) <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Dołącz dane do istniejącej tabeli o nazwie "OldExtents" w bieżącej bazie danych zawierającej jedną kolumnę "ExtentId" i przechowują identyfikatory zakresu wszystkich zakresów w bazie danych, które zostały utworzone ponad 30 dni wcześniej.
Oznacz nowy zakres tagami tagA
i tagB
, na podstawie istniejącej tabeli o nazwie "MyExtents".
.append OldExtents with(tags='["TagA","TagB"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Dołącz dane do tabeli "OldExtents" w bieżącej bazie danych lub utwórz tabelę, jeśli jeszcze nie istnieje. Oznacz nowy zakres za pomocą polecenia ingest-by:myTag
. Zrób to tylko wtedy, gdy tabela nie zawiera jeszcze zakresu oznaczonego tagiem ingest-by:myTag
, na podstawie istniejącej tabeli o nazwie "MyExtents".
.set-or-append async OldExtents with(tags='["ingest-by:myTag"]', ingestIfNotExists='["myTag"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Zastąp dane w tabeli "OldExtents" w bieżącej bazie danych lub utwórz tabelę, jeśli jeszcze nie istnieje. Oznacz nowy zakres za pomocą polecenia ingest-by:myTag
.
.set-or-replace async OldExtents with(tags='["ingest-by:myTag"]', ingestIfNotExists='["myTag"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Dołącz dane do tabeli "OldExtents" w bieżącej bazie danych, ustawiając czas tworzenia utworzonych zakresów na określoną datę/godzinę w przeszłości.
.append async OldExtents with(creationTime='2017-02-13T11:09:36.7992775Z') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Zwracanie danych wyjściowych
Zwraca informacje o zakresach utworzonych z .set
powodu polecenia lub .append
.
Przykładowe dane wyjściowe
ExtentId | OriginalSize | ExtentSize | Skompresowany rozmiar | IndexSize | Rowcount |
---|---|---|---|---|---|
23a05ed6-376d-4119-b1fc-6493bcb05563 | 1291 | 5882 | 1568 | 4314 | 10 |
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