Partilhar via


CREATE MATERIALIZED VIEW (gasodutos)

Uma vista materializada é uma vista onde os resultados pré-calculados estão disponíveis para consulta e podem ser atualizados para refletir as alterações na entrada. As visões materializadas são apoiadas por um pipeline. Cada vez que uma exibição materializada é atualizada, os resultados da consulta são recalculados para refletir as alterações nos conjuntos de dados upstream. Você pode atualizar as visualizações materializadas manualmente ou em um cronograma.

Para saber mais sobre como executar ou agendar atualizações, consulte Executar uma atualização de pipeline.

Sintaxe

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 } } [...]

Parâmetros

  • REFRESH

    Se especificado, criará o modo de exibição ou atualizará um modo de exibição existente e seu conteúdo.

  • PRIVADO

    Cria uma visão privada materializada. Uma exibição materializada privada pode ser útil como uma tabela intermediária dentro de um pipeline que você não deseja publicar no catálogo.

    • Eles não são adicionados ao catálogo e só são acessíveis na pipeline onde são definidos.
    • Eles podem ter o mesmo nome de um objeto existente no catálogo. No pipeline, se uma vista materializada privada e um objeto no catálogo tiverem o mesmo nome, as referências ao nome serão referentes à vista materializada privada.
    • As visualizações materializadas privadas são mantidas apenas durante toda a vida útil do pipeline, não apenas uma única atualização.

    As visualizações privadas materializadas foram previamente criadas com o TEMPORARY parâmetro.

  • view_name

    O nome da vista recém-criada. O nome do modo de exibição totalmente qualificado deve ser exclusivo.

    As visualizações materializadas privadas podem ter o mesmo nome de um objeto publicado no catálogo.

  • column_list

    Opcionalmente, rotula as colunas no resultado da consulta da visualização. Se fornecer uma lista de colunas, o número de alias das colunas deve corresponder ao número de expressões na consulta. Se nenhuma lista de colunas for especificada, os aliases serão derivados do corpo da vista.

    • nome_da_coluna

      Os nomes das colunas devem ser exclusivos e corresponder às colunas de saída da consulta.

    • tipo_de_coluna

      Especifica o tipo de dados da coluna. Nem todos os tipos de dados suportados pelo Azure Databricks são suportados por vistas materializadas.

    • column_comment

      Um STRING literal opcional descrevendo a coluna. Esta opção deve ser especificada juntamente com column_type. Se o tipo de coluna não for especificado, o comentário da coluna é ignorado.

    • column_constraint

      Adiciona uma restrição que valida os dados à medida que fluem para a tabela. Consulte Gerir a qualidade dos dados com as expectativas do fluxo de dados.

    • Cláusula MASK

      Importante

      Este recurso está no Public Preview.

      Adiciona uma função de máscara de coluna para anonimizar dados sensíveis. Consulte os filtros de linha e as máscaras de coluna.

  • restrição_de_tabela

    Importante

    Este recurso está no Public Preview.

    Ao especificar um esquema, você pode definir chaves primárias e estrangeiras. As restrições são informativas e não são aplicadas. Consulte a cláusula CONSTRAINT na referência da linguagem SQL.

    Observação

    Para definir restrições de tabela, seu pipeline deve ser um pipeline habilitado para Unity Catalog.

  • view_clauses

    Opcionalmente, especifique particionamento, comentários e propriedades definidas pelo usuário para a exibição materializada. Cada subcláusula só pode ser especificada uma vez.

    • USANDO DELTA

      Especifica o formato de dados. A única opção é DELTA.

      Esta cláusula é opcional e por predefinição é DELTA.

    • DIVIDIDO POR

      Uma lista opcional de uma ou mais colunas a serem usadas para particionamento na tabela. Mutuamente exclusivo com CLUSTER BY.

      O agrupamento líquido oferece uma solução flexível e otimizada para agrupamento. Considere usar CLUSTER BY em vez de PARTITIONED BY para pipelines.

    • CLUSTER BY

      Ative o agrupamento líquido na tabela e defina as colunas que serão utilizadas como chaves de agrupamento. Utilize o clustering automático de líquidos com CLUSTER BY AUTO, e o Databricks escolhe inteligentemente as chaves de clustering para otimizar o desempenho das consultas. Mutuamente exclusivo com PARTITIONED BY.

      Veja Utilizar clustering líquido para tabelas.

    • LOCALIZAÇÃO

      Um local de armazenamento opcional para dados de tabela. Se não estiver definido, o sistema assumirá como padrão o local de armazenamento do pipeline.

      Essa opção só está disponível ao publicar no metastore do Hive. No Unity Catalog, o local é gerenciado automaticamente.

    • COMENTAR

      Uma descrição opcional para a tabela.

    • TBLPROPERTIES

      Uma lista opcional de propriedades da tabela.

    • COM ROW FILTER

    Importante

    Este recurso está no Public Preview.

    Adiciona uma função de filtro de linha à tabela. Consultas futuras para essa tabela recebem um subconjunto das linhas para as quais a função é avaliada como TRUE. Isso é útil para controle de acesso refinado, porque permite que a função inspecione a identidade e as associações de grupo do usuário que invoca para decidir se deseja filtrar determinadas linhas.

    Consulte a cláusula ROW FILTER.

  • consulta

    Uma consulta que define o conjunto de dados para a tabela.

Permissões necessárias

O usuário run-as para um pipeline deve ter as seguintes permissões:

  • SELECT privilégio sobre as tabelas base referenciadas pela vista materializada.
  • o privilégio USE CATALOG no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • CREATE MATERIALIZED VIEW privilégio no esquema para a visão materializada.

Para que um usuário possa atualizar o pipeline em que a visualização materializada é definida, eles exigem:

  • o privilégio USE CATALOG no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • Propriedade da visão materializada ou REFRESH privilégio sobre a visão materializada.
  • O proprietário da vista materializada deve ter o SELECT privilégio sobre as tabelas base referenciadas pela vista materializada.

Para que um usuário possa consultar a exibição materializada resultante, eles precisam:

  • o privilégio USE CATALOG no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • SELECT privilégio sobre a visão materializada.

Limitações

  • Quando uma vista materializada com uma agregação sum sobre uma coluna passível de NULL tem o último valor não-NULL removido dessa coluna - e, assim, apenas os valores NULL permanecem nessa coluna - o valor agregado resultante da vista materializada retorna zero em vez de NULL.
  • A referência de coluna não requer um alias. Expressões de referência que não sejam de coluna exigem um alias, como no exemplo a seguir:
    • Permitido: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Não permitido: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • NOT NULL deve ser especificado manualmente junto com PRIMARY KEY para ser uma instrução válida.
  • As visualizações materializadas não suportam colunas de identidade ou chaves substitutas.
  • As vistas materializadas não suportam OPTIMIZE e VACUUM comandos. A manutenção acontece automaticamente.
  • Não há suporte para renomear a tabela ou alterar o proprietário.
  • Não há suporte para colunas geradas, colunas de identidade e colunas padrão.

Examples

-- 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