Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Una vista materializzata è una vista in cui i risultati precomputati sono disponibili per la query e possono essere aggiornati per riflettere le modifiche nell'input. le viste materializzate sono supportate da una pipeline. Ogni volta che viene aggiornata una vista materializzata, i risultati delle query vengono ricalcolati per riflettere le modifiche nei set di dati upstream. È possibile aggiornare le viste materializzate manualmente o in base a una pianificazione.
Per altre informazioni su come eseguire o pianificare gli aggiornamenti, vedere Eseguire un aggiornamento della pipeline.
Sintassi
CREATE [OR REFRESH] [PRIVATE] MATERIALIZED VIEW
view_name
[ column_list ]
[ view_clauses ]
AS query
column_list
( { column_name column_type column_properties } [, ...]
[ column_constraint ] [, ...]
[ , table_constraint ] [...] )
column_properties
{ NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]
view_clauses
{ USING DELTA |
PARTITIONED BY (col [, ...]) |
CLUSTER BY clause |
LOCATION path |
COMMENT view_comment |
TBLPROPERTIES clause |
WITH { ROW FILTER clause } } [...]
Parametri
REFRESH
Se specificato, creerà la vista o aggiornerà una visualizzazione esistente e il relativo contenuto.
PRIVATO
Crea una vista materializzata privata. Una vista materializzata privata può essere utile come tabella intermedia all'interno di una pipeline che non si desidera pubblicare nel catalogo.
- Non vengono aggiunti al catalogo e sono accessibili solo all'interno della pipeline di definizione
- Possono avere lo stesso nome di un oggetto esistente nel catalogo. All'interno della pipeline, se una vista materializzata privata e un oggetto nel catalogo hanno lo stesso nome, i riferimenti al nome verranno risolti nella vista materializzata privata.
- Le viste materializzate private vengono mantenute solo per tutta la durata della pipeline, non solo per un singolo aggiornamento.
Le viste materializzate private sono state create in precedenza con il
TEMPORARYparametro .view_name
Nome della vista appena creata. Il nome completamente qualificato della vista deve essere univoco.
Le viste materializzate private possono avere lo stesso nome di un oggetto pubblicato nel catalogo.
column_list
Etichetta facoltativamente le colonne nel risultato della query della visualizzazione. Se si specifica un elenco di colonne, il numero di alias di colonna deve corrispondere al numero di espressioni nella query. Se non viene specificato alcun elenco di colonne, gli alias vengono derivati dal corpo della visualizzazione.
-
I nomi delle colonne devono essere univoci e corrispondere alle colonne di output della query.
tipo_di_colonna
Specifica il tipo di dati della colonna. Non tutti i tipi di dati supportati da Azure Databricks sono supportati dalle viste materializzate.
column_comment
Etichetta
STRINGche descrive la colonna, facoltativa. Questa opzione deve essere specificata insieme acolumn_type. Se il tipo di colonna non viene specificato, il commento della colonna viene ignorato.-
Aggiunge un vincolo che convalida i dati durante il flusso nella tabella. Vedi Gestisci la qualità dei dati con le aspettative della pipeline.
-
Importante
Questa funzionalità è in Anteprima Pubblica.
Aggiunge una funzione di mascheratura delle colonne per rendere anonimi i dati sensibili. Vedere Filtri di riga e maschere di colonna.
-
vincolo_di_tabella
Importante
Questa funzionalità è in Anteprima Pubblica.
Quando si specifica uno schema, è possibile definire chiavi primarie ed esterne. I vincoli sono informativi e non vengono applicati. Consulta la clausola CONSTRAINT nella guida di riferimento del linguaggio SQL.
Annotazioni
Per definire i vincoli di tabella, la pipeline deve avere il Catalogo Unity abilitato.
view_clauses
Facoltativamente, specificare il partizionamento, i commenti e le proprietà definite dall'utente per la vista materializzata. Ogni clausola secondaria può essere specificata una sola volta.
USO DI DELTA
Specifica il formato dati. L'unica opzione è DELTA.
Questa clausola è facoltativa e l'impostazione predefinita è DELTA.
PARTIZIONATO PER
Elenco facoltativo di una o più colonne da utilizzare per il partizionamento nella tabella. Si escludono con
CLUSTER BYa vicenda.Il clustering liquido offre una soluzione flessibile e ottimizzata per il clustering. È consigliabile usare
CLUSTER BYanzichéPARTITIONED BYper le pipeline.CLUSTER BY
Abilitare il clustering liquido nella tabella e definire le colonne da usare come chiavi di clustering. Usare il clustering liquido automatico con
CLUSTER BY AUTOe Databricks sceglie in modo intelligente le chiavi di clustering per ottimizzare le prestazioni delle query. Si escludono conPARTITIONED BYa vicenda.UBICAZIONE
Posizione di archiviazione facoltativa per i dati della tabella. Se non impostato, il sistema userà per impostazione predefinita il percorso di archiviazione della pipeline.
Questa opzione è disponibile solo durante la pubblicazione nel metastore Hive. In Unity Catalog la posizione viene gestita automaticamente.
COMMENTO
Descrizione facoltativa per la tabella.
TBLPROPERTIES
Elenco facoltativo delle proprietà della tabella.
CON ROW FILTER
Importante
Questa funzionalità è in Anteprima Pubblica.
Aggiunge una funzione di filtro di riga alla tabella. Le future query per tale tabella ricevono un sottoinsieme delle righe per cui la funzione restituisce TRUE. Ciò è utile per il controllo di accesso con granularità fine, perché consente alla funzione di controllare l'identità e le appartenenze ai gruppi dell'utente che richiama per decidere se filtrare determinate righe.
Vedere la clausola
ROW FILTER.query
Query che definisce il set di dati per la tabella.
Autorizzazioni necessarie
L'utente run-as per una pipeline deve avere le autorizzazioni seguenti:
-
SELECTprivilegi sulle tabelle di base a cui fa riferimento la vista materializzata. - Il privilegio
USE CATALOGsul catalogo padre e il privilegioUSE SCHEMAsullo schema padre. -
CREATE MATERIALIZED VIEWprivilegio sullo schema per la vista materializzata.
Affinché un utente possa aggiornare la pipeline all'interno della quale è definita la vista materializzata, è necessario:
- Il privilegio
USE CATALOGsul catalogo padre e il privilegioUSE SCHEMAsullo schema padre. - Proprietà della vista materializzata o privilegio sulla vista materializzata.
- Il proprietario della vista materializzata deve avere il
SELECTprivilegio sulle tabelle di base a cui fa riferimento la vista materializzata.
Affinché un utente possa eseguire una query sulla vista materializzata risultante, è necessario:
- Il privilegio
USE CATALOGsul catalogo padre e il privilegioUSE SCHEMAsullo schema padre. - Privilegio
SELECTsulla vista materializzata.
Limitazioni
- Quando una vista materializzata con un'aggregazione
sumsu una colonna annullabile ha l'ultimo valore non NULL rimosso da tale colonna e quindi rimangono solo i valoriNULL, la vista materializzata restituisce zero anziché il valoreNULL. - Il riferimento a colonne non richiede un alias. Le espressioni di riferimento non di colonna richiedono un alias, come nell'esempio seguente:
- Consentito:
SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1 - Non consentito:
SELECT col1, SUM(col2) FROM t GROUP BY col1
- Consentito:
-
NOT NULLdeve essere specificato manualmente insieme aPRIMARY KEYper essere un'istruzione valida. - Le viste materializzate non supportano colonne di identità o chiavi surrogate.
- Le viste materializzate non supportano i comandi
OPTIMIZEeVACUUM. La manutenzione avviene automaticamente. - La rinominazione della tabella o la modifica del proprietario non è supportata.
- Le colonne generate, le colonne identità e le colonne predefinite non sono supportate.
Esempi
-- Create a materialized view by reading from an external data source, using the default schema:
CREATE OR REFRESH MATERIALIZED VIEW taxi_raw
AS SELECT * FROM read_files("/databricks-datasets/nyctaxi/sample/json/")
-- Create a materialized view by reading from a dataset defined in a pipeline:
CREATE OR REFRESH MATERIALIZED VIEW filtered_data
AS SELECT
...
FROM taxi_raw
-- Specify a schema and clustering columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) CLUSTER BY (order_day_of_week, customer_id)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify partition columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) PARTITIONED BY (order_day_of_week)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify a primary and foreign key constraint for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING NOT NULL PRIMARY KEY,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime)),
CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES main.default.customers(customer_id)
)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify a row filter and mask clause for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales (
customer_id STRING MASK catalog.schema.customer_id_mask_fn,
customer_name STRING,
number_of_line_items STRING COMMENT 'Number of items in the order',
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
)
COMMENT "Raw data on sales"
WITH ROW FILTER catalog.schema.order_number_filter_fn ON (order_number)
AS SELECT * FROM sales_bronze