Inserimento da query (.set, .append, .set-or-append, .set-or-replace)
Questi comandi eseguono una query o un comando di gestione e inseriscono i risultati della query in una tabella. La differenza tra questi comandi è il modo in cui trattano tabelle e dati esistenti o inesistente.
Comando | Se la tabella esiste | Se la tabella non esiste |
---|---|---|
.set |
Il comando non riesce | La tabella viene creata e i dati vengono inseriti |
.append |
I dati vengono aggiunti alla fine della tabella | Il comando non riesce |
.set-or-append |
I dati vengono aggiunti alla fine della tabella | La tabella viene creata e i dati vengono inseriti |
.set-or-replace |
I dati sostituiscono i dati nella tabella | La tabella viene creata e i dati vengono inseriti |
Per annullare un inserimento dal comando di query, vedere cancel operation
.
Nota
Questo metodo di inserimento è destinato all'esplorazione e alla prototipazione. Non usarlo negli scenari di produzione o di volumi elevati.
Autorizzazioni
Per eseguire azioni diverse in una tabella, sono necessarie autorizzazioni specifiche:
- Per aggiungere righe a una tabella esistente usando il
.append
comando, è necessario un minimo di autorizzazioni Table Ingestor. - Per creare una nuova tabella usando i vari
.set
comandi, sono necessarie almeno le autorizzazioni utente del database. - Per sostituire le righe in una tabella esistente usando il
.set-or-replace
comando, è necessario un minimo di autorizzazioni di Amministrazione tabella.
Per altre informazioni sulle autorizzazioni, vedere Controllo degli accessi in base al ruolo kusto.
Sintassi
(.set
.append
.set-or-append
| .set-or-replace
| | ) [async
] tableName [with
(
propertyName=
propertyValue [,
...])
] <|
queryOrCommand
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Tipo | Obbligatoria | Descrizione |
---|---|---|---|
Async | string |
Se specificato, il comando restituirà e continuerà l'inserimento in background. Usare il comando restituito con il comando per recuperare lo stato di completamento dell'inserimento OperationId .show operations e i risultati. |
|
tableName | string |
✔️ | Nome della tabella in cui inserire i dati. TableName è sempre correlato al database nel contesto. |
propertyName, propertyValue | string |
Una o più proprietà di inserimento supportate usate per controllare il processo di inserimento. | |
queryOrCommand | string |
✔️ | Testo di una query o di un comando di gestione i cui risultati vengono usati come dati per inserire. |
Nota
Sono supportati solo .show
i comandi di gestione.
Proprietà di inserimento supportate
Proprietà | Type | Descrizione |
---|---|---|
creationTime |
string |
Valore datetime, formattato come stringa ISO8601, da usare come ora di creazione degli extent dei dati inseriti. Se non specificato, now() viene usato. Se specificato, assicurarsi che la Lookback proprietà nel criterio di unione Extents della tabella di destinazione sia allineata al valore specificato. |
extend_schema |
bool |
Se true , il comando può estendere lo schema della tabella. Il valore predefinito è false . Questa opzione è valida solo per i comandi .append , .set-or-append e set-or-replace . Questa opzione richiede almeno autorizzazioni di Amministrazione tabella. |
recreate_schema |
bool |
Se true , il comando può ricreare lo schema della tabella. Il valore predefinito è false . Questa opzione è valida solo per il comando .set-or-replace . Questa opzione ha la precedenza sulla extend_schema proprietà se entrambi sono impostati. Questa opzione richiede almeno autorizzazioni di Amministrazione tabella. |
folder |
string |
Cartella da assegnare alla tabella. Se la tabella esiste già, questa proprietà sovrascrive la cartella della tabella. |
ingestIfNotExists |
string |
Se specificato, l'inserimento ha esito negativo se la tabella ha già i dati contrassegnati con un ingest-by: tag con lo stesso valore. Per altre informazioni, vedere inserimento-by: tag. |
policy_ingestiontime |
bool |
Se true , i criteri di inserimento verranno abilitati nella tabella. Il valore predefinito è true . |
tags |
string |
Stringa JSON che rappresenta un elenco di tag da associare all'extent creato. |
docstring |
string |
Descrizione usata per documentare la tabella. |
distributed |
bool |
Se true , il comando inserisce da tutti i nodi che eseguono la query in parallelo. Il valore predefinito è false . Vedere Suggerimenti sulle prestazioni. |
persistDetails |
Valore booleano che, se specificato, indica che il comando deve rendere persistenti i risultati dettagliati per il recupero dal comando dettagli operazione .show . Il valore predefinito è false . |
with (persistDetails=true) |
Considerazioni sullo schema
.set-or-replace
mantiene lo schema a meno che una delle proprietà diextend_schema
inserimento orecreate_schema
sia impostata sutrue
..set-or-append
e.append
i comandi mantengono lo schema a meno che laextend_schema
proprietà di inserimento non sia impostata sutrue
.- La corrispondenza dello schema del set di risultati a quella della tabella di destinazione è basata sui tipi di colonna. Non viene cercata alcuna corrispondenza tra i nomi delle colonne. Assicurarsi che le colonne dello schema dei risultati della query si trovino nello stesso ordine della tabella, altri dati verranno inseriti nelle colonne sbagliate.
Attenzione
Se lo schema viene modificato, si verifica in una transazione separata prima dell'inserimento effettivo dei dati. Ciò significa che lo schema può essere modificato anche quando si verifica un errore di inserimento dei dati.
Suggerimenti per incrementare le prestazioni
- L'inserimento dati è un'operazione a elevato utilizzo di risorse che potrebbe influire sulle attività simultanee nel cluster, inclusa l'esecuzione di query. Evitare di eseguire troppi comandi di inserimento contemporaneamente.
- Limitare i dati per l'inserimento a meno di 1 GB per ogni operazione di inserimento. Se necessario, usare più comandi di inserimento.
- Impostare il flag su
true
se ladistributed
quantità di dati generati dalla query è di grandi dimensioni, supera 1 GB e non richiede la serializzazione. Quindi, più nodi possono produrre output in parallelo. Non usare questo flag quando i risultati delle query sono piccoli, poiché potrebbe generare senza necessità molte partizioni di dati di piccole dimensioni.
Limitazione dei caratteri
Il comando avrà esito negativo se la query genera un nome di entità con il $
carattere. I nomi delle entità devono essere conformi alle regole di denominazione, pertanto il $
carattere deve essere rimosso per il comando di inserimento.
Ad esempio, nella query seguente l'operatore search
genera una colonna $table
. Per archiviare i risultati della query, usare project-rename per rinominare la colonna.
.set Texas <| search State has 'Texas' | project-rename tableName=$table
Esempio
Nel database creare una nuova tabella denominata RecentErrors che ha lo stesso schema di LogsTable e contiene tutti i record degli errori dell'ultima ora.
.set RecentErrors <|
LogsTable
| where Level == "Error" and Timestamp > now() - time(1h)
Nel database creare una nuova tabella denominata "OldExtents" che ha una sola colonna, "ExtentId", e contiene gli ID extent di tutti gli extent nel database creati più di 30 giorni prima. Il database contiene una tabella denominata "MyExtents". Poiché si prevede che il set di dati sia maggiore di 1 GB (più di circa 1 milione di righe) usare il flag distribuito
.set async OldExtents with(distributed=true) <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Nel database corrente aggiungere dati a una tabella esistente denominata "OldExtents" che ha una sola colonna, "ExtentId", e contiene gli ID extent di tutti gli extent nel database creati più di 30 giorni prima.
Contrassegnare il nuovo extent con i tag tagA
e tagB
, in base a una tabella esistente denominata "MyExtents".
.append OldExtents with(tags='["TagA","TagB"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Aggiungere i dati alla fine della tabella "OldExtents" nel database corrente oppure creare la tabella se non esiste già. Contrassegnare il nuovo extent con il tag ingest-by:myTag
. Eseguire questa operazione solo se la tabella non contiene già un extent con il tag ingest-by:myTag
, in base a una tabella esistente denominata "MyExtents".
.set-or-append async OldExtents with(tags='["ingest-by:myTag"]', ingestIfNotExists='["myTag"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Sostituire i dati nella tabella "OldExtents" nel database corrente oppure creare la tabella se non esiste già. Contrassegnare il nuovo extent con il tag ingest-by:myTag
.
.set-or-replace async OldExtents with(tags='["ingest-by:myTag"]', ingestIfNotExists='["myTag"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Aggiungere dati alla fine della tabella "OldExtents" nel database corrente, impostando l'ora di creazione degli extent creati su una data e ora specifiche nel passato.
.append async OldExtents with(creationTime='2017-02-13T11:09:36.7992775Z') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Restituire l'output
Restituisce informazioni sugli extent creati a causa del comando .set
o .append
.
Output di esempio
ExtentId | OriginalSize | ExtentSize | CompressedSize | IndexSize | RowCount |
---|---|---|---|---|---|
23a05ed6-376d-4119-b1fc-6493bcb05563 | 1291 | 5882 | 1568 | 4314 | 10 |
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per