Inserimento da query (. set,. Append,. set-o-Append,. set-o-Replace)Ingest from query (.set, .append, .set-or-append, .set-or-replace)

Questi comandi eseguono una query o un comando di controllo e inseriscono i risultati della query in una tabella.These commands execute a query or a control command and ingest the results of the query into a table. La differenza tra questi comandi è il modo in cui trattano le tabelle e i dati esistenti o inesistenti.The difference between these commands, is how they treat existing or nonexistent tables and data.

ComandoCommand Se la tabella esisteIf table exists Se la tabella non esisteIf table doesn't exist
.set Il comando non riesceThe command fails La tabella viene creata e i dati vengono inseritiThe table is created and data is ingested
.append I dati vengono accodati alla tabellaData is appended to the table Il comando non riesceThe command fails
.set-or-append I dati vengono accodati alla tabellaData is appended to the table La tabella viene creata e i dati vengono inseritiThe table is created and data is ingested
.set-or-replace I dati vengono sostituiti dalla tabellaData replaces the data in the table La tabella viene creata e i dati vengono inseritiThe table is created and data is ingested

SintassiSyntax

.set[ async ] TableName [ with ( PropertyName = PropertyValue [ , ...] ) ] <| QueryOrCommand.set [async] TableName [with (PropertyName = PropertyValue [, ...])] <| QueryOrCommand

.append[ async ] TableName [ with ( PropertyName = PropertyValue [ , ... ]) ] <| QueryOrCommand.append [async] TableName [with (PropertyName = PropertyValue [, ...])] <| QueryOrCommand

.set-or-append[ async ] TableName [ with ( PropertyName = PropertyValue [ , ...] ) ] <| QueryOrCommand.set-or-append [async] TableName [with (PropertyName = PropertyValue [, ...])] <| QueryOrCommand

.set-or-replace[ async ] TableName [ with ( PropertyName = PropertyValue [ , ...] ) ] <| QueryOrCommand.set-or-replace [async] TableName [with (PropertyName = PropertyValue [, ...])] <| QueryOrCommand

ArgomentiArguments

  • async: Se specificato, il comando restituirà immediatamente e continuerà l'inserimento in background.async: If specified, the command will immediately return and continue ingestion in the background. I risultati del comando includeranno un OperationId valore che può essere usato con il .show operations comando per recuperare lo stato di completamento dell'inserimento e i risultati.The results of the command will include an OperationId value that can then be used with the .show operations command, to retrieve the ingestion completion status and results.
  • TableName: nome della tabella in cui inserire i dati.TableName: The name of the table to ingest data to. Il nome della tabella è sempre correlato al database nel contesto.The table name is always related to the database in context.
  • PropertyName, PropertyValue: un numero qualsiasi di proprietà di inserimento che influiscono sul processo di inserimento.PropertyName, PropertyValue: Any number of ingestion properties that affect the ingestion process.

Proprietà di inserimento supportate.Ingestion properties that are supported.

ProprietàProperty DescrizioneDescription
creationTime Valore DateTime, formattato come stringa ISO8601, da utilizzare al momento della creazione degli extent dei dati inseriti.The datetime value, formatted as an ISO8601 string, to use at the creation time of the ingested data extents. Se non è specificato, verrà usato il valore corrente ( now() ).If unspecified, the current value (now()) will be used
extend_schema Valore booleano che, se specificato, indica al comando di estendere lo schema della tabella.A Boolean value that, if specified, instructs the command to extend the schema of the table. Il valore predefinito è "false".Default is "false". Questa opzione si applica solo .append ai .set-or-append comandi, e set-or-replace .This option applies only to .append, .set-or-append, and set-or-replace commands. Le uniche estensioni dello schema consentite includono colonne aggiuntive aggiunte alla tabella alla fineThe only permitted schema extensions have additional columns added to the table at the end
recreate_schema Valore booleano che.A Boolean value that. Se specificato, descrive se il comando può ricreare lo schema della tabella.If specified, describes if the command may recreate the schema of the table. Il valore predefinito è "false".Default is "false". Questa opzione si applica solo al comando set-o-Replace .This option applies only to the set-or-replace command. Questa opzione ha la precedenza sulla proprietà extend_schema se sono entrambe impostateThis option takes precedence over the extend_schema property if both are set
folder Cartella da assegnare alla tabella.The folder to assign to the table. Se la tabella esiste già, questa proprietà sovrascriverà la cartella della tabella.If the table already exists, this property will overwrite the table's folder.
ingestIfNotExists Valore stringa che.A string value that. Se specificato, impedisce la riuscita dell'inserimento se la tabella contiene già dati contrassegnati con un ingest-by: tag con lo stesso valoreIf specified, prevents ingestion from succeeding if the table already has data tagged with an ingest-by: tag with the same value
policy_ingestiontime Valore booleano.A Boolean value. Se specificato, descrive se abilitare i criteri del tempo di inserimento in una tabella creata da questo comando.If specified, describes if to enable the Ingestion Time Policy on a table that is created by this command. Il valore predefinito è "true"The default is "true"
tags Stringa JSON che indica le convalide da eseguire durante l'inserimentoA JSON string that indicates which validations to run during ingestion
docstring Stringa che documenta la tabellaA string documenting the table

