Ingestão de consulta (.set, .append, .set-or-append, .set-or-replace)
Esses comandos executam uma consulta ou um comando de gerenciamento e ingerem os resultados da consulta em uma tabela. A diferença entre esses comandos é como eles tratam tabelas e dados existentes ou inexistentes.
Comando | Se a tabela existir | Se a tabela não existir |
---|---|---|
.set |
O comando falha | A tabela é criada e os dados são ingeridos |
.append |
Os dados são acrescentados à tabela | O comando falha |
.set-or-append |
Os dados são acrescentados à tabela | A tabela é criada e os dados são ingeridos |
.set-or-replace |
Os dados substituem os dados da tabela | A tabela é criada e os dados são ingeridos |
Para cancelar uma ingestão do comando de consulta, consulte cancel operation
.
Observação
Esse método de ingestão destina-se à exploração e à criação de protótipos. Não o use em cenários de produção ou de alto volume.
Permissões
Para executar ações diferentes em uma tabela, permissões específicas são necessárias:
- Para adicionar linhas a uma tabela existente usando o
.append
comando , você precisa de um mínimo de permissões de Ingestor de Tabela. - Para criar uma nova tabela usando os vários
.set
comandos, você precisa de um mínimo de permissões de Usuário do Banco de Dados. - Para substituir linhas em uma tabela existente usando o
.set-or-replace
comando , você precisa de um mínimo de permissões de Administração de Tabela.
Para obter mais informações sobre permissões, consulte Controle de acesso baseado em função do Kusto.
Syntax
(.set
.append
.set-or-append
| | | .set-or-replace
) [async
] tableName [with
(
propertyName=
propertyValue [,
...]] <|
)
queryOrCommand
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Tipo | Obrigatório | Descrição |
---|---|---|---|
async | string |
Se especificado, o comando retornará e continuará a ingestão em segundo plano. Use o retornado OperationId com o .show operations comando para recuperar a conclusão da ingestão status e os resultados. |
|
tableName | string |
✔️ | O nome da tabela na qual ingerir dados. O tableName está sempre relacionado ao banco de dados no contexto. |
propertyName, propertyValue | string |
Uma ou mais propriedades de ingestão com suporte usadas para controlar o processo de ingestão. | |
queryOrCommand | string |
✔️ | O texto de uma consulta ou um comando de gerenciamento cujos resultados são usados como dados para ingerir. |
Observação
Há suporte apenas .show
para comandos de gerenciamento.
Propriedades de ingestão compatíveis
Propriedade | Tipo | Descrição |
---|---|---|
creationTime |
string |
O valor de datetime, formatado como uma cadeia de caracteres ISO8601, a ser usado na hora de criação das extensões dos dados ingeridos. Se não for especificado, now() será usado. Quando especificado, verifique se a propriedade Lookback na Política de mesclagem de extensões efetivas da tabela de destino está alinhada com o valor especificado. |
extend_schema |
bool |
Se true , o comando poderá estender o esquema da tabela. O padrão é false . Essa opção se aplica somente aos comandos .append , .set-or-append e set-or-replace . Essa opção requer pelo menos permissões de Administração de Tabela. |
recreate_schema |
bool |
Se true , o comando poderá recriar o esquema da tabela. O padrão é false . Essa opção se aplica somente ao comando .set-or-replace . Essa opção terá precedência sobre a extend_schema propriedade se ambas estiverem definidas. Essa opção requer pelo menos permissões de Administração de Tabela. |
folder |
string |
A pasta a ser atribuída à tabela. Se a tabela já existir, essa propriedade substituirá a pasta da tabela. |
ingestIfNotExists |
string |
Se especificado, a ingestão falhará se a tabela já tiver dados marcados com uma ingest-by: marca com o mesmo valor. Para obter mais informações, veja ingest-by: tags. |
policy_ingestiontime |
bool |
Se true , a Política de Tempo de Ingestão será habilitada na tabela. O padrão é true . |
tags |
string |
Uma cadeia de caracteres JSON que representa uma lista de marcas a serem associadas à extensão criada. |
docstring |
string |
Uma descrição usada para documentar a tabela. |
distributed |
bool |
Se true , o comando ingerirá de todos os nós executando a consulta em paralelo. O padrão é false . Confira dicas de desempenho. |
persistDetails |
Um valor booliano que, se especificado, indica que o comando deve persistir os resultados detalhados para recuperação pelo comando .show operation details . Assume o padrão de false . |
with (persistDetails=true) |
Considerações sobre esquema
.set-or-replace
preserva o esquema, a menos que uma das propriedades deextend_schema
ingestão ourecreate_schema
seja definidatrue
como ..set-or-append
Os comandos e.append
preservam o esquema, a menos que aextend_schema
propriedade de ingestão esteja definida comotrue
.- A correspondência do esquema do conjunto de resultados com o da tabela de destino baseia-se nos tipos de coluna. Não há correspondência de nomes de coluna. Verifique se as colunas de esquema de resultado da consulta estão na mesma ordem que a tabela, caso contrário, os dados serão ingeridos nas colunas erradas.
Cuidado
Se o esquema for modificado, ele ocorrerá em uma transação separada antes da ingestão de dados real. Isso significa que o esquema pode ser modificado mesmo quando há uma falha ao ingerir os dados.
Dicas de desempenho
- A ingestão de dados é uma operação que faz uso intensivo de recursos, podendo afetar atividades simultâneas no cluster, incluindo a execução de consultas. Evite executar muitos comandos de ingestão ao mesmo tempo.
- Limite os dados para ingestão a menos de 1 GB por operação de ingestão. Se necessário, use vários comandos de ingestão.
- Defina o
distributed
sinalizadortrue
como se a quantidade de dados que estão sendo produzidos pela consulta for grande, exceder 1 GB e não exigir serialização. Em seguida, vários nós podem produzir saída em paralelo. Não use esse sinalizador quando os resultados da consulta forem pequenos, pois ele pode gerar desnecessariamente muitos fragmentos de dados pequenos.
Limitação de caractere
O comando falhará se a consulta gerar um nome de entidade com o $
caractere . Os nomes de entidade devem estar em conformidade com as regras de nomenclatura, portanto, o $
caractere deve ser removido para que o comando de ingestão tenha êxito.
Por exemplo, na consulta a seguir, o search
operador gera uma coluna $table
. Para armazenar os resultados da consulta, use project-rename para renomear a coluna.
.set Texas <| search State has 'Texas' | project-rename tableName=$table
Exemplos
Crie uma tabela chamada RecentErrors no banco de dados que tenha o mesmo esquema que LogsTable e que contenha todos os registros de erro da última hora.
.set RecentErrors <|
LogsTable
| where Level == "Error" and Timestamp > now() - time(1h)
Crie uma tabela chamada "OldExtents" no banco de dados, que tenha uma única coluna, "ExtentId", e que contenha as IDs de extensão de todas as extensões no banco de dados que foram criadas há mais de 30 dias. O banco de dados tem uma tabela existente chamada "MyExtents". Como o conjunto de dados deve ser maior que 1 GB (mais de aproximadamente 1 milhão de linhas), use o sinalizador distribuído
.set async OldExtents with(distributed=true) <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Acrescente dados a uma tabela existente chamada "OldExtents" no banco de dados atual, que tenha uma única coluna, "ExtentId", e que contenha as IDs de extensão de todas as extensões no banco de dados que foram criadas há mais de 30 dias.
Marque a nova extensão com as marcas tagA
e tagB
, com base em uma tabela existente denominada "MyExtents".
.append OldExtents with(tags='["TagA","TagB"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Acrescente dados à tabela "OldExtents" no banco de dados atual ou crie a tabela se ela ainda não existir. Marque a nova extensão com ingest-by:myTag
. Faça isso somente se a tabela ainda não contiver uma extensão marcada com ingest-by:myTag
, com base em uma tabela existente chamada "MyExtents".
.set-or-append async OldExtents with(tags='["ingest-by:myTag"]', ingestIfNotExists='["myTag"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Substitua os dados da tabela "OldExtents" no banco de dados atual ou crie a tabela se ela ainda não existir. Marque a nova extensão com ingest-by:myTag
.
.set-or-replace async OldExtents with(tags='["ingest-by:myTag"]', ingestIfNotExists='["myTag"]') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Acrescente dados à tabela "OldExtents" no banco de dados atual, definindo a hora de criação de extensões criadas com um datetime específico no passado.
.append async OldExtents with(creationTime='2017-02-13T11:09:36.7992775Z') <|
MyExtents
| where CreatedOn < now() - time(30d)
| project ExtentId
Saída de retorno
Retorna informações sobre as extensões criadas pelo comando .set
ou .append
.
Saída de exemplo
ExtentId | OriginalSize | ExtentSize | CompressedSize | IndexSize | RowCount |
---|---|---|---|---|---|
23a05ed6-376d-4119-b1fc-6493bcb05563 | 1291 | 5882 | 1568 | 4314 | 10 |
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de