CREATE MATERIALIZED VIEW

Si applica a:segno di spunta sì Databricks SQL

Importante

Questa funzionalità è disponibile in anteprima pubblica. Per iscriversi per l'accesso, compilare questo modulo.

Una vista materializzata è una vista in cui i risultati precompilate sono disponibili per la query e possono essere aggiornati in modo da riflettere le modifiche nell'input. Ogni volta che viene aggiornata una vista materializzata, i risultati delle query vengono ricalcolati per riflettere le modifiche nei set di dati upstream. Tutte le viste materializzate sono supportate da una pipeline DLT. È possibile aggiornare manualmente le viste materializzate, in base a una pianificazione o pianificando la pipeline DLT in cui sono contenute.

Sintassi

CREATE MATERIALIZED VIEW [IF NOT EXISTS]
  view_name
  [ column_list ]
  [ table_constraints ]
  [ view_clauses ]
  AS query

column_list
   ( { column_alias [ COMMENT column_comment | column_constraint ] [...] } [, ...] [ , table_constraint ] [...])

table_constraints
   ( table_constraint [, ...] )

view_clauses
  { PARTITIONED BY (col [, ...]) |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] CRON cron_string [ AT TIME ZONE timezone_id ] } [...]

Parametri

  • SE NON ESISTE

    Crea la vista se non esiste. Se esiste già una vista con questo nome, l'istruzione CREATE VIEW viene ignorata.

    È possibile specificare al massimo uno di IF NOT EXISTS o OR REFRESH.

  • view_name

    Nome della visualizzazione appena creata. Il nome completo della vista deve essere univoco.

  • column_list

    Facoltativamente, etichetta le colonne nel risultato della query della vista. 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.

    • column_alias

      Gli alias di colonna devono essere univoci.

    • column_comment

      Valore letterale facoltativo STRING che descrive l'alias di colonna.

    • column_constraint

      Importante

      Questa funzionalità è disponibile in anteprima pubblica.

      Aggiunge una chiave primaria informativa o un vincolo di chiave esterna informativa alla colonna in una vista materializzata. I vincoli non sono supportati per le viste materializzate nel hive_metastore catalogo.

  • table_constraint

    Importante

    Questa funzionalità è disponibile in anteprima pubblica.

    Aggiunge una chiave primaria informativa o vincoli di chiave esterna informativa a una vista materializzata. I vincoli non sono supportati per le viste materializzate nel hive-metastore catalogo.

  • view_clauses

    Facoltativamente, specificare partizionamento, commenti, proprietà definite dall'utente e una pianificazione di aggiornamento per la nuova vista materializzata. Ogni clausola secondaria può essere specificata una sola volta.

    • PARTIZIONATO DA

      Elenco facoltativo di colonne della tabella per partizionare la tabella.

    • COMMENT view_comment

      Valore STRING letterale per descrivere la tabella.

    • TBLPROPERTIES

      Facoltativamente, imposta una o più proprietà definite dall'utente.

    • SCHEDULE [ REFRESH ] CRON cron_string [ AT TIME ZONE timezone_id ]

      Se specificato, pianifica la tabella di streaming o la vista materializzata per aggiornare i dati con la pianificazione cron di quarzi specificata. Vengono accettati solo time_zone_values . AT TIME ZONE LOCAL non è supportata. Se AT TIME ZONE è assente, viene usato il fuso orario della sessione. Se AT TIME ZONE è assente e il fuso orario della sessione non è impostato, viene generato un errore. SCHEDULE è semanticamente equivalente a SCHEDULE REFRESH.

      Non è possibile usare la SCHEDULE sintassi in una definizione di pipeline Delta Live Tables.

  • Query AS

    Query che costruisce la vista da tabelle di base o da altre viste.

Autorizzazioni necessarie

L'utente che crea una vista materializzata (MV) è il proprietario MV e deve avere le autorizzazioni seguenti:

  • SELECT privilegi sulle tabelle di base a cui fa riferimento la MV.
  • USE CATALOG privilegio per il catalogo padre e il USE SCHEMA privilegio per lo schema padre.
  • CREATE privilegio per lo schema per la MV.

Solo il proprietario può il MV REFRESH .

Affinché un utente sia in grado di eseguire una query sulla MV, è necessario:

  • USE CATALOG privilegio per il catalogo padre e il USE SCHEMA privilegio per lo schema padre.
  • SELECT privilegi sulla vista materializzata.

Limiti

  • Quando una vista materializzata con un'aggregazione sum su una colonna in grado di valori NULL ha l'ultimo valore non NULL rimosso da tale colonna, pertanto solo NULL i valori rimangono in tale colonna. Il valore di aggregazione risultante della vista materializzata restituisce zero anziché NULL.
  • 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
  • Le viste materializzate non supportano colonne Identity o chiavi surrogate.
  • Le viste materializzate non supportano comandi e VACUUM ad hocOPTIMIZE. La manutenzione avviene automaticamente.

Esempi

-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create and schedule a materialized view to be refreshed daily at midnight.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
  COMMENT 'Daily sales numbers'
  SCHEDULE CRON '0 0 0 * * ? *'
  AS SELECT date AS date, sum(sales) AS sumOfSales
       FROM table1
       GROUP BY date;

-- Create a materialized view with a column constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id NOT NULL PRIMARY KEY,
    full_name,
    movie_title
  )
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id NOT NULL,
    full_name,
    movie_title,
    CONSTRAINT movie_pk PRIMARY KEY(member_id)
  )
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create a materialized view without column list
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    CONSTRAINT movie_pk PRIMARY KEY(member_id)
  )
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;