CREATE MATERIALIZED VIEW ( )DLT
Um viewmaterializado é um view em que os resultados pré-computados estão disponíveis para consulta e podem ser atualizados para refletir as alterações na entrada. A visualização materializada definida em um notebook pipeline é apoiada por um notebook DLT pipeline. Sempre que um view materializado é atualizado, os resultados da consulta são recalculados para refletir as alterações no conjunto de dados upstream. O senhor pode atualizar a visualização materializada manualmente ou em um programa.
Para saber mais sobre como executar ou programar atualizações, consulte executar uma atualização em um site DLT 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 view ou atualizará um view existente e seu conteúdo.
-
PRIVADO
Cria um view materializado privado. Uma view materializada privada pode ser útil como uma tabela intermediária em uma pipeline que o senhor não deseja que seja publicada no catálogo.
- Eles não são adicionados ao catálogo e só podem ser acessados dentro do pipeline de definição
- Eles podem ter o mesmo nome de um objeto existente no catálogo. No site pipeline, se um view materializado privado e um objeto no catálogo tiverem o mesmo nome, as referências ao nome serão resolvidas para o view materializado privado.
- As visualizações materializadas privadas são mantidas apenas durante o tempo de vida do site pipeline, não apenas em uma única atualização.
As visualizações materializadas privadas foram criadas anteriormente com o parâmetro TEMPORARY
.
-
visualização
O nome do site recém-criado view. O nome view totalmente qualificado deve ser exclusivo.
A visão materializada privada pode ter o mesmo nome de um objeto publicado no catálogo.
-
lista_coluna
Opcionalmente, o senhor pode rotular as colunas no resultado da consulta do site view. Se você fornecer uma lista de colunas, o número de aliases de coluna deverá corresponder ao número de expressões na consulta. Se nenhuma lista de colunas for especificada, os aliases serão derivados do corpo do site view.
-
Os nomes das colunas devem ser exclusivos e mapeados para as colunas de saída da consulta.
-
tipo_coluna
Especifica o tipo de dados da coluna. Nem todos os tipos de dados suportados pelo site Databricks são suportados pela visualização materializada.
-
comentário_coluna
Um literal
STRING
opcional descrevendo a coluna. Essa opção deve ser especificada junto comcolumn_type
. Se o tipo de coluna não for especificado, o comentário da coluna será ignorado. -
Adiciona uma restrição que valida os dados à medida que eles fluem para a tabela. Veja como gerenciar a qualidade dos dados com pipeline expectativas.
-
Visualização
Esse recurso está em Public Preview.
Adiciona uma função de máscara de coluna para anonimizar dados confidenciais. Consulte Filtro sensível à tabela uso de dados filtros de linha e máscaras de coluna.
- restrição_de_tabela
Visualização
Esse recurso está em Public Preview.
Ao especificar um esquema, o senhor 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.
Para definir restrições de tabela, seu pipeline deve ser um pipeline habilitado para o Unity Catalog.
-
visualização
Opcionalmente, especifique o particionamento, os comentários e as propriedades definidas pelo usuário para o site materializado view. Cada subcláusula só pode ser especificada uma vez.
-
USANDO DELTA
Especifica o formato dos dados. A única opção é DELTA.
Essa cláusula é opcional e o padrão é DELTA.
-
PARTICIONADO POR
Uma lista opcional de uma ou mais colunas a serem usadas para particionar na tabela. Mutuamente exclusivo com
CLUSTER BY
.O Liquid clustering oferece soluções flexíveis e otimizadas para clustering. Considere a possibilidade de usar
CLUSTER BY
em vez dePARTITIONED BY
para DLT. -
agrupamento POR
Habilite o clustering líquido na tabela e defina as colunas a serem usadas como chave clustering. Mutuamente exclusivo com
PARTITIONED BY
. -
Localização
Um local de armazenamento opcional para dados da tabela. Se não estiver definido, o sistema adotará como padrão o local de armazenamento do pipeline.
Essa opção só está disponível ao publicar em HMS. No uc, o local é gerenciado automaticamente.
-
comentário
Uma descrição opcional para a tabela.
-
PROPRIEDADES DA TABELA
Uma lista opcional de propriedades da tabela.
-
COM FILTRO DE LINHA
-
Visualização
Esse recurso está em Public Preview.
Adiciona uma função de filtro de linha à tabela. As consultas futuras dessa tabela recebem um subconjunto das linhas para as quais a função é avaliada como TRUE. Isso é útil para um controle de acesso refinado, pois permite que a função inspecione a identidade e as associações de grupo do usuário que está invocando para decidir se deseja filtrar determinadas linhas.
Veja a cláusulaROW FILTER
.
-
query
Uma consulta DLT que define o dataset para a tabela.
Permissões necessárias
O usuário executor de um pipeline deve ter as seguintes permissões:
SELECT
privilégio sobre as tabelas de base referenciadas pelo site materializado view.USE CATALOG
privilégio no catálogo principal e o privilégioUSE SCHEMA
no esquema principal.CREATE MATERIALIZED VIEW
privilégio no esquema do site materializado view.
Para que um usuário possa atualizar o pipeline no qual o view materializado está definido, ele precisa:
USE CATALOG
privilégio no catálogo principal e o privilégioUSE SCHEMA
no esquema principal.- Propriedade do privilégio materializado view ou
REFRESH
no privilégio materializado view. - O proprietário do view materializado deve ter o privilégio
SELECT
sobre as tabelas de base referenciadas pelo view materializado.
Para que um usuário possa consultar o materializado resultante view, ele precisa:
USE CATALOG
privilégio no catálogo principal e o privilégioUSE SCHEMA
no esquema principal.SELECT
privilégio sobre o site materializado view.
Limitações
-
Quando um view materializado com um agregado
sum
sobre uma coluna NULL-able tem o último valor não NULL removido dessa coluna - e, portanto, somente os valoresNULL
permanecem nessa coluna - o valor agregado resultante do viewmaterializado retorna zero em vez deNULL
. -
A referência de coluna não exige um alias. Expressões de referência que não são 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
- Permitido:
-
NOT NULL
deve ser especificado manualmente junto comPRIMARY KEY
para ser uma declaração válida. -
A visualização materializada não oferece suporte a colunas de identidade ou chave substituta.
-
A visualização materializada não é compatível com
OPTIMIZE
eVACUUM
comando. 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 default.
Exemplos
-- 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