Uma visualização materializada pré-computa e armazena os resultados de operações demoradas, como JOIN e AGGREGATE. Assim, as consultas subsequentes leem diretamente os resultados armazenados em vez de recalculá-los.
Contexto
Uma visualize é uma tabela virtual definida por uma consulta. Já a visualização materializada é uma tabela física que armazena resultados de consultas pré-computados e consome recursos de armazenamento. Para detalhes sobre faturamento, consulte Billing rules.
As visualizações materializadas são adequadas para os seguintes cenários:
Consultas executadas frequentemente com um padrão fixo.
Consultas que envolvem operações demoradas, como agregações e junções.
Consultas que acessam apenas um pequeno subconjunto de dados em uma tabela.
A tabela a seguir compara consultas tradicionais com consultas em visualizações materializadas.
Item | Consulta tradicional | Consulta em visualização materializada |
Instrução de consulta | Você consulta dados diretamente usando instruções SQL. | Crie uma visualização materializada e depois consulte-a. A seguinte instrução cria uma visualização materializada: Consulte a visualização materializada: Se a reescrita de consulta estiver ativada para a visualização materializada, o sistema usará automaticamente a visualização materializada ao executar a seguinte consulta: |
Características da consulta | A consulta lê tabelas, realiza junções e aplica filtros (cláusula WHERE). Para tabelas source grandes, essas operações são lentas e consomem muitos recursos. | A consulta lê a visualização materializada e aplica filtros. Não há necessidade de junções. O MaxCompute corresponde automaticamente a consulta à visualização materializada ideal e lê os dados diretamente dela, o que melhora significativamente o desempenho da consulta. |
Comandos
Tipo | Descrição | Permissões | Pontos de entrada |
Create a materialized view (supports partitioning and clustering) | Cria uma visualização materializada com base em uma instrução de consulta. | Requer a permissão CreateTable. | Execute esses comandos usando as seguintes ferramentas: |
Atualiza uma visualização materializada. | Requer a permissão Alter. | ||
Modifica o ciclo de vida de uma visualização materializada. | Requer a permissão Alter. | ||
Ativa ou desativa o ciclo de vida de uma visualização materializada. | Requer a permissão Alter. | ||
Consulta as informações básicas sobre uma visualização materializada. | Requer a permissão Describe. | ||
Verifica se uma visualização materializada é válida ou inválida. | Requer a permissão Describe. | ||
Lista todas as visualizações materializadas em um projeto ou aquelas que correspondem a critérios específicos. | Requer a permissão List. | ||
Exclui uma visualização materializada. | Requer a permissão Drop. | ||
Exclui uma partição de uma visualização materializada. | Requer a permissão Drop. | ||
Recupera automaticamente dados da tabela source particionada se os dados consultados não estiverem na visualização materializada. | Requer as permissões Write e CreateTable. | ||
Reescreve uma instrução de consulta para usar a visualização materializada. | Requer as permissões Write e CreateTable. | ||
Agenda atualizações periódicas para uma visualização materializada. | Requer a permissão Alter. |
Limitações
O MaxCompute não suporta funções de janela, funções com valor de tabela definidas pelo usuário (UDTFs) nem funções não determinísticas, como funções escalares definidas pelo usuário (UDFs) e funções de agregação definidas pelo usuário (UDAFs).
Se for necessário usar uma função não determinística, defina esta propriedade no nível de sessão: set odps.sql.materialized.view.support.nondeterministic.function=true;.
Criar uma visualização materializada (particionamento e clustering)
Cria uma visualização materializada a partir do resultado de uma consulta. Opcionalmente, você pode particionar e aplicar clustering na visualização materializada.
-
Limitações
O nome da visualização materializada deve ser exclusivo dentro do projeto e não pode ser igual ao de uma tabela, visualização ou visualização materializada existente. Execute o comando
SHOW TABLES;para visualizar os nomes de todas as tabelas e visualizações materializadas no projeto.Não é possível criar uma visualização materializada com base em outra visualização materializada existente.
Não é possível criar uma visualização materializada com base em uma tabela externa.
-
Notas de uso
Se a consulta de definição falhar, a criação da visualização materializada também falhará.
As colunas de chave de partição de uma visualização materializada devem derivar de uma tabela source. A ordem e o número das colunas de chave de partição devem corresponder aos da tabela source, mas seus nomes podem ser diferentes.
Se você especificar comentários apenas para um subconjunto de colunas, a operação retornará um erro.
É possível especificar tanto particionamento quanto clustering. Nesse caso, os dados dentro de cada partição terão as propriedades de clustering especificadas.
Se a consulta de definição contiver operadores não suportados, a operação retornará um erro. Para obter uma lista de operadores suportados, consulte Materialized view query rewrite.
Por padrão, o MaxCompute não suporta a criação de visualizações materializadas usando funções não determinísticas, como funções definidas pelo usuário (UDFs) e funções de agregação definidas pelo usuário (UDAFs). Se o seu caso de uso exigir funções não determinísticas, execute o comando
set odps.sql.materialized.view.support.nondeterministic.function=true;no nível de sessão.Visualizações materializadas suportam partições vazias. Quando uma partição da tabela source está vazia, a atualização da visualização materializada cria automaticamente uma partição vazia correspondente.
-
Sintaxe
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [project_name.]<mv_name> [LIFECYCLE <days>] --Specifies the lifecycle. [BUILD DEFERRED] --Creates the schema without populating data. [(<col_name> [COMMENT <col_comment>], ...)] --Column comments. [DISABLE REWRITE] --Specifies whether the materialized view can be used for query rewrite. [COMMENT 'table comment'] --Table comment. [PARTITIONED BY (<col_name> [, <col_name>, ...])] --Creates the materialized view as a partitioned table. [CLUSTERED BY | RANGE CLUSTERED BY (<col_name> [, <col_name>, ...]) [SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> BUCKETS] --Sets the shuffle and sort properties for a clustered table. [REFRESH EVERY <num> {MINUTES | HOURS | DAYS}] [TBLPROPERTIES("compressionstrategy"="{normal|high|extreme}", --Specifies the data storage compression strategy for the table. "enable_auto_substitute"="true", --Specifies whether to enable query passthrough to the source table when a partition does not exist. "enable_auto_refresh"="true", --Specifies whether to enable automatic refresh. "refresh_interval_minutes"="120", --Specifies the refresh interval. "only_refresh_max_pt"="true" --For partitioned materialized views, automatically refreshes only the latest partition from the source table. )] AS <select_statement>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
IF NOT EXISTS
Não
Se você não especificar IF NOT EXISTS e a visualização materializada já existir, a operação falhará com um erro.
project_name
Não
O nome do projeto MaxCompute para a visualização materializada. Se você omitir este parâmetro, o projeto atual será usado.
Faça login no MaxCompute console e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Visualize o nome do seu projeto.
mv_name
Sim
O nome da visualização materializada.
days
Não
O ciclo de vida da visualização materializada em dias. O valor deve ser um número inteiro de 1 a 37231.
BUILD DEFERRED
Não
Se especificado, cria o esquema da visualização materializada sem preenchê-lo com dados.
col_name
Não
O nome de uma coluna na visualização materializada.
col_comment
Não
O comentário para uma coluna.
DISABLE REWRITE
Não
Desativa a reescrita de consulta para a visualização materializada. Por padrão, a reescrita de consulta está ativada. Você pode executar
ALTER MATERIALIZED VIEW [project_name.]<mv_name> DISABLE REWRITE;para desativar a reescrita de consulta e executarALTER MATERIALIZED VIEW [project_name.]<mv_name> ENABLE REWRITE;para ativá-la.PARTITIONED BY
Não
As colunas de chave de partição. Use este parâmetro para criar uma visualização materializada particionada.
CLUSTERED BY|RANGE CLUSTERED BY
Não
A propriedade de shuffle para criar uma tabela com clustering.
SORTED BY
Não
A propriedade de ordenação para criar uma tabela com clustering.
REFRESH EVERY
Não
O intervalo de atualização agendada para a visualização materializada. As unidades válidas são MINUTES, HOURS ou DAYS.
number_of_buckets
Não
O número de buckets ao criar uma tabela com clustering.
TBLPROPERTIES
Não
compressionstrategy: Especifica a estratégia de compactação de armazenamento de dados. Os valores válidos são
normal,higheextreme. enable_auto_substitute: Especifica se deve ativar a passagem direta de consulta para a tabela source particionada quando uma partição não existe. Para mais informações, consulte Materialized view query rewrite.enable_auto_refresh: Opcional. Defina esta propriedade como
truepara ativar a atualização automática de dados.refresh_interval_minutes: Este parâmetro é obrigatório apenas quando
enable_auto_refreshestá definido comotrue. Ele especifica o intervalo de atualização em minutos.only_refresh_max_pt: Opcional. Esta propriedade aplica-se apenas a visualizações materializadas particionadas. Se definida como
true, apenas a partição mais recente da tabela source será atualizada.
select_statement
Sim
A instrução SELECT que define a visualização materializada. Para mais informações, consulte SELECT Syntax.
-
Exemplos
-
Exemplo 1: Criar uma visualização materializada
-
Crie duas tabelas,
mf_temf_t1, e insira dados.CREATE TABLE IF NOT EXISTS mf_t( id bigint, value bigint, name string) PARTITIONED BY (ds STRING); ALTER TABLE mf_t ADD PARTITION (ds='1'); INSERT INTO mf_t PARTITION (ds='1') VALUES (1,10,'kyle'),(2,20,'xia'); SELECT * FROM mf_t WHERE ds ='1'; -- The following result is returned. +------------+------------+------------+------------+ | id | value | name | ds | +------------+------------+------------+------------+ | 1 | 10 | kyle | 1 | | 2 | 20 | xia | 1 | +------------+------------+------------+------------+ CREATE TABLE IF NOT EXISTS mf_t1( id bigint, value bigint, name string) PARTITIONED BY (ds STRING); ALTER TABLE mf_t1 ADD PARTITION (ds='1'); INSERT INTO mf_t1 PARTITION (ds='1') VALUES (1,10,'kyle'),(3,20,'john'); SELECT * FROM mf_t1 WHERE ds ='1'; -- The following result is returned. +------------+------------+------------+------------+ | id | value | name | ds | +------------+------------+------------+------------+ | 1 | 10 | kyle | 1 | | 3 | 20 | john | 1 | +------------+------------+------------+------------+ -
Crie uma visualização materializada.
-
Amostra 1: Crie uma visualização materializada particionada com
dscomo chave de partição.CREATE MATERIALIZED VIEW mf_mv LIFECYCLE 7 ( key comment 'unique id', value comment 'input value', ds comment 'partition' ) PARTITIONED BY (ds) AS SELECT t1.id AS key, t1.value AS value, t1.ds AS ds FROM mf_t AS t1 JOIN mf_t1 AS t2 ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1'; --Query the materialized view. SELECT * FROM mf_mv WHERE ds =1; +------------+------------+------------+ | key | value | ds | +------------+------------+------------+ | 1 | 10 | 1 | +------------+------------+------------+ -
Amostra 2: Crie uma visualização materializada não particionada e com clustering.
CREATE MATERIALIZED VIEW mf_mv2 LIFECYCLE 7 CLUSTERED BY (key) SORTED BY (value) INTO 1024 buckets AS SELECT t1.id AS key, t1.value AS value, t1.ds AS ds FROM mf_t AS t1 JOIN mf_t1 AS t2 ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1'; -
Amostra 3: Crie uma visualização materializada particionada e com clustering.
CREATE MATERIALIZED VIEW mf_mv3 LIFECYCLE 7 PARTITIONED BY (ds) CLUSTERED BY (key) SORTED BY (value) INTO 1024 buckets AS SELECT t1.id AS key, t1.value AS value, t1.ds AS ds FROM mf_t AS t1 JOIN mf_t1 AS t2 ON t1.id = t2.id AND t1.ds=t2.ds AND t1.ds='1';
-
-
-
Exemplo 2: Criar uma partição vazia atualizando a partir de uma partição source vazia.
CREATE TABLE mf_blank_pts(id bigint ,name string) PARTITIONED BY (ds bigint); ALTER TABLE mf_blank_pts ADD PARTITION (ds = 1); ALTER TABLE mf_blank_pts ADD PARTITION (ds = 2); INSERT INTO TABLE mf_blank_pts PARTITION(ds=1) VALUES (1,"aba"),(2,"cbd"); CREATE MATERIALIZED VIEW IF NOT EXISTS mf_mv_blank_pts PARTITIONED BY (ds) AS SELECT id,name,ds FROM mf_blank_pts; ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>0); SHOW PARTITIONS mf_mv_blank_pts; --The partition ds=2 in the source table is empty. Refreshing partitions where ds > 0 creates a corresponding empty partition in the materialized view. ds=1 ds=2 SELECT * FROM mf_mv_blank_pts WHERE ds>0; --The result shows that only the partition ds=1 contains data. +------------+------------+------------+ | id | name | ds | +------------+------------+------------+ | 1 | aba | 1 | | 2 | cbd | 1 | +------------+------------+------------+
-
Atualizar uma visualização materializada
Quando os dados nas tabelas source ou partições mudam, a visualização materializada torna-se inválida e não pode ser usada para reescrita de consulta. Verifique o status da visualização e reconstrua-a se necessário. Para mais informações, consulte Query information about a materialized view.
-
Notas
A operação de reconstrução atualiza apenas as tabelas source ou partições alteradas.
É possível ativar a atualização agendada para atualizar os dados automaticamente. Para mais informações, consulte Scheduled refresh for materialized views.
-
Sintaxe
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> REBUILD [PARTITION (<ds>=max_pt(<table_name>),<expression1>...)]; -
Parâmetros
Parâmetro
Obrigatório
Descrição
project_name
Não
O nome do projeto MaxCompute para a visualização materializada. Se você omitir este parâmetro, o projeto atual será usado.
Faça login no MaxCompute console e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Visualize o nome do seu projeto.
mv_name
Sim
O nome da visualização materializada a ser atualizada.
ds
Não
O nome do campo de partição na visualização materializada.
max_pt
Não
Recupera o valor máximo de partição da tabela ou visualização materializada especificada (
table_name).expression
Não
Uma expressão que especifica as partições a serem reconstruídas. Isso é usado para visualizações materializadas particionadas.
-
Exemplos
-
Exemplo 1: Atualizar uma visualização materializada não particionada.
-- Create a non-partitioned table. CREATE TABLE count_test(a BIGINT, b BIGINT); -- Create a non-partitioned materialized view. CREATE MATERIALIZED VIEW count_mv LIFECYCLE 7 AS SELECT COUNT(*) FROM count_test; -- Update the non-partitioned materialized view. ALTER MATERIALIZED VIEW count_mv rebuild; -
Exemplo 2: Atualizar uma partição de visualização materializada.
ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds='1'); -
Exemplo 3: Atualizar partições por condição.
ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>='1', ds<='2'); -
Exemplo 4: Atualizar a partição mais recente.
-- Create a sample partitioned table. CREATE TABLE IF NOT EXISTS sale_detail_jt (shop_name STRING , customer_id STRING , total_price DOUBLE ) PARTITIONED BY (sale_date STRING ,region STRING ); ALTER TABLE sale_detail_jt ADD PARTITION (sale_date='2013',region='china'); INSERT INTO sale_detail_jt PARTITION (sale_date='2013',region='china') VALUES ('s1','c1',100.1), ('s2','c2',100.2), ('s3','c3',100.3); ALTER TABLE sale_detail_jt ADD PARTITION (sale_date='2013',region='en'); INSERT INTO sale_detail_jt PARTITION (sale_date='2013',region='en') VALUES ('t1','c5',200.0), ('t2','c6',300.0); -- View partition data. SELECT * FROM sale_detail_jt WHERE sale_date='2013' AND region='china'; +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ | s1 | c1 | 100.1 | 2013 | china | | s2 | c2 | 100.2 | 2013 | china | | s5 | c2 | 100.2 | 2013 | china | +-----------+-------------+-------------+-----------+--------+ -- View partition data. SELECT * FROM sale_detail_jt WHERE sale_date='2013' AND region='en'; +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ | t1 | c5 | 200.0 | 2013 | en | | t2 | c6 | 300.0 | 2013 | en | +-----------+-------------+-------------+-----------+--------+ -- Create a materialized view. CREATE MATERIALIZED VIEW mv_deferred BUILD DEFERRED AS SELECT * FROM sale_detail_jt; -- Query the materialized view mv_deferred. SELECT * FROM mv_deferred; -- The following result is returned: +-----------+-------------+-------------+-----------+--------+ | shop_name | customer_id | total_price | sale_date | region | +-----------+-------------+-------------+-----------+--------+ +-----------+-------------+-------------+-----------+--------+ -- Create a partitioned table. CREATE TABLE mf_part (id bigint,name string) PARTITIONED BY (dt string); -- Insert data. INSERT INTO mf_part PARTITION(dt='2013') VALUES(1,'name1'),(2,'name2'); -- Query data. SELECT * FROM mf_part WHERE dt='2013'; -- The following result is returned: +------------+------+----+ | id | name | dt | +------------+------+----+ | 1 | name1 | 2013 | | 2 | name2 | 2013 | +------------+------+----+ -- Create a partitioned materialized view. CREATE MATERIALIZED VIEW mv_rebuild BUILD DEFERRED PARTITIONED BY (dt) AS SELECT * FROM mf_part; -- Query data from the materialized view. SELECT * FROM mv_rebuild WHERE dt='2013'; -- The following result is returned: +------------+------+----+ | id | name | dt | +------------+------+----+ +------------+------+----+ -- Refresh the latest partition data. ALTER MATERIALIZED VIEW mv_rebuild REBUILD PARTITION(dt=max_pt('mf_part')); -- Query data from the materialized view. SELECT * FROM mv_rebuild WHERE dt='2013'; -- The following result is returned: +------------+------+----+ | id | name | dt | +------------+------+----+ | 1 | name1 | 2013 | | 2 | name2 | 2013 | +------------+------+----+
-
Modificar o ciclo de vida da visualização materializada
Modifica o ciclo de vida de uma visualização materializada existente.
-
Sintaxe
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> SET LIFECYCLE <days>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
project_name
Não
O nome do projeto MaxCompute para a visualização materializada. Se você omitir este parâmetro, o projeto atual será usado.
Faça login no MaxCompute console e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Visualize o nome do seu projeto.
mv_name
Sim
O nome da visualização materializada a ser modificada.
days
Sim
O novo ciclo de vida para a visualização materializada, em dias.
-
Exemplo
-- Set the lifecycle of the materialized view to 10 days. ALTER MATERIALIZED VIEW count_mv SET LIFECYCLE 10;
Ativar ou desativar o ciclo de vida da visualização materializada
Ativa ou desativa o gerenciamento de ciclo de vida para uma visualização materializada.
-
Sintaxe
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> [<pt_spec>] {enable|disable} LIFECYCLE; -
Parâmetros
Parâmetro
Obrigatório
Descrição
project_name
Não
O nome do projeto MaxCompute para a visualização materializada. Se você omitir este parâmetro, o projeto atual será usado.
Faça login no MaxCompute console e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Visualize o nome do seu projeto.
mv_name
Sim
O nome da visualização materializada a ser modificada.
pt_spec
Não
A partição a ser modificada. O formato é
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...), onde partition_col é uma coluna de partição e partition_col_value é seu valor.enable|disable
Sim
enablesignifica ativado edisablesignifica desativado. Se desativado, a partição ou tabela não estará sujeita ao gerenciamento de ciclo de vida. -
Exemplos
-
Exemplo 1: Ativar o gerenciamento de ciclo de vida para uma partição de uma visualização materializada.
ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') enable LIFECYCLE; -
Exemplo 2: Desativar o gerenciamento de ciclo de vida para uma partição de uma visualização materializada.
ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') disable LIFECYCLE;
-
Informações da visualização materializada
Visualiza os detalhes de uma visualização materializada, como seu esquema e hora de modificação.
-
Sintaxe
DESC EXTENDED [<project_name>.]<mv_name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
project_name
Não
O nome do projeto MaxCompute para a visualização materializada. Se você omitir este parâmetro, o projeto atual será usado.
Faça login no MaxCompute console e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Visualize o nome do seu projeto.
mv_name
Sim
O nome da visualização materializada a ser consultada.
-
Exemplo
DESC EXTENDED mv;O comando retorna a seguinte saída:
NotaEsta saída de exemplo está disponível apenas no cliente MaxCompute v0.43 ou posterior. Para mais informações, consulte Connect to MaxCompute by using odpscmd.
+------------------------------------------------------------------------------------+ | Owner: ALIYUN$$****@***.aliyunid.com | | Project: m**** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-05-30 13:16:07 | | LastDDLTime: 2023-05-30 13:16:07 | | LastModifiedTime: 2023-05-30 13:16:07 | +------------------------------------------------------------------------------------+ | MaterializedView: YES | | ViewText: select id,name from mf_refresh | | Rewrite Enabled: true | | AutoRefresh Enabled: true | | Refresh Interval Minutes: 10 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | ExtendedLabel | Nullable | DefaultValue | Comment | +------------------------------------------------------------------------------------+ | id | bigint | | | true | NULL | | | name | string | | | true | NULL | | +------------------------------------------------------------------------------------+ | Extended Info: | +------------------------------------------------------------------------------------+ | IsOutdated: false | | TableID: 569ec712873e44b3868e79b7a8beabab | | IsArchived: false | | PhysicalSize: 1875 | | FileNum: 2 | | StoredAs: CFile | | CompressionStrategy: normal | | odps.timemachine.retention.days: 1 | | ColdStorageStatus: N/A | | encryption_enable: false | +------------------------------------------------------------------------------------+ | AutoRefresh History: | +------------------------------------------------------------------------------------+ | InstanceId | Status | StartTime | EndTime | +------------------------------------------------------------------------------------+ | 20230619070546735ghwl1****** | TERMINATED | 2023-06-19 15:05:46 | 2023-06-19 15:05:47 | | 20230619065545586gwllc****** | TERMINATED | 2023-06-19 14:55:45 | 2023-06-19 14:55:46 | | 20230619064544463gcjgom****** | TERMINATED | 2023-06-19 14:45:44 | 2023-06-19 14:45:45 | | 20230619063543334gzxs2d****** | TERMINATED | 2023-06-19 14:35:43 | 2023-06-19 14:35:44 | | 2023061906254257gi21w2****** | TERMINATED | 2023-06-19 14:25:42 | 2023-06-19 14:25:43 | | 20230619061540813giacg8****** | TERMINATED | 2023-06-19 14:15:41 | 2023-06-19 14:15:41 | | 20230619060539674gswjq9****** | TERMINATED | 2023-06-19 14:05:39 | 2023-06-19 14:05:40 | | 20230619055538578gvdjk****** | TERMINATED | 2023-06-19 13:55:38 | 2023-06-19 13:55:40 | | 20230619054537356glqdne****** | TERMINATED | 2023-06-19 13:45:37 | 2023-06-19 13:45:38 | | 2023061905353687gcc5pl****** | TERMINATED | 2023-06-19 13:35:36 | 2023-06-19 13:35:37 | +------------------------------------------------------------------------------------+
Consultar o status da visualização materializada
Consulte o status de uma visualização materializada para verificar se ela é válida. Uma visualização materializada possui um dos seguintes estados:
-
Válida
O MaxCompute lê dados diretamente da visualização materializada em vez da tabela source.
-
Inválida
O MaxCompute não consegue ler dados da visualização materializada. As consultas retornam à tabela source sem aceleração de desempenho.
Use a seguinte função para verificar se os dados em uma visualização materializada são válidos.
-
Sintaxe
boolean materialized_view_is_valid(<mv_name>,<partition_value>); -
Exemplos
Verifica se os dados em uma visualização materializada são consistentes com os dados mais recentes na tabela source. A função retorna
truese os dados forem consistentes efalsecaso contrário.-
SELECT materialized_view_is_valid("count_mv"); -
SELECT materialized_view_is_valid("mf_mv_blank_pts","1");
-
Listar visualizações materializadas
Lista todas as visualizações materializadas em um projeto ou apenas aquelas que correspondem a um padrão específico.
O comando SHOW MATERIALIZED VIEWS requer o cliente MaxCompute (odpscmd) v0.43.0 ou posterior.
-
Sintaxe
-- Lists all materialized views in the project. SHOW MATERIALIZED VIEWS; -- Lists materialized views in the project that match the <materialized_view> pattern. SHOW MATERIALIZED VIEWS LIKE '<materialized_view>'; -
Exemplo
-- Lists materialized views that start with 'test'. The asterisk (*) is a wildcard. SHOW MATERIALIZED VIEWS LIKE 'test*';O comando retorna o seguinte resultado:
ALIYUN$account_name:test_two_mv ALIYUN$account_name:test_create_one_mv
Excluir uma visualização materializada
Exclui uma visualização materializada.
-
Sintaxe
DROP MATERIALIZED VIEW [IF EXISTS] [<project_name>.]<mv_name> [purge]; -
Parâmetros
Parâmetro
Obrigatório
Descrição
IF EXISTS
Não
Se você não especificar IF EXISTS, a operação retornará um erro se a visualização materializada não existir.
project_name
Não
O nome do projeto MaxCompute para a visualização materializada. Se você omitir este parâmetro, o projeto atual será usado.
Faça login no MaxCompute console e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Visualize o nome do seu projeto.
mv_name
Sim
O nome da visualização materializada a ser excluída.
purge
Não
Se você especificar
purge, a operação excluirá imediatamente os dados da visualização materializada. -
Exemplos
-
Exclua a visualização materializada
count_mv.DROP MATERIALIZED VIEW count_mv; -
Exclua a visualização materializada
count_mve remova seus dados imediatamente.DROP MATERIALIZED VIEW count_mv purge;
-
Excluir partições de uma visualização materializada
Exclui uma ou mais partições de uma visualização materializada existente.
-
Sintaxe
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> DROP [IF EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec>, PARTITION <pt_spec>....]; -
Parâmetros
Parâmetro
Obrigatório
Descrição
project_name
Não
O nome do projeto MaxCompute para a visualização materializada. Se você omitir este parâmetro, o projeto atual será usado.
Faça login no MaxCompute console e selecione uma região no canto superior esquerdo.
No painel de navegação à esquerda, escolha .
Visualize o nome do seu projeto.
mv_name
Sim
O nome da visualização materializada particionada da qual excluir partições.
IF EXISTS
Não
Se você omitir IF EXISTS e a visualização materializada não existir, um erro será retornado.
pt_spec
Sim
As partições a serem excluídas. Você deve especificar pelo menos uma partição. O formato é
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col especifica a coluna de partição e partition_col_value especifica o valor da partição. -
Exemplos
-
Exemplo 1: Excluir uma partição de uma visualização materializada particionada.
ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds='1'); -
Exemplo 2: Excluir partições que atendem a uma condição especificada de uma visualização materializada particionada.
ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds>='1' AND ds<='2');
-
Consulta transparente em visualização materializada
Uma visualização materializada particionada pode não conter dados para todas as partições — por exemplo, se você atualizar apenas as mais recentes. Quando uma consulta visa uma partição que não possui dados na visualização materializada, o sistema recorre automaticamente à tabela source particionada. A figura a seguir ilustra esse processo.

Para ativar o recurso de consulta transparente para uma visualização materializada, defina o seguinte parâmetro:
Ao criar a visualização materializada, adicione a configuração "enable_auto_substitute"="true" em tblproperties.
O exemplo a seguir demonstra como usar uma visualização materializada que suporta consultas transparentes.
-
Crie uma visualização materializada particionada que suporte consultas transparentes.
-- Create a source table named src. CREATE TABLE src(id bigint,name string) PARTITIONED BY (dt string); -- Insert data. INSERT INTO src PARTITION(dt='20210101') VALUES(1,'Alex'); INSERT INTO src PARTITION(dt='20210102') VALUES(2,'Flink'); -- Create a partitioned materialized view that supports penetration query. CREATE MATERIALIZED VIEW IF NOT EXISTS mv LIFECYCLE 7 PARTITIONED BY (dt) tblproperties("enable_auto_substitute"="true") AS SELECT id, name, dt FROM src; -
Consulte dados da partição
20210101na visualização materializadamv.SELECT * FROM mv WHERE dt='20210101'; -
Consulte dados da partição
20210102na visualização materializadamv. O sistema executa automaticamente uma consulta transparente na tabela source porque esta partição não está materializada.SELECT * FROM mv WHERE dt = '20210102'; -- Because the data for the 20210102 partition is not materialized, the query is rewritten to access the source table. This is equivalent to: SELECT * FROM (SELECT id, name, dt FROM src WHERE dt='20210102') t; -
Consulte dados de um intervalo de partições na visualização materializada
mv. O sistema executa automaticamente uma consulta transparente na tabela source para os dados não materializados e os combina com os dados materializados usando uma operaçãoUNIONantes de retornar o resultado.SELECT * FROM mv WHERE dt >= '20201230' AND dt<='20210102' AND id=5; -- Because data for partitions 20201230 and 20210102 is not materialized, the query is rewritten to access the source table. This is equivalent to: SELECT * FROM (SELECT id, name, dt FROM src WHERE dt='20201230' OR dt='20210102' UNION ALL SELECT * FROM mv WHERE dt='20210101' ) t WHERE id = 5;
Regras de faturamento
Os custos de visualização materializada consistem em dois componentes:
-
Taxas de armazenamento
Visualizações materializadas consomem armazenamento físico, gerando taxas de armazenamento conforme o uso. Para mais informações, consulte Storage pricing (pay-as-you-go).
-
Custos de computação
Criar, atualizar e consultar uma visualização materializada — incluindo reescritas de consulta quando a visualização é válida — consome recursos de computação e gera custos de computação.
Se o seu projeto MaxCompute estiver em um plano de assinatura , nenhuma taxa separada será cobrada.
-
Se o seu projeto MaxCompute estiver em um plano de pagamento conforme o uso , o MaxCompute calcula os custos com base na complexidade do SQL e no volume de dados de entrada. Para mais informações, consulte Standard SQL pricing. Observe o seguinte:
A instrução SQL usada para atualizar uma visualização materializada é a mesma que sua consulta de definição. Se o projeto estiver vinculado a um grupo de recursos de computação por assinatura, a operação usará seus recursos adquiridos sem custo extra. Se o projeto usar um grupo de recursos de pagamento conforme o uso, o custo dependerá do volume de dados de entrada e da complexidade do SQL. Após uma atualização, as taxas de armazenamento são cobradas com base no tamanho real da visualização materializada.
Quando uma visualização materializada é válida, a reescrita de consulta lê dados da visualização. O volume de dados de entrada depende da visualização materializada, não da tabela source. Se a visualização for inválida, a reescrita de consulta fica indisponível e as consultas leem diretamente da tabela source. Para mais informações, consulte Query materialized view status.
Quando uma visualização materializada é construída a partir de junções de várias tabelas, pode ocorrer inchaço de dados. Ler da visualização materializada nem sempre reduz custos em comparação com a leitura das tabelas source.
Referências
Para informações sobre reescritas de consulta de visualização materializada, consulte Materialized view query rewrite.
Para informações sobre atualizações agendadas de visualizações materializadas, consulte Scheduled refresh of materialized views.