Opnemen uit query (.set, .append, .set-or-append, .set-or-replace)
Met deze opdrachten wordt een query of een beheeropdracht uitgevoerd en worden de resultaten van de query opgenomen in een tabel. Het verschil tussen deze opdrachten is hoe ze bestaande of niet-bestaande tabellen en gegevens behandelen.
Opdracht | Als de tabel bestaat | Als de tabel niet bestaat |
---|---|---|
.set |
De opdracht mislukt | De tabel wordt gemaakt en de gegevens worden opgenomen |
.append |
Gegevens worden toegevoegd aan de tabel | De opdracht mislukt |
.set-or-append |
Gegevens worden toegevoegd aan de tabel | De tabel wordt gemaakt en de gegevens worden opgenomen |
.set-or-replace |
Gegevens vervangen de gegevens in de tabel | De tabel wordt gemaakt en de gegevens worden opgenomen |
Zie cancel operation
als u een opname van een queryopdracht wilt annuleren.
Notitie
Deze opnamemethode is bedoeld voor verkenning en prototypen. Gebruik het niet in productie- of scenario's met grote volumes.
Machtigingen
Als u verschillende acties op een tabel wilt uitvoeren, zijn specifieke machtigingen vereist:
- Als u rijen wilt toevoegen aan een bestaande tabel met behulp van de
.append
opdracht, hebt u minimaal Ingestor-machtigingen voor tabellen nodig. - Als u een nieuwe tabel wilt maken met behulp van de verschillende
.set
opdrachten, hebt u minimaal machtigingen voor databasegebruikers nodig. - Als u rijen in een bestaande tabel wilt vervangen met behulp van de
.set-or-replace
opdracht, hebt u minimaal tabelmachtigingen voor Beheer nodig.
Zie Op rollen gebaseerd toegangsbeheer van Kusto voor meer informatie over machtigingen.
Syntax
(.set
| .set-or-append
.set-or-replace
.append
| | ) [async
] tableName [with
(
propertyName=
propertyValue [,
...]] <|
)
queryOrOpdracht
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
Async | string |
Als dit is opgegeven, retourneert de opdracht en gaat de opname op de achtergrond verder. Gebruik de geretourneerd OperationId met de .show operations opdracht om de voltooiingsstatus en resultaten van de opname op te halen. |
|
tableName | string |
✔️ | De naam van de tabel waarin gegevens moeten worden opgenomen. De tableName is altijd gerelateerd aan de database in context. |
propertyName, propertyValue | string |
Een of meer ondersteunde opname-eigenschappen die worden gebruikt om het opnameproces te beheren. | |
queryOrOpdracht | string |
✔️ | De tekst van een query of een beheeropdracht waarvan de resultaten worden gebruikt als gegevens om op te nemen. |
Notitie
Alleen .show
beheeropdrachten worden ondersteund.
Ondersteunde opname-eigenschappen
Eigenschap | Type | Description |
---|---|---|
creationTime |
string |
De datum/tijd-waarde, opgemaakt als een ISO8601 tekenreeks, die moet worden gebruikt bij het maken van de opgenomen gegevensbereiken. Indien niet opgegeven, now() wordt gebruikt. Wanneer dit is opgegeven, moet u ervoor zorgen dat de Lookback eigenschap in het effectieve samenvoegbeleid van de doeltabel is afgestemd op de opgegeven waarde. |
extend_schema |
bool |
Als true , kan de opdracht het schema van de tabel uitbreiden. De standaardinstelling is false . Deze optie is alleen van toepassing op .append opdrachten , .set-or-append en set-or-replace . Voor deze optie zijn ten minste tabelmachtigingen Beheer vereist. |
recreate_schema |
bool |
Als true , kan de opdracht het schema van de tabel opnieuw maken. De standaardinstelling is false . Deze optie is alleen van toepassing op de .set-or-replace opdracht. Deze optie heeft voorrang op de extend_schema eigenschap als beide zijn ingesteld. Voor deze optie zijn ten minste tabelmachtigingen Beheer vereist. |
folder |
string |
De map die aan de tabel moet worden toegewezen. Als de tabel al bestaat, overschrijft deze eigenschap de map van de tabel. |
ingestIfNotExists |
string |
Als dit is opgegeven, mislukt de opname als de tabel al gegevens bevat die zijn getagd met een ingest-by: tag met dezelfde waarde. Zie ingest-by: tags voor meer informatie. |
policy_ingestiontime |
bool |
Als true , wordt het opnametijdbeleid ingeschakeld voor de tabel. De standaardwaarde is true . |
tags |
string |
Een JSON-tekenreeks die een lijst met tags vertegenwoordigt die moeten worden gekoppeld aan het gemaakte bereik. |
docstring |
string |
Een beschrijving die wordt gebruikt om de tabel vast te leggen. |
distributed |
bool |
Als true , neemt de opdracht op van alle knooppunten die de query parallel uitvoeren. De standaardinstelling is false . Zie tips voor prestaties. |
persistDetails |
Een Booleaanse waarde die, indien opgegeven, aangeeft dat de opdracht de gedetailleerde resultaten moet behouden voor ophalen door de opdracht .show operation details . De standaardwaarde is false . |
with (persistDetails=true) |
Schemaoverwegingen
.set-or-replace
behoudt het schema, tenzij een vanextend_schema
ofrecreate_schema
de opname-eigenschappen is ingesteld optrue
..set-or-append
en.append
opdrachten behouden het schema, tenzij deextend_schema
opname-eigenschap is ingesteld optrue
.- Het aanpassen van het schema van de resultatenset aan dat van de doeltabel is gebaseerd op de kolomtypen. Kolomnamen komen niet overeen. Zorg ervoor dat de kolommen van het queryresultaatschema in dezelfde volgorde staan als de tabel, anders worden gegevens opgenomen in de verkeerde kolommen.
Waarschuwing
Als het schema wordt gewijzigd, gebeurt dit in een afzonderlijke transactie vóór de werkelijke gegevensopname. Dit betekent dat het schema kan worden gewijzigd, zelfs wanneer de gegevens niet kunnen worden opgenomen.
Tips voor prestaties
- Gegevensopname is een resource-intensieve bewerking die van invloed kan zijn op gelijktijdige activiteiten op het cluster, waaronder het uitvoeren van query's. Vermijd het uitvoeren van te veel opnameopdrachten tegelijk.
- Beperk de gegevens voor opname tot minder dan 1 GB per opnamebewerking. Gebruik indien nodig meerdere opnameopdrachten.
- Stel de
distributed
vlag in optrue
als de hoeveelheid gegevens die door de query wordt geproduceerd, groot is, groter is dan 1 GB en geen serialisatie vereist. Vervolgens kunnen meerdere knooppunten parallel uitvoer produceren. Gebruik deze vlag niet wanneer de queryresultaten klein zijn, omdat er onnodig veel kleine gegevensshards kunnen worden gegenereerd.
Tekenbeperking
De opdracht mislukt als de query een entiteitsnaam met het $
teken genereert. De entiteitsnamen moeten voldoen aan de naamgevingsregels, dus het $
teken moet worden verwijderd om de opdracht opnemen te laten slagen.
In de volgende query genereert de search
operator bijvoorbeeld een kolom $table
. Als u de queryresultaten wilt opslaan, gebruikt u projectnaam wijzigen om de naam van de kolom te wijzigen.
.set Texas <| search State has 'Texas' | project-rename tableName=$table
Voorbeelden
Maak een nieuwe tabel met de naam RecentErrors in de database die hetzelfde schema heeft als LogsTable en alle foutrecords van het afgelopen uur bevat.
.set RecentErrors <|
LogsTable
| where Level == "Error" and Timestamp > now() - time(1h)
Maak een nieuwe tabel met de naam 'OldExtents' in de database met één kolom, 'ExtentId', en bevat de gebieds-id's van alle gebieden in de database die meer dan 30 dagen eerder is gemaakt. De database heeft een bestaande tabel met de naam 'MyExtents'. Omdat de gegevensset naar verwachting groter is dan 1 GB (meer dan ~1 miljoen rijen), gebruikt u de gedistribueerde vlag
.set async OldExtents with(distributed=true) <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Voeg gegevens toe aan een bestaande tabel met de naam 'OldExtents' in de huidige database die één kolom, 'ExtentId', bevat en de gebieds-id's bevat van alle gebieden in de database die meer dan 30 dagen eerder zijn gemaakt.
Markeer het nieuwe gebied met tags tagA
en tagB
, op basis van een bestaande tabel met de naam 'MyExtents'.
.append OldExtents with(tags='["TagA","TagB"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Voeg gegevens toe aan de tabel 'OldExtents' in de huidige database of maak de tabel als deze nog niet bestaat. Tag het nieuwe gebied met ingest-by:myTag
. Doe dit alleen als de tabel nog geen gebied bevat met ingest-by:myTag
de tag , op basis van een bestaande tabel met de naam 'MyExtents'.
.set-or-append async OldExtents with(tags='["ingest-by:myTag"]', ingestIfNotExists='["myTag"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Vervang de gegevens in de tabel OldExtents in de huidige database of maak de tabel als deze nog niet bestaat. Tag het nieuwe gebied met ingest-by:myTag
.
.set-or-replace async OldExtents with(tags='["ingest-by:myTag"]', ingestIfNotExists='["myTag"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Voeg gegevens toe aan de tabel 'OldExtents' in de huidige database, terwijl u de gemaakte aanmaaktijd(en) instelt op een specifieke datum/tijd in het verleden.
.append async OldExtents with(creationTime='2017-02-13T11:09:36.7992775Z') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Uitvoer retourneren
Retourneert informatie over de gebieden die zijn gemaakt vanwege de .set
opdracht of .append
.
Voorbeelduitvoer
ExtentId | OriginalSize | Omvang | Gecomprimeerde grootte | IndexGrootte | RowCount |
---|---|---|---|---|---|
23a05ed6-376d-4119-b1fc-6493bcb05563 | 1291 | 5882 | 1568 | 4314 | 10 |
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub Issues geleidelijk uitfaseren als het feedbackmechanisme voor inhoud. Het wordt vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor