Comando .update table (pré-visualização)
O .update table
comando efetua atualizações de dados numa tabela especificada ao eliminar e acrescentar registos atomicamente.
Aviso
Este comando é irrecuperável.
Nota
Quando executa o .update table
comando numa tabela que é a origem de uma política de atualização, o comando aciona .update table
estas políticas de atualização para as quais a tabela que está a ser modificada é a origem da política de atualização.
Pode eliminar até 5 milhões de registos num único comando.
Permissões
Tem de ter, pelo menos, permissões de Administração tabela para executar este comando.
Syntax
Existem duas opções de sintaxe, Sintaxe simplificada e Sintaxe expandida.
Saiba mais sobre as convenções de sintaxe.
Sintaxe expandida
A sintaxe expandida oferece a flexibilidade para definir uma consulta para eliminar linhas e uma consulta diferente para acrescentar linhas:
.update
table
TableNamedelete
DeleteIdentifierappend
AppendIdentifier [with
(
propertyName=
propertyValue)
] <|
let
DeleteIdentifier=
EliminarPredicar;
let
AppendIdentifier=
AcrescentarPredicar;
Parâmetros para sintaxe expandida
Nome | Tipo | Necessário | Descrição |
---|---|---|---|
TableName | string |
✔️ | O nome da tabela a atualizar. |
DeleteIdentifier | string |
✔️ | O nome do identificador utilizado para especificar o predicado de eliminação aplicado à tabela atualizada. |
EliminarPredicar | string |
✔️ | O texto de uma consulta cujos resultados são utilizados como dados a eliminar. O predicado eliminar tem de incluir, pelo menos, um where operador e só pode utilizar os seguintes operadores: extend , where , project join e lookup . |
AppendIdentifier | string |
✔️ | O nome do identificador utilizado para especificar o predicado de acréscimo aplicado à tabela atualizada. |
AcrescentarPredicar | string |
✔️ | O texto de uma consulta cujos resultados são utilizados como dados a acrescentar. |
Importante
- Tanto os predicados de eliminação como de acréscimo não podem utilizar entidades remotas, entre bds e entidades entre clusters. Os predicados não podem referenciar uma tabela externa nem utilizar o
externaldata
operador . - Espera-se que as consultas de acréscimo e eliminação produzam resultados deterministas. As consultas não administrativas podem originar resultados inesperados. Uma consulta é determinista se e apenas se devolver os mesmos dados se forem executados várias vezes.
- Por exemplo, a utilização de
take
operador,sample
operador,rand
função e outros operadores deste tipo não é recomendada porque estes operadores não são deterministas.
- Por exemplo, a utilização de
- As consultas podem ser executadas mais do que uma vez na
update
execução. Se os resultados da consulta intermédia forem inconsistentes, o comando update pode produzir resultados inesperados.
Sintaxe simplificada
A sintaxe simplificada requer uma consulta de acréscimo, bem como uma chave. A chave é uma coluna na tabela que representa valores exclusivos na tabela. Esta coluna é utilizada para definir que linhas devem ser eliminadas da tabela. É efetuada uma associação entre a tabela original e a consulta de acréscimo, para identificar linhas que concordam com o respetivo valor em relação a esta coluna.
.update
table
TableName on IDColumnName [with
(
propertyName=
propertyValue)
] <|
appendQuery
Parâmetros para sintaxe simplificada
Nome | Tipo | Necessário | Descrição |
---|---|---|---|
TableName | string |
✔️ | O nome da tabela a atualizar. |
IDColumnName | string |
✔️ | O nome da coluna que identifica as linhas. A coluna tem de estar presente na tabela e em appendQuery. |
appendQuery | string |
✔️ | O texto de uma consulta ou de um comando de gestão cujos resultados são utilizados como dados para acrescentar. O esquema da consulta tem de ser o mesmo que o esquema da tabela. |
Importante
- A consulta de acréscimo não pode utilizar entidades remotas, entidades entre bds e entre clusters, referenciar uma tabela externa ou utilizar o
externaldata
operador . - Espera-se que a consulta de acréscimo produza resultados deterministas. As consultas não administrativas podem originar resultados inesperados. Uma consulta é determinista se e apenas se devolver os mesmos dados se forem executados várias vezes.
- Por exemplo, a utilização de
take
operador,sample
operador,rand
função e outros operadores deste tipo não é recomendada porque estes operadores não são deterministas.
- Por exemplo, a utilização de
- As consultas podem ser executadas mais do que uma vez na
update
execução. Se os resultados da consulta intermédia forem inconsistentes, o comando update pode produzir resultados inesperados.
Propriedades suportadas
Nome | Tipo | Description |
---|---|---|
whatif | bool | Se true , devolve o número de registos que serão acrescentados/eliminados em cada partição horizontal, sem acrescentar/eliminar quaisquer registos. A predefinição é false . |
Importante
Recomendamos que execute primeiro o whatif
modo antes de executar a atualização para validar os predicados antes de eliminar ou acrescentar dados.
Devoluções
O resultado do comando é uma tabela em que cada registo representa uma extensão que foi criada com novos dados ou que teve registos eliminados.
Nome | Tipo | Description |
---|---|---|
Tabela | string |
A tabela na qual a extensão foi criada ou eliminada. |
Ação | string |
Criar ou Eliminar consoante a ação executada na extensão. |
ExtentId | guid |
O identificador exclusivo da extensão que foi criada ou eliminada pelo comando . |
Contagem de Linhas | long |
O número de linhas criadas ou eliminadas na extensão especificada pelo comando . |
Escolher entre .update table
vistas materializadas e
Existem cenários em que pode utilizar o .update table
comando ou uma vista materializada para alcançar o mesmo objetivo numa tabela. Por exemplo, uma vista materializada pode ser utilizada para manter a versão mais recente de cada registo ou uma atualização pode ser utilizada para atualizar registos quando uma nova versão está disponível.
Utilize as seguintes diretrizes para decidir qual o método a utilizar:
- Se o padrão de atualização não for suportado por vistas materializadas, utilize o comando update.
- Se a tabela de origem tiver um volume de ingestão elevado, mas apenas algumas atualizações, a utilização do comando update pode ser mais eficaz e consumir menos cache ou armazenamento do que as vistas materializadas. Isto acontece porque as vistas materializadas precisam de voltar a processar todos os dados ingeridos, o que é menos eficiente do que identificar os registos individuais a atualizar com base nos predicados de acréscimo ou eliminação.
- As vistas materializadas são uma solução totalmente gerida. A vista materializada é definida uma vez e a materialização ocorre em segundo plano pelo sistema. O comando de atualização requer um processo orquestrado (por exemplo, Azure Data Factory, Logic Apps, Power Automate e outros) que executa explicitamente o comando de atualização sempre que existirem atualizações. Se as vistas materializadas funcionarem bem o suficiente para o seu caso de utilização, a utilização de vistas materializadas requer menos gestão e manutenção.
Exemplos - Sintaxe simplificada
Os exemplos seguintes utilizam a sintaxe Simplificada.
Exemplo geral
É criada a seguinte tabela.
.set-or-replace People <|
datatable(Name:string, Address:string)[
"Alice", "221B Baker street",
"Bob", "1600 Pennsylvania Avenue",
"Carl", "11 Wall Street New York"
]
Name | Endereço |
---|---|
Alice | Rua Baker 221B |
Bob | Avenida Pensilvânia, 1600 |
Carl | 11 Wall Street Nova Iorque |
Em seguida, é executado o seguinte comando de atualização:
.update table People on Name <|
datatable(Name:string, Address:string)[
"Alice", "2 Macquarie Street",
"Diana", "350 Fifth Avenue" ]
Em que appendQuery produz o seguinte conjunto de resultados:
Name | Endereço |
---|---|
Alice | Rua Macquarie 2 |
Diana | 350 Quinta Avenida |
Uma vez que atualizámos naName
coluna, a linha Alice será eliminada e a tabela após a atualização terá o seguinte aspeto:
Name | Endereço |
---|---|
Alice | Rua Macquarie 2 |
Bob | Avenida Pensilvânia, 1600 |
Carl | 11 Wall Street Nova Iorque |
Diana | 350 Quinta Avenida |
Repare que Diana não foi encontrada na tabela original. Isto é válido e não foi eliminada nenhuma linha correspondente.
Da mesma forma, se houvesse várias linhas com o nome Alice na tabela original, todas elas teriam sido eliminadas e substituídas pela única linha Alice que temos no final.
Tabela de exemplo
Os exemplos seguintes baseiam-se na seguinte tabela:
.set-or-replace Employees <|
range i from 1 to 100 step 1
| project Id=i
| extend Code = tostring(dynamic(["Customer", "Employee"])[Id %2])
| extend Color = tostring(dynamic(["Red", "Blue", "Gray"])[Id %3])
Este comando cria uma tabela com 100 registos a começar com:
ID | Código | Cor |
---|---|---|
1 | Funcionário | Blue |
2 | Cliente | Cinzento |
3 | Funcionário | Red |
4 | Cliente | Blue |
5 | Funcionário | Cinzento |
6 | Cliente | Red |
6 | Funcionário | Blue |
Atualizar uma única coluna numa linha
O exemplo seguinte utiliza a sintaxe simplificada para atualizar uma única coluna numa única linha que corresponda ao predicado de acréscimo:
.update table Employees on Id with(whatif=true) <|
Employees
| where Id==3
| extend Color="Orange"
Repare que whatif
está definido como verdadeiro. Após esta consulta, a tabela permanece inalterada, mas o comando devolve que haveria uma extensão com uma linha eliminada e uma nova extensão com uma linha.
O comando seguinte executa a atualização:
.update table Employees on Id <|
Employees
| where Id==3
| extend Color="Orange"
Atualizar uma única coluna em várias linhas
O exemplo seguinte é atualizado numa única coluna Color
para o valor de Verde nas linhas que correspondem ao predicado de acréscimo.
.update table Employees on Id <|
Employees
| where Code=="Employee"
| where Color=="Blue"
| extend Color="Green"
Atualizar várias colunas em várias linhas
O exemplo seguinte atualiza múltiplas colunas em todas as linhas que correspondem ao predicado de acréscimo.
.update table Employees on Id <|
Employees
| where Color=="Gray"
| extend Code=strcat("ex-", Code)
| extend Color=""
Atualizar linhas com outra tabela
Neste exemplo, o primeiro passo é criar a seguinte tabela de mapeamento:
.set-or-replace ColorMapping <|
datatable(OldColor:string, NewColor:string)[
"Red", "Pink",
"Blue", "Purple",
"Gray", "LightGray",
"Orange", "Yellow",
"Green", "AppleGreen"
]
Em seguida, esta tabela de mapeamento é utilizada para atualizar algumas cores na tabela original com base no predicado de acréscimo e na "Nova Cor" correspondente:
.update table Employees on Id <|
Employees
| where Code=="Customer"
| lookup ColorMapping on $left.Color==$right.OldColor
| project Id, Code, Color=NewColor
Atualizar linhas com uma tabela de teste
Um padrão popular é primeiro obter dados numa tabela de teste antes de atualizar a tabela principal.
O primeiro comando cria uma tabela de teste:
.set-or-replace MyStagingTable <|
range i from 70 to 130 step 5
| project Id=i
| extend Code = tostring(dynamic(["Customer", "Employee"])[Id %2])
| extend Color = tostring(dynamic(["Red", "Blue", "Gray"])[Id %3])
O comando seguinte atualiza a tabela principal com os dados na tabela de teste:
.update table Employees on Id <|
MyStagingTable
Alguns registos na tabela de teste não existiam na tabela principal (ou seja, tinham Id>100
) mas ainda estavam inseridos na tabela principal (comportamento de upsert).
Exemplos - Sintaxe expandida
Os exemplos seguintes utilizam a sintaxe Expandida.
Chave composta
A sintaxe simplificada pressupõe que uma única coluna pode corresponder as linhas no appendQuery para inferir linhas a eliminar. Pode utilizar mais do que uma coluna, por exemplo, com chaves compostas.
O primeiro comando cria uma tabela com chaves compostas:
.set-or-replace VersionedArticle <|
datatable(ArticleId:string, Version:int, Detail:string)[
"A", 1, "Early version",
"B", 1, "News about mobiles",
"C", 1, "Opinion article",
"B", 2, "Revision about brand X",
"B", 3, "Revision about brand Y",
"C", 2, "Fact check"
]
O comando seguinte atualiza um registo específico com a sintaxe expandida:
.update table VersionedArticle delete D append A <|
let D = VersionedArticle
| where ArticleId=="B"
| where Version==3;
let A = VersionedArticle
| where ArticleId=="B"
| where Version==3
| extend Detail = "Revision about brand Z";
Controlo completo
No exemplo seguinte, todas as linhas com Code
Funcionário são eliminadas e as linhas com Code
FuncionárioeColor
roxo são acrescentadas. São eliminadas mais linhas do que as inseridas.
.update table Employees delete D append A <|
let D = Employees
| where Code=="Employee";
let A = Employees
| where Code=="Employee"
| where Color=="Purple"
| extend Code="Corporate"
| extend Color="Mauve";
Este tipo de ação só é possível com a sintaxe expandida, que controla de forma independente as operações de eliminação e acréscimo.
Conteúdo relacionado
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários