.create materialized-view
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati
Una vista materializzata è una query di aggregazione su una tabella di origine. Rappresenta una singola istruzione summarize
.
Esistono due modi possibili per creare una vista materializzata, come indicato dall'opzione backfill nel comando :
Creare la vista materializzata da ora in poi:
- La vista materializzata viene creata vuota. Include solo i record inseriti dopo la creazione della visualizzazione. La creazione di questo tipo restituisce immediatamente e la vista è immediatamente disponibile per la query.
Creare la vista materializzata in base ai record esistenti nella tabella di origine:
- Vedere Riempimento di una vista materializzata.
- Il completamento della creazione potrebbe richiedere molto tempo, a seconda del numero di record nella tabella di origine. La vista non sarà disponibile per le query fino al completamento del riempimento.
- Quando si usa questa opzione, il comando create deve essere
async
. È possibile monitorare l'esecuzione usando il.show operations
comando . - È possibile annullare il processo di backfill usando il
.cancel operation
comando .
Importante
Nelle tabelle di origine di grandi dimensioni, l'opzione backfill potrebbe richiedere molto tempo. Se questo processo ha esito negativo temporaneamente durante l'esecuzione, non verrà ritentato automaticamente. È quindi necessario eseguire di nuovo il comando create. Per altre informazioni, vedere Backfill a materialized view.For more information, see Backfill a materialized view.
Autorizzazioni
Questo comando richiede autorizzazioni di amministratore del database. L'autore della visualizzazione materializzata diventa l'amministratore di esso.
Sintassi
.create
[async
] [ifnotexists
] materialized-view
[ with
(
PropertyName =
PropertyValue,
...)
] Query MaterializedViewName SourceTableName {
on table
}
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Digita | Obbligatorio | Descrizione |
---|---|---|---|
PropertyName, PropertyValue | string |
Elenco di proprietà sotto forma di coppie nome e valore, dall'elenco delle proprietà supportate. | |
MaterializedViewName | string |
✔️ | Nome della vista materializzata. Il nome della vista non può essere in conflitto con i nomi di tabella o di funzione nello stesso database e deve rispettare le regole di denominazione degli identificatori. |
SourceTableName | string |
✔️ | Nome della tabella di origine in cui è definita la vista. |
Query | string |
✔️ | Definizione di query della vista materializzata. Per altre informazioni e limitazioni, vedere la sezione Parametri di query. |
Nota
Se la vista materializzata esiste già:
- Se viene specificato il
ifnotexists
flag, il comando viene ignorato. Non viene applicata alcuna modifica, anche se la nuova definizione non corrisponde alla definizione esistente. - Se il
ifnotexists
flag non è specificato, viene restituito un errore. - Per modificare una vista materializzata esistente, usare il comando .alter materialized-view .
Proprietà supportate
Nella clausola PropertyName =
PropertyValue)
sono supportate le with
(
proprietà seguenti. Tutte le proprietà sono facoltative.
Nome | Tipo | Descrizione |
---|---|---|
Recupero | bool |
Se creare la vista in base a tutti i record attualmente in SourceTable (true ) o a crearla da ora in poi (false ). Il valore predefinito è false . Per altre informazioni, vedere Backfill a materialized view.For more information, see Backfill a materialized view. |
effectiveDateTime | datetime |
Rilevante solo quando si usa backfill . Se è impostata, la creazione esegue il backfill solo con i record inseriti dopo datetime. backfill deve anche essere impostato su true . Questa proprietà prevede un valore letterale datetime; ad esempio . effectiveDateTime=datetime(2019-05-01) |
updateExtentsCreationTime | bool |
Rilevante solo quando si usa backfill . Se è impostato su true , l'ora di creazione extent viene assegnata in base alla chiave datetime group-by durante il processo di backfill. Per altre informazioni, vedere Backfill a materialized view.For more information, see Backfill a materialized view. |
lookback | timespan |
Valido solo per arg_max //arg_min take_any le viste materializzate. Limita il periodo di tempo in cui sono previsti duplicati. Ad esempio, se viene specificato un lookback di 6 ore in una arg_max vista, la deduplicazione tra i record appena inseriti e quelli esistenti prenderà in considerazione solo i record inseriti fino a 6 ore fa. Il lookback è relativo a ingestion_time(). Se la query di visualizzazione materializzata non mantiene il ingestion_time() valore, il lookback non può essere definito nella vista. Vedere limitazioni delle viste materializzate e problemi noti. La definizione del periodo di lookback in modo errato potrebbe causare duplicati nella vista materializzata. Ad esempio, se un record per una chiave specifica viene inserito 10 ore dopo l'inserimento di un record per la stessa chiave e il lookback è impostato su 6 ore, tale chiave sarà duplicata nella visualizzazione. Il periodo di ricerca viene applicato sia durante il tempo di materializzazione che il tempo di query. |
autoUpdateSchema | bool |
Indica se aggiornare automaticamente la vista in base alle modifiche apportate alla tabella di origine. Il valore predefinito è false . Questa opzione è valida solo per le viste di tipo arg_max(Timestamp, *) //arg_min(Timestamp, *) take_any(*) (solo quando l'argomento della colonna è ).* Se questa opzione è impostata su true , le modifiche apportate alla tabella di origine verranno riflesse automaticamente nella vista materializzata. |
dimensionTables | array | Argomento dinamico che include una matrice di tabelle delle dimensioni nella vista. Vedere Parametro di query. |
cartella | string |
Cartella della vista materializzata. |
docString | string |
Stringa che documenta la vista materializzata. |
allowMaterializedViewsWithoutRowLevelSecurity | bool |
Consente di creare una vista materializzata su una tabella con i criteri di sicurezza a livello di riga abilitati. |
Avviso
- Il sistema disabiliterà automaticamente una vista materializzata se le modifiche apportate alla tabella di origine della vista materializzata o le modifiche apportate ai dati comportano l'incompatibilità tra la query di vista materializzata e lo schema previsto della vista materializzata.
- Per evitare questo errore, la query della vista materializzata deve essere deterministica. Ad esempio, il plug-in bag_unpack o pivot genera uno schema non deterministico.
- Quando si usa un'aggregazione
arg_max(Timestamp, *)
e quandoautoUpdateSchema
è false, anche le modifiche apportate alla tabella di origine possono causare mancate corrispondenze dello schema. Evitare questo errore definendo la query di visualizzazione comearg_max(Timestamp, Column1, Column2, ...)
o usando l'opzioneautoUpdateSchema
. - L'uso
autoUpdateSchema
di potrebbe causare una perdita irreversibile di dati quando vengono eliminate colonne nella tabella di origine. - Monitorare la disabilitazione automatica delle viste materializzate usando la metrica MaterializedViewResult.
- Dopo aver risolto i problemi di incompatibilità, è consigliabile riabilitare in modo esplicito la visualizzazione usando il comando abilita visualizzazione materializzata.
Creare una vista materializzata sulla vista materializzata
È possibile creare una vista materializzata su un'altra vista materializzata solo quando la vista materializzata di origine è un'aggregazione take_any(*)
(deduplicazione). Per altre informazioni, vedere Visualizzazione materializzata su vista materializzata ed esempi.
Sintassi:
.create
[async
] [ifnotexists
] materialized-view
[ with
(
PropertyName =
PropertyValue,
...)
] MaterializedViewName SourceMaterializedViewName {
Query on materialized-view
}
Parametri:
Nome | Digita | Obbligatorio | Descrizione |
---|---|---|---|
PropertyName, PropertyValue | string |
Elenco di proprietà sotto forma di coppie nome e valore, dall'elenco delle proprietà supportate. | |
MaterializedViewName | string |
✔️ | Nome della vista materializzata. Il nome della vista non può essere in conflitto con i nomi di tabella o di funzione nello stesso database e deve rispettare le regole di denominazione degli identificatori. |
SourceMaterializedViewName | string |
✔️ | Nome della vista materializzata di origine in cui è definita la vista. |
Query | string |
✔️ | Definizione di query della vista materializzata. |
Esempi
Creare una visualizzazione vuota
arg_max
che materializzerà solo i record inseriti da ora in poi:.create materialized-view ArgMax on table T { T | summarize arg_max(Timestamp, *) by User }
Creare una vista materializzata per le aggregazioni giornaliere con l'opzione backfill usando
async
:.create async materialized-view with (backfill=true, docString="Customer telemetry") CustomerUsage on table T { T | extend Day = bin(Timestamp, 1d) | summarize count(), dcount(User), max(Duration) by Customer, Day }
Creare una vista materializzata con
backfill
eeffectiveDateTime
. La vista viene creata in base ai record solo datetime..create async materialized-view with (backfill=true, effectiveDateTime=datetime(2019-01-01)) CustomerUsage on table T { T | extend Day = bin(Timestamp, 1d) | summarize count(), dcount(User), max(Duration) by Customer, Day }
Creare una vista materializzata che deduplica la tabella di origine, in base alla
EventId
colonna, usando un lookback di 6 ore. I record verranno deduplicati in base solo ai record inseriti 6 ore prima dei record correnti..create materialized-view with(lookback=6h) DeduplicatedTable on table T { T | summarize take_any(*) by EventId }
Creare una vista materializzata di downcampionamento basata sulla vista materializzata precedente
DeduplicatedTable
:.create materialized-view DailyUsage on materialized-view DeduplicatedTable { DeduplicatedTable | summarize count(), dcount(User) by Day=bin(Timestamp, 1d) }
La definizione può includere operatori aggiuntivi prima dell'istruzione
summarize
, purchésummarize
sia l'ultima:.create materialized-view CustomerUsage on table T { T | where Customer in ("Customer1", "Customer2", "CustomerN") | parse Url with "https://contoso.com/" Api "/" * | extend Month = startofmonth(Timestamp) | summarize count(), dcount(User), max(Duration) by Customer, Api, Month }
Ecco le viste materializzate che si uniscono a una tabella delle dimensioni:
.create materialized-view with (dimensionTables = dynamic(["DimUsers"])) EnrichedArgMax on table T { T | lookup DimUsers on User | summarize arg_max(Timestamp, *) by User } .create materialized-view with (dimensionTables = dynamic(["DimUsers"])) EnrichedArgMax on table T { DimUsers | project User, Age, Address | join kind=rightouter hint.strategy=broadcast T on User | summarize arg_max(Timestamp, *) by User }
Osservazioni:
Query parameter (Parametro di query)
Le regole seguenti limitano la query usata nel parametro Query della vista materializzata:
La query deve fare riferimento a una singola tabella dei fatti che rappresenta l'origine della vista materializzata. Deve includere un singolo
summarize
operatore e una o più funzioni di aggregazione aggregate aggregate da uno o più gruppi per espressioni. L'operatoresummarize
deve essere sempre l'ultimo operatore nella query.Una vista materializzata che include solo una singola
arg_max
arg_min
take_any
//aggregazione potrebbe offrire prestazioni migliori rispetto a una vista materializzata che include queste aggregazioni insieme ad altre aggregazioni , ad esempio .count
/dcount
/avg
Ciò è dovuto al fatto che alcune ottimizzazioni sono rilevanti solo per questi tipi di viste materializzate. Non si applicano quando la vista include funzioni di aggregazione miste (in cui le aggregazioni miste sono entrambe etake_any
arg_max
/arg_min
/altre nella stessa visualizzazione).La query non deve includere operatori che dipendono da
now()
. Ad esempio, la query non deve averewhere Timestamp > ago(5d)
. Usare i criteri di conservazione nella vista materializzata per limitare il periodo di tempo a cui si riferisce la visualizzazione.Gli operatori seguenti non sono supportati nella query di visualizzazione materializzata:
sort
,top-nested
top
,partition
.serialize
Le aggregazioni composite non sono supportate nella definizione della vista materializzata. Ad esempio, invece di usare
SourceTableName | summarize Result=sum(Column1)/sum(Column2) by Id
, definire la vista materializzata come :SourceTableName | summarize a=sum(Column1), b=sum(Column2) by Id
. Durante il tempo di query di visualizzazione, eseguireMaterializedViewName | project Id, Result=a/b
. L'output richiesto della vista, inclusa la colonna calcolata (a/b
), può essere incapsulato in una funzione archiviata. Accedere alla funzione archiviata anziché accedere direttamente alla vista materializzata.
- Le query tra cluster e tra database non sono supportate.
- Le query cross-eventhouse e tra database non sono supportate.
I riferimenti a external_table() e externaldata non sono supportati.
La query di visualizzazione materializzata non può includere callout che richiedono la rappresentazione. In particolare, tutti i plug-in di connettività delle query che usano la rappresentazione non sono consentiti.
Oltre alla tabella di origine della vista, la query può fare riferimento a una o più tabelle delle dimensioni. Le tabelle delle dimensioni devono essere evidenziate in modo esplicito nelle proprietà della vista. È importante comprendere il comportamento seguente quando si esegue il join con le tabelle delle dimensioni:
I record nella tabella di origine della vista (tabella dei fatti) vengono materializzati una sola volta. Gli aggiornamenti alle tabelle delle dimensioni non hanno alcun impatto sui record che sono già stati elaborati dalla tabella dei fatti.
Una latenza di inserimento diversa tra la tabella dei fatti e la tabella delle dimensioni potrebbe influire sui risultati della visualizzazione.
Esempio: una definizione di vista include un inner join con una tabella delle dimensioni. Al momento della materializzazione, il record della dimensione non è stato completamente inserito, ma è già stato inserito nella tabella dei fatti. Questo record verrà eliminato dalla visualizzazione e non verrà mai elaborato di nuovo.
Analogamente, se il join è un outer join, il record della tabella dei fatti verrà elaborato e aggiunto per visualizzare con un valore Null per le colonne della tabella delle dimensioni. I record che sono già stati aggiunti (con valori Null) alla vista non verranno elaborati di nuovo. I relativi valori, nelle colonne della tabella delle dimensioni, rimarranno Null.
Funzioni di aggregazione supportate
Sono supportate le funzioni di aggregazione seguenti:
count
countif
dcount
dcountif
min
max
avg
avgif
sum
sumif
arg_max
arg_min
take_any
take_anyif
hll
make_set
make_list
make_bag
percentile
,percentiles
tdigest
Suggerimenti per incrementare le prestazioni
Usare una chiave di raggruppamento datetime: le viste materializzate con una colonna datetime come una delle chiavi group-by sono più efficienti di quelle che non lo fanno. Il motivo è che alcune ottimizzazioni possono essere applicate solo quando è presente una chiave datetime group-by. Se l'aggiunta di una chiave datetime group-by non modifica la semantica dell'aggregazione, è consigliabile aggiungerla. Questa operazione può essere eseguita solo se la colonna datetime non è modificabile per ogni entità univoca.
Ad esempio, nell'aggregazione seguente:
SourceTable | summarize take_any(*) by EventId
Se
EventId
ha sempre lo stessoTimestamp
valore e quindi l'aggiuntaTimestamp
non modifica la semantica dell'aggregazione, è preferibile definire la visualizzazione come:SourceTable | summarize take_any(*) by EventId, Timestamp
Suggerimento
I dati in arrivo in ritardo in una chiave datetime group-by possono avere un impatto negativo sulle prestazioni della vista materializzata. Si supponga, ad esempio, che una vista materializzata usi
bin(Timestamp, 1d)
come una delle relative chiavi group-by e che i record appena inseriti nella tabella di origine abbiano valori precedentiTimestamp
. Questi record potrebbero influire negativamente sulla vista materializzata.Se si prevede che i record in arrivo in ritardo vengano inseriti nella tabella di origine, modificare i criteri di memorizzazione nella cache della vista materializzata di conseguenza. Ad esempio, se i record con timestamp di sei mesi fa devono essere inseriti nella tabella di origine, il processo di materializzazione dovrà analizzare la vista materializzata per i sei mesi precedenti. Se questo periodo si trova nella cache a freddo, la materializzazione riscontrerà errori nella cache che avranno un impatto negativo sulle prestazioni della visualizzazione.
Se tali record in arrivo in ritardo non sono previsti, è consigliabile filtrare questi record nella query di visualizzazione materializzata o normalizzare i relativi valori di timestamp in base all'ora corrente.
Definire un periodo di lookback: se applicabile allo scenario, l'aggiunta di una
lookback
proprietà può migliorare significativamente le prestazioni delle query. Per informazioni dettagliate, vedere Proprietà supportate.Aggiungere colonne usate di frequente per filtrare come chiavi di raggruppamento: le query di visualizzazione materializzate vengono ottimizzate quando vengono filtrate in base a una delle chiavi raggruppate della vista materializzata. Se si sa che il modello di query spesso filtra in base a una colonna non modificabile in base a un'entità univoca nella vista materializzata, includerla nelle chiavi group-by della vista materializzata.
Ad esempio, una vista materializzata espone
arg_max
in base a unResourceId
valore che spesso verrà filtrato in baseSubscriptionId
a . Supponendo che unResourceId
valore appartenga sempre allo stessoSubscriptionId
valore, definire la query di visualizzazione materializzata come:.create materialized-view ArgMaxResourceId on table FactResources { FactResources | summarize arg_max(Timestamp, *) by SubscriptionId, ResourceId }
La definizione precedente è preferibile rispetto a quanto segue:
.create materialized-view ArgMaxResourceId on table FactResources { FactResources | summarize arg_max(Timestamp, *) by ResourceId }
Usare i criteri di aggiornamento, se appropriato: la vista materializzata può includere trasformazioni, normalizzazione e ricerche nelle tabelle delle dimensioni. È tuttavia consigliabile spostare queste operazioni in un criterio di aggiornamento. Lasciare solo l'aggregazione per la vista materializzata.
Ad esempio, è preferibile definire i criteri di aggiornamento seguenti:
.alter-merge table Target policy update @'[{"IsEnabled": true, "Source": "SourceTable", "Query": "SourceTable | extend ResourceId = strcat('subscriptions/', toupper(SubscriptionId), '/', resourceId)", | lookup DimResources on ResourceId | mv-expand Events "IsTransactional": false}]'
Definire la visualizzazione materializzata seguente:
.create materialized-view Usage on table Events { Target | summarize count() by ResourceId }
L'alternativa, di includere i criteri di aggiornamento come parte della query di visualizzazione materializzata, potrebbe comportare prestazioni peggiori e pertanto non consigliate:
.create materialized-view Usage on table SourceTable { SourceTable | extend ResourceId = strcat('subscriptions/', toupper(SubscriptionId), '/', resourceId) | lookup DimResources on ResourceId | mv-expand Events | summarize count() by ResourceId }
Suggerimento
Se sono necessarie prestazioni ottimali per il tempo di query, ma è possibile tollerare una certa latenza dei dati, usare la funzione materialized_view().
Riempimento di una vista materializzata
Quando si crea una vista materializzata usando la backfill
proprietà , la vista materializzata verrà creata in base ai record disponibili nella tabella di origine. In alternativa, verrà creato in base a un subset di tali record, se si usa effectiveDateTime
.
In background, il processo di backfill suddivide i dati per il backfill in più batch ed esegue diverse operazioni di inserimento per riempire nuovamente la visualizzazione. Il processo potrebbe richiedere molto tempo quando il numero di record nella tabella di origine è elevato. La durata del processo dipende dalle dimensioni del database. Tenere traccia dello stato di avanzamento del riempimento usando il .show operations
comando .
Gli errori temporanei che si verificano durante il processo di riempimento vengono ritentati. Se tutti i tentativi vengono esauriti, il comando avrà esito negativo e richiederà una nuova esecuzione manuale del comando create.
Non è consigliabile usare il riempimento quando il numero di record nella tabella di origine supera number-of-nodes X 200 million
(a volte anche meno, a seconda della complessità della query). Un'alternativa è l'opzione backfill by move extents.An alternative is the backfill by move extents option.
L'uso dell'opzione backfill non è supportato per i dati in una cache a freddo. Aumentare il periodo della cache ad accesso frequente, se necessario, per la durata della creazione della visualizzazione. Ciò potrebbe richiedere un aumento del numero di istanze.
Se si verificano errori durante la creazione della visualizzazione, provare a modificare queste proprietà:
MaxSourceRecordsForSingleIngest
: per impostazione predefinita, il numero di record di origine in ogni operazione di inserimento durante il backfill è di 2 milioni per nodo. È possibile modificare questa impostazione predefinita impostando questa proprietà sul numero di record desiderato. Il valore è il numero totale di record in ogni operazione di inserimento.La riduzione di questo valore può essere utile quando la creazione ha esito negativo sui limiti di memoria o sui timeout delle query. L'aumento di questo valore può velocizzare la creazione della vista, presupponendo che il database possa eseguire la funzione di aggregazione su più record rispetto all'impostazione predefinita.
Concurrency
: le operazioni di inserimento, in esecuzione come parte del processo di backfill, vengono eseguite simultaneamente. Per impostazione predefinita, la concorrenza èmin(number_of_nodes * 2, 5)
. È possibile impostare questa proprietà per aumentare o ridurre la concorrenza. È consigliabile aumentare questo valore solo se la CPU del database è bassa, perché l'aumento può influire significativamente sull'utilizzo della CPU del database.
Ad esempio, il comando seguente riempie la vista materializzata da 2020-01-01
. Il numero massimo di record in ogni operazione di inserimento è 3 milioni. Il comando eseguirà le operazioni di inserimento con concorrenza di 2
.
.create async materialized-view with (
backfill=true,
effectiveDateTime=datetime(2020-01-01),
MaxSourceRecordsForSingleIngest=3000000,
Concurrency=2
)
CustomerUsage on table T
{
T
| summarize count(), dcount(User), max(Duration) by Customer, bin(Timestamp, 1d)
}
Se la vista materializzata include una chiave di raggruppamento datetime, il processo di backfill supporta l'override dell'ora di creazione dell'extent in base alla colonna datetime. Ciò può essere utile, ad esempio, se si desidera che i record meno recenti vengano eliminati prima di quelli recenti, perché i criteri di conservazione si basano sul tempo di creazione dell'extent. La updateExtentsCreationTime
proprietà è supportata solo se la vista include una chiave datetime group-by che usa la bin()
funzione . Ad esempio, il backfill seguente assegnerà il tempo di creazione in base alla Timestamp
chiave group-by:
.create async materialized-view with (
backfill=true,
updateExtentsCreationTime=true
)
CustomerUsage on table T
{
T
| summarize count() by Customer, bin(Timestamp, 1d)
}
Backfill per extent di spostamento
L'opzione di backfilling spostando extent riempie la vista materializzata in base a una tabella esistente, che non è necessariamente la tabella di origine della vista materializzata. Per ottenere il riempimento , spostare gli extent dalla tabella specificata alla tabella di vista materializzata sottostante. Questo processo implica che:
- I dati nella tabella specificata devono avere lo stesso schema dello schema della vista materializzata.
- I record nella tabella specificata vengono spostati nella vista così com'è. Si presuppone che vengano deduplicati in base alla definizione della vista materializzata.
Ad esempio, se la vista materializzata ha l'aggregazione seguente:
T | summarize arg_max(Timestamp, *) by EventId
I record nella tabella di origine per l'operazione di spostamento extent devono essere già deduplicati da EventID
.
Poiché l'operazione usa extent con estensione move, i record verranno rimossi dalla tabella specificata durante il riempimento (spostato, non copiato).
Il backfill per extent di spostamento non è supportato per tutte le funzioni di aggregazione supportate nelle viste materializzate. Avrà esito negativo per le aggregazioni, avg()
ad esempio , dcount()
, in cui i dati sottostanti archiviati nella vista sono diversi dall'aggregazione stessa.
La vista materializzata viene riempita solo in base alla tabella specificata. La materializzazione dei record nella tabella di origine della vista inizierà dall'ora di creazione della visualizzazione, per impostazione predefinita.
Se la tabella di origine della vista materializzata inserisce continuamente dati, la creazione della vista tramite extent di spostamento potrebbe comportare una perdita di dati. Ciò è dovuto al fatto che i record inseriti nella tabella di origine, nel breve periodo tra il tempo di preparazione della tabella da cui eseguire il backfill e il tempo di creazione della vista, non verranno inclusi nella vista materializzata. Per gestire questo scenario, è possibile impostare la source_ingestion_time_from
proprietà sull'ora di inizio della vista materializzata sulla tabella di origine.
Casi d'uso
L'opzione di backfilling tramite extent di spostamento può essere utile in due scenari principali:
Quando si dispone già di una tabella che include i dati di origine deduplicati per la vista materializzata e non sono necessari questi record in questa tabella dopo la creazione della vista perché si usa solo la vista materializzata.
Quando la tabella di origine della vista materializzata è molto grande e il riempimento della vista in base alla tabella di origine non funziona correttamente a causa delle limitazioni indicate in precedenza. In questo caso, è possibile orchestrare manualmente il processo di backfill in una tabella temporanea usando l'inserimento da comandi di query. Quando la tabella temporanea include tutti i record per il riempimento nascosto, creare la vista materializzata in base a tale tabella.
È anche possibile usare uno degli strumenti di orchestrazione consigliati.
Esempi:
Nell'esempio seguente la tabella
DeduplicatedTable
include un singolo record perEventId
istanza e verrà usata come linea di base per la vista materializzata. Nella vista materializzata verranno inclusi solo i record inT
che vengono inseriti dopo l'ora di creazione della visualizzazione..create async materialized-view with (move_extents_from=DeduplicatedTable) MV on table T { T | summarize arg_max(Timestamp, *) by EventId }
Se la
effectiveDateTime
proprietà viene specificata insieme allamove_extents_from
proprietà , solo gli extent nelDeduplicatedTable
cuiMaxCreatedOn
valore è maggiore dieffectiveDateTime
vengono inclusi nel riempimento nascosto (spostati nella vista materializzata):.create async materialized-view with (move_extents_from=DeduplicatedTable, effectiveDateTime=datetime(2019-01-01)) MV on table T { T | summarize arg_max(Timestamp, *) by EventId }
Nell'esempio seguente viene illustrato l'uso della
source_ingestion_time_from
proprietà nell'opzione di riempimento in base agli extent di spostamento. L'uso di entrambisource_ingestion_time_from
emove_extents_from
indica che la vista materializzata viene riempita da due origini:Tabella
move_extents_from
:DeduplicatedTable
nell'esempio seguente. Questa tabella deve includere tutti i dati cronologici da riempire. Facoltativamente, è possibile utilizzare laeffectiveDateTime
proprietà per includere solo extent nelDeduplicatedTable
cuiMaxCreatedOn
valore è maggiore dieffectiveDateTime
.Tabella di origine della vista materializzata:
T
nell'esempio seguente. Il backfill da questa tabella include solo i record il cui valore ingestion_time() è maggiore disource_ingestion_time_from
.La
source_ingestion_time_from
proprietà deve essere utilizzata solo per gestire la possibile perdita di dati nel breve tempo tra la preparazione della tabella da (DeduplicatedTable
) e il tempo di creazione della vista. Non impostare questa proprietà troppo lontano in passato. Ciò avvierebbe la vista materializzata con un ritardo significativo, che potrebbe essere difficile da recuperare.
Nell'esempio seguente si supponga che l'ora corrente sia
2020-01-01 03:00
. TableDeduplicatedTable
è una tabella deduplicata diT
. Include tutti i dati cronologici, deduplicati fino a2020-01-01 00:00
. Ilcreate
comando usaDeduplicatedTable
per il riempimento della vista materializzata usando extent di spostamento. Ilcreate
comando include anche tutti i record inT
che sono stati inseriti dopo2020-01-01
..create async materialized-view with (move_extents_from=DeduplicatedTable, source_ingestion_time_from=datetime(2020-01-01)) MV on table T { T | summarize arg_max(Timestamp, *) by EventId }
Annullare la creazione della vista materializzata
È possibile annullare il processo di creazione della visualizzazione materializzata quando si usa l'opzione backfill. Questa azione è utile quando la creazione richiede troppo tempo e si vuole arrestarla durante l'esecuzione.
Avviso
La vista materializzata non può essere ripristinata dopo l'esecuzione di questo comando.
Il processo di creazione non può essere annullato immediatamente. Il comando cancel segnala la materializzazione da arrestare e la creazione controlla periodicamente se è stato richiesto un annullamento. Il comando di annullamento attende un periodo massimo di 10 minuti fino a quando il processo di creazione della visualizzazione materializzata non viene annullato e segnala se l'annullamento è riuscito.
Anche se l'annullamento non riesce entro 10 minuti e il comando di annullamento segnala un errore, la vista materializzata verrà probabilmente annullata in un secondo momento nel processo di creazione. Il .show operations
comando indica se l'operazione è stata annullata.
Se l'operazione non è più in corso quando viene eseguito il .cancel operation
comando, il comando segnala un errore.
Sintassi
.cancel operation
operationId
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Digita | Obbligatorio | Descrizione |
---|---|---|---|
operationId |
guid |
✔️ | ID operazione restituito dal .create async materialized-view comando. |
Output
Nome | Tipo | Descrizione |
---|---|---|
OperationId | guid |
ID operazione del .create materialized-view comando. |
Operazione | string |
Tipo di operazione. |
StartedOn | datetime |
Ora di inizio dell'operazione di creazione. |
CancellationState | string |
Uno di: Canceled successfully (la creazione è stata annullata), Cancellation failed (attesa del timeout dell'annullamento), Unknown (la creazione della visualizzazione non è più in esecuzione ma non è stata annullata da questa operazione). |
ReasonPhrase | string |
Motivo per cui l'annullamento non è riuscito. |
Esempi
.cancel operation c4b29441-4873-4e36-8310-c631c35c916e
OperationId | Operazione | StartedOn | CancellationState | ReasonPhrase |
---|---|---|---|---|
c4b29441-4873-4e36-8310-c631c35c916e |
MaterializedViewCreateOrAlter |
2020-05-08 19:45:03.9184142 |
Canceled successfully |
Se l'annullamento non è stato completato entro 10 minuti, CancellationState
indicherà un errore. La creazione può quindi essere annullata.