Pozyskiwanie z zapytania (.set, .append, .set-or-append, .set-or-replace)
Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer
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
Pozyskiwanie z zapytania jest bezpośrednim pozyskiwaniem. W związku z tym nie obejmuje automatycznych ponownych prób. Automatyczne ponawianie prób jest dostępne podczas pozyskiwania za pośrednictwem usługi zarządzania danymi. Użyj dokumentu przeglądu pozyskiwania, aby zdecydować, która opcja pozyskiwania jest najbardziej odpowiednia dla danego scenariusza.
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 , potrzebujesz co najmniej uprawnień narzędzia 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 administratora 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
.set-or-append
.set-or-replace
| | .append
| ) [async
] tableName [with
(
propertyName =
propertyValue [,
...]] <|
)
queryOrCommand
Dowiedz się więcej na temat konwencji składni.
Parametry
Nazwisko | Type | Wymagania | opis |
---|---|---|---|
async | string |
Jeśli zostanie określony, polecenie zwraca natychmiast i kontynuuje 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. Nazwa _tabeli jest zawsze powiązana 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. Obsługiwane są tylko .show polecenia zarządzania. |
Wskazówki dotyczące wydajności
distributed
Ustaw właściwość 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.- Pozyskiwanie danych to operacja intensywnie korzystająca z zasobów, która może mieć wpływ na współbieżne działania w bazie danych, 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.
Obsługiwane właściwości pozyskiwania
Właściwość | Type | Opis |
---|---|---|
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. |
creationTime |
string |
Wartość daty/godziny sformatowana jako ciąg ISO8601 do użycia w czasie tworzenia pozyskanych zakresów danych. Jeśli nie określono, now() jest używany. Po określeniu Lookback upewnij się, że właściwość w obowiązujących zasadach scalania zakresów tabeli docelowej jest zgodna z określoną 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ń administratora tabeli. |
recreate_schema |
bool |
Jeśli true polecenie może odtworzyć schemat tabeli. Wartość domyślna to false . Ta opcja ma zastosowanie tylko do .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ń administratora 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 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. |
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 ustawionotrue
jedną z właściwości pozyskiwaniaextend_schema
lubrecreate_schema
..set-or-append
polecenia i.append
zachowują schemat, chyba że właściwość pozyskiwaniaextend_schema
jest ustawiona natrue
.- 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 są w tej samej kolejności co tabela, inne dane zostaną pozyskane do nieprawidłowych kolumn.
Uwaga
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.
Ograniczenie znaków
Polecenie kończy się niepowodzeniem, jeśli zapytanie generuje 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 zapisać 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 ten sam schemat co LogsTable i przechowuje wszystkie rekordy błędów z 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óre zostały utworzone ponad 30 dni temu. Baza danych ma istniejącą tabelę o nazwie "MyExtents". Ponieważ zestaw danych powinien być większy niż 1 GB (więcej niż ok. 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. Otaguj 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. Otaguj 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 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 | Rozmiar zakresu | Skompresowany rozmiar | IndexSize | RowCount |
---|---|---|---|---|---|
23a05ed6-376d-4119-b1fc-6493bcb05563 | 1291 | 5882 | 1568 | 4314 | 10 |