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 truepolecenie , może rozszerzyć schemat tabeli. Wartość domyślna to false. Ta opcja dotyczy tylko .appendpoleceń , .set-or-appendi set-or-replace . Ta opcja wymaga co najmniej uprawnień Administracja tabeli.
recreate_schema bool Jeśli truepolecenie , 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 truewartość , 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 truepolecenie 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 pozyskiwania extend_schema lub recreate_schema pozyskiwania jest ustawiona na truewartość .
  • .set-or-append polecenia i .append zachowują schemat, chyba że właściwość pozyskiwania extend_schema jest ustawiona na truewartość .
  • 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 na true 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