Proprietà che controlla il comportamento del comando.Property that controls the behavior of the command.

ProprietàProperty TypeType DescriptionDescription
distributed bool Indica che il comando inserisce tutti i nodi che eseguono la query in parallelo.Indicates that the command ingests from all nodes executing the query in parallel. Il valore predefinito è "false".Default is "false". Vedere la sezione Note in basso.See remarks below.
  • QueryOrCommand: il testo di una query o un comando di controllo i cui risultati verranno usati come dati da inserire.QueryOrCommand: The text of a query or a control command whose results will be used as data to ingest.

Nota

.showSono supportati solo i comandi di controllo.Only .show control commands are supported.

Osservazioni:Remarks

  • .set-or-replacesostituisce i dati della tabella se esiste..set-or-replace replaces the data of the table if it exists. Elimina le partizioni di dati esistenti o crea la tabella di destinazione, se non esiste già.It drops the existing data shards or creates the target table, if doesn't already exist. Lo schema della tabella verrà mantenuto a meno che una o più proprietà di inserimento non extend_schema recreate_schema siano impostate su "true".The table schema will be preserved unless one of extend_schema or recreate_schema ingestion properties is set to "true". Se lo schema viene modificato, si verifica prima dell'inserimento effettivo dei dati nella relativa transazione.If the schema is modified, it happens before the actual data ingestion in its own transaction. Un errore di inserimento dei dati non significa che lo schema non è stato modificato.A failure to ingest the data doesn't mean the schema wasn't modified.
  • .set-or-append``.appendi comandi e manterranno lo schema a meno che la extend_schema proprietà di inserimento non sia impostata su "true"..set-or-append and .append commands will preserve the schema unless the extend_schema ingestion property is set to "true". Se lo schema viene modificato, si verifica prima dell'inserimento effettivo dei dati nella relativa transazione.If the schema is modified, it happens before the actual data ingestion in its own transaction. Un errore di inserimento dei dati non significa che lo schema non è stato modificato.A failure to ingest the data doesn't mean the schema wasn't modified.
  • È consigliabile limitare i dati per l'inserimento a meno di 1 GB per operazione di inserimento.We recommended that you limit the data for ingestion to less than 1 GB per ingestion operation. Se necessario, è possibile usare più comandi di inserimento.Multiple ingestion commands may be used, if necessary.
  • L'inserimento dei dati è un'operazione a elevato utilizzo di risorse che può influire sulle attività simultanee nel cluster, incluse le query in esecuzione.Data ingestion is a resource-intensive operation that might affect concurrent activities on the cluster, including running queries. Evitare di eseguire contemporaneamente troppi comandi.Avoid running too many such commands at the same time.
  • Quando si associa lo schema del set di risultati a quello della tabella di destinazione, il confronto è basato sui tipi di colonna.When matching the result set schema to that of the target table, the comparison is based on the column types. Nessun nome di colonna corrispondente.There's no matching of column names. Verificare che le colonne dello schema dei risultati della query si trovino nello stesso ordine della tabella.Make sure that the query result schema columns are in the same order as the table. In caso contrario, i dati verranno inseriti nella colonna errata.Else data will be ingested into the wrong column.
  • L'impostazione del distributed flag su "true" è utile quando la quantità di dati prodotti dalla query è elevata, supera 1 GB e la query non richiede la serializzazione, in modo che più nodi possano produrre output in parallelo.Setting the distributed flag to "true" is useful when the amount of data being produced by the query is large, exceeds 1GB, and the query doesn't require serialization, so that multiple nodes can produce output in parallel. Quando i risultati della query sono di dimensioni ridotte, non usare questo flag, perché potrebbe generare inutilmente molte partizioni di dati di piccole dimensioni.When the query results are small, don't use this flag, since it might needlessly generate many small data shards.

esempiExamples

Creare una nuova tabella denominata "RecentErrors" nel database con lo stesso schema di "LogsTable" e contenere tutti i record degli errori dell'ultima ora.Create a new table called "RecentErrors" in the database that has the same schema as "LogsTable" and holds all the error records of the last hour.

.set RecentErrors <|
   LogsTable
   | where Level == "Error" and Timestamp > now() - time(1h)

Creare una nuova tabella denominata "OldExtents" nel database con una sola colonna "ExtentId" e contenere gli ID extent di tutti gli extent del database creati più di 30 giorni prima.Create a new table called "OldExtents" in the database that has a single column, "ExtentId", and holds the extent IDs of all extents in the database that has been created more than 30 days earlier. Nel database è presente una tabella denominata "extent".The database has an existing table named "MyExtents".

.set async OldExtents <|
   MyExtents 
   | where CreatedOn < now() - time(30d)
   | project ExtentId

Accodare i dati a una tabella esistente denominata "OldExtents" nel database corrente con una sola colonna, "ExtentId", e contiene gli ID extent di tutti gli extent del database creati più di 30 giorni prima.Append data to an existing table called "OldExtents" in the current database that has a single column, "ExtentId", and holds the extent IDs of all extents in the database that have been created more than 30 days earlier. Contrassegnare il nuovo extent con i tag tagA e tagB , in base a una tabella esistente denominata "extents".Mark the new extent with tags tagA and tagB, based on an existing table named "MyExtents".

.append OldExtents with(tags='["TagA","TagB"]') <| 
   MyExtents 
   | where CreatedOn < now() - time(30d) 
   | project ExtentId

Accodare i dati alla tabella "OldExtents" nel database corrente oppure creare la tabella se non esiste già.Append data to the "OldExtents" table in the current database, or create the table if it doesn't already exist. Contrassegnare il nuovo extent con ingest-by:myTag .Tag the new extent with ingest-by:myTag. Eseguire questa operazione solo se la tabella non contiene già un extent con tag ingest-by:myTag , in base a una tabella esistente denominata "extents".Do so only if the table doesn't already contain an extent tagged with ingest-by:myTag, based on an existing table named "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" del database corrente oppure creare la tabella se non esiste già.Replace the data in the "OldExtents" table in the current database, or create the table if it doesn't already exist. Contrassegnare il nuovo extent con ingest-by:myTag .Tag the new extent with ingest-by:myTag.

.set-or-replace async OldExtents with(tags='["ingest-by:myTag"]', ingestIfNotExists='["myTag"]') <| 
   MyExtents 
   | where CreatedOn < now() - time(30d) 
   | project ExtentId

Accodare i dati alla tabella "OldExtents" nel database corrente, impostando al tempo stesso i tempi di creazione degli extent creati su uno specifico valore DateTime.Append data to the "OldExtents" table in the current database, while setting the created extent(s) creation time to a specific datetime in the past.

.append async OldExtents with(creationTime='2017-02-13T11:09:36.7992775Z') <| 
   MyExtents 
   | where CreatedOn < now() - time(30d) 
   | project ExtentId     

Restituisci outputReturn output

Restituisce informazioni sugli extent creati a causa del .set .append comando o.Returns information on the extents created because of the .set or .append command.

Output di esempioExample output

ExtentIdExtentId OriginalSizeOriginalSize ExtentSizeExtentSize CompressedSizeCompressedSize IndexSizeIndexSize RowCountRowCount
23a05ed6-376D-4119-B1FC-6493bcb0556323a05ed6-376d-4119-b1fc-6493bcb05563 12911291 58825882 15681568 43144314 1010