Una vista materializada precalcula y almacena los resultados de operaciones que consumen mucho tiempo, como JOIN y AGGREGATE. De este modo, las consultas posteriores leen directamente los resultados almacenados en lugar de volver a calcularlos.
Contexto
Una view es una tabla virtual definida por una consulta. En cambio, una vista materializada es una tabla física que almacena resultados de consultas precalculados y consume recursos de almacenamiento. Para conocer los detalles de facturación, consulte Billing rules.
Las vistas materializadas son adecuadas para los siguientes escenarios:
Consultas que se ejecutan con frecuencia y tienen un patrón fijo.
Consultas que involucran operaciones costosas en tiempo, como agregaciones y uniones (joins).
Consultas que acceden solo a un subconjunto pequeño de datos de una tabla.
A continuación se comparan las consultas tradicionales con las consultas basadas en vistas materializadas.
Elemento | Consulta tradicional | Consulta con vista materializada |
Instrucción de consulta | Los datos se consultan directamente mediante instrucciones SQL. | Cree una vista materializada y después consúltela. La siguiente instrucción crea una vista materializada: Consulte la vista materializada: Si la reescritura de consultas está habilitada para la vista materializada, el sistema la utiliza automáticamente al ejecutar la siguiente consulta: |
Características de la consulta | La consulta lee tablas, realiza uniones y aplica filtros (cláusula WHERE). Cuando las tablas de origen son grandes, estas operaciones son lentas y consumen muchos recursos. | La consulta lee la vista materializada y aplica filtros, sin necesidad de realizar uniones. MaxCompute asocia automáticamente la consulta con la vista materializada óptima y lee los datos directamente desde ella, lo que mejora significativamente el rendimiento. |
Comandos
Tipo | Descripción | Permisos | Puntos de entrada |
Create a materialized view (supports partitioning and clustering) | Crea una vista materializada a partir de una instrucción de consulta. | Requiere el permiso CreateTable. | Ejecute estos comandos con las siguientes herramientas: |
Actualiza una vista materializada. | Requiere el permiso Alter. | ||
Modifica el ciclo de vida de una vista materializada. | Requiere el permiso Alter. | ||
Habilita o deshabilita el ciclo de vida de una vista materializada. | Requiere el permiso Alter. | ||
Consulta la información básica de una vista materializada. | Requiere el permiso Describe. | ||
Comprueba si una vista materializada es válida o no válida. | Requiere el permiso Describe. | ||
Enumera todas las vistas materializadas de un proyecto o aquellas que cumplen criterios específicos. | Requiere el permiso List. | ||
Elimina una vista materializada. | Requiere el permiso Drop. | ||
Elimina una partición de una vista materializada. | Requiere el permiso Drop. | ||
Recupera automáticamente los datos de la tabla de origen particionada si los datos consultados no están en la vista materializada. | Requiere los permisos Write y CreateTable. | ||
Reescribe una instrucción de consulta para usar la vista materializada. | Requiere los permisos Write y CreateTable. | ||
Programa actualizaciones periódicas para una vista materializada. | Requiere el permiso Alter. |
Limitaciones
No se admiten las funciones de ventana, las funciones definidas por el usuario con valores de tabla (UDTF) ni las funciones no deterministas, como las funciones escalares definidas por el usuario (UDF) y las funciones de agregación definidas por el usuario (UDAF).
Si necesita usar una función no determinista, establezca esta propiedad a nivel de sesión: set odps.sql.materialized.view.support.nondeterministic.function=true;.
Crear una vista materializada (particionamiento y agrupamiento)
Crea una vista materializada a partir del resultado de una consulta. De forma opcional, puede particionar y agrupar la vista materializada.
-
Limitaciones
El nombre de la vista materializada debe ser único dentro del proyecto. No puede coincidir con el de una tabla, vista o vista materializada existente. Ejecute el comando
SHOW TABLES;para consultar los nombres de todas las tablas y vistas materializadas del proyecto.No es posible crear una vista materializada basada en otra vista materializada existente.
Tampoco se admite crearla a partir de una tabla externa.
-
Notas de uso
Si la consulta de definición falla, también fallará la creación de la vista materializada.
Las columnas de clave de partición de una vista materializada deben derivarse de una tabla de origen. El orden y la cantidad de estas columnas deben coincidir con los de la tabla de origen, aunque sus nombres pueden ser distintos.
Si especifica comentarios solo para un subconjunto de columnas, la operación devuelve un error.
Es posible especificar tanto el particionamiento como el agrupamiento. En ese caso, los datos de cada partición tendrán las propiedades de agrupamiento indicadas.
Si la consulta de definición contiene operadores no compatibles, la operación devuelve un error. Para ver la lista de operadores compatibles, consulte Materialized view query rewrite.
De manera predeterminada, MaxCompute no permite crear vistas materializadas con funciones no deterministas, como las funciones definidas por el usuario (UDF) y las funciones de agregación definidas por el usuario (UDAF). Si su caso de uso requiere funciones no deterministas, ejecute el comando
set odps.sql.materialized.view.support.nondeterministic.function=true;a nivel de sesión.Las vistas materializadas admiten particiones vacías. Cuando una partición de la tabla de origen está vacía, la actualización de la vista materializada crea automáticamente una partición vacía correspondiente.
-
Sintaxis
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
Obligatorio
Descripción
IF NOT EXISTS
No
Si no especifica IF NOT EXISTS y la vista materializada ya existe, la operación falla y devuelve un error.
project_name
No
Nombre del proyecto de MaxCompute al que pertenece la vista materializada. Si omite este parámetro, se utiliza el proyecto actual.
Inicie sesión en la MaxCompute console y seleccione una región en la esquina superior izquierda.
En el panel de navegación izquierdo, elija .
Consulte el nombre de su proyecto.
mv_name
Sí
Nombre de la vista materializada.
days
No
Ciclo de vida de la vista materializada, expresado en días. El valor debe ser un número entero entre 1 y 37231.
BUILD DEFERRED
No
Si se especifica, crea el esquema de la vista materializada sin insertarle datos.
col_name
No
Nombre de una columna de la vista materializada.
col_comment
No
Comentario de una columna.
DISABLE REWRITE
No
Deshabilita la reescritura de consultas para la vista materializada. Esta función está habilitada de forma predeterminada. Ejecute
ALTER MATERIALIZED VIEW [project_name.]<mv_name> DISABLE REWRITE;para deshabilitarla oALTER MATERIALIZED VIEW [project_name.]<mv_name> ENABLE REWRITE;para habilitarla.PARTITIONED BY
No
Columnas de clave de partición. Utilice este parámetro para crear una vista materializada particionada.
CLUSTERED BY|RANGE CLUSTERED BY
No
Propiedad de redistribución (shuffle) para crear una tabla agrupada.
SORTED BY
No
Propiedad de ordenamiento para crear una tabla agrupada.
REFRESH EVERY
No
Intervalo programado para actualizar la vista materializada. Las unidades válidas son MINUTES, HOURS o DAYS.
number_of_buckets
No
Número de depósitos (buckets) al crear una tabla agrupada.
TBLPROPERTIES
No
compressionstrategy: define la estrategia de compresión para el almacenamiento de datos. Los valores válidos son
normal,highyextreme. enable_auto_substitute: indica si se habilita el paso directo de la consulta a la tabla de origen particionada cuando no existe una partición. Para obtener más información, consulte Materialized view query rewrite.enable_auto_refresh: opcional. Establezca esta propiedad en
truepara habilitar la actualización automática de datos.refresh_interval_minutes: este parámetro es obligatorio únicamente cuando
enable_auto_refreshse establece entrue. Define el intervalo de actualización en minutos.only_refresh_max_pt: opcional. Esta propiedad solo aplica a las vistas materializadas particionadas. Si se establece en
true, solo se actualiza la partición más reciente de la tabla de origen.
select_statement
Sí
Instrucción SELECT que define la vista materializada. Para obtener más información, consulte SELECT Syntax.
-
Ejemplos
-
Ejemplo 1: crear una vista materializada
-
Cree dos tablas,
mf_tymf_t1, e inserte datos.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 | +------------+------------+------------+------------+ -
Cree una vista materializada.
-
Muestra 1: crear una vista materializada particionada con
dscomo clave de partición.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 | +------------+------------+------------+ -
Muestra 2: crear una vista materializada agrupada y no particionada.
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'; -
Muestra 3: crear una vista materializada particionada y agrupada.
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';
-
-
-
Ejemplo 2: crear una partición vacía al actualizar desde una partición de origen vacía.
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 | +------------+------------+------------+
-
Actualizar una vista materializada
Cuando cambian los datos de las tablas o particiones de origen, la vista materializada queda invalidada y no se puede usar para reescribir consultas. Compruebe el estado de la vista y reconstrúyala si es necesario. Para obtener más información, consulte Query information about a materialized view.
-
Notas
La operación de reconstrucción actualiza únicamente las tablas o particiones de origen que cambiaron.
Puede habilitar la actualización programada para que los datos se actualicen automáticamente. Para obtener más información, consulte Scheduled refresh for materialized views.
-
Sintaxis
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> REBUILD [PARTITION (<ds>=max_pt(<table_name>),<expression1>...)]; -
Parámetros
Parámetro
Obligatorio
Descripción
project_name
No
Nombre del proyecto de MaxCompute al que pertenece la vista materializada. Si omite este parámetro, se utiliza el proyecto actual.
Inicie sesión en la MaxCompute console y seleccione una región en la esquina superior izquierda.
En el panel de navegación izquierdo, elija .
Consulte el nombre de su proyecto.
mv_name
Sí
Nombre de la vista materializada que se va a actualizar.
ds
No
Nombre del campo de partición en la vista materializada.
max_pt
No
Recupera el valor máximo de partición de la tabla o vista materializada especificada (
table_name).expression
No
Expresión que indica las particiones que se van a reconstruir. Se usa en vistas materializadas particionadas.
-
Ejemplos
-
Ejemplo 1: actualizar una vista materializada no 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; -
Ejemplo 2: actualizar una partición de una vista materializada.
ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds='1'); -
Ejemplo 3: actualizar particiones según una condición.
ALTER MATERIALIZED VIEW mf_mv_blank_pts REBUILD PARTITION (ds>='1', ds<='2'); -
Ejemplo 4: actualizar la partición más reciente.
-- 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 el ciclo de vida de una vista materializada
Modifica el ciclo de vida de una vista materializada existente.
-
Sintaxis
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> SET LIFECYCLE <days>; -
Parámetros
Parámetro
Obligatorio
Descripción
project_name
No
Nombre del proyecto de MaxCompute al que pertenece la vista materializada. Si omite este parámetro, se utiliza el proyecto actual.
Inicie sesión en la MaxCompute console y seleccione una región en la esquina superior izquierda.
En el panel de navegación izquierdo, elija .
Consulte el nombre de su proyecto.
mv_name
Sí
Nombre de la vista materializada que se va a modificar.
days
Sí
Nuevo ciclo de vida de la vista materializada, expresado en días.
-
Ejemplo
-- Set the lifecycle of the materialized view to 10 days. ALTER MATERIALIZED VIEW count_mv SET LIFECYCLE 10;
Habilitar o deshabilitar el ciclo de vida de una vista materializada
Habilita o deshabilita la gestión del ciclo de vida de una vista materializada.
-
Sintaxis
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> [<pt_spec>] {enable|disable} LIFECYCLE; -
Parámetros
Parámetro
Obligatorio
Descripción
project_name
No
Nombre del proyecto de MaxCompute al que pertenece la vista materializada. Si omite este parámetro, se utiliza el proyecto actual.
Inicie sesión en la MaxCompute console y seleccione una región en la esquina superior izquierda.
En el panel de navegación izquierdo, elija .
Consulte el nombre de su proyecto.
mv_name
Sí
Nombre de la vista materializada que desea modificar.
pt_spec
No
Partición que se va a modificar. El formato es
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...), donde partition_col es una columna de partición y partition_col_value es su valor.enable|disable
Sí
enableindica que la función está habilitada, mientras quedisableindica que está deshabilitada. Si se deshabilita, la partición o tabla no queda sujeta a la gestión del ciclo de vida. -
Ejemplos
-
Ejemplo 1: habilite la gestión del ciclo de vida para una partición de una vista materializada.
ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') enable LIFECYCLE; -
Ejemplo 2: deshabilite la gestión del ciclo de vida para una partición de una vista materializada.
ALTER MATERIALIZED VIEW mf_mv_blank_pts PARTITION (ds='1') disable LIFECYCLE;
-
Información de una vista materializada
Permite consultar los detalles de una vista materializada, como su esquema y la fecha de modificación.
-
Sintaxis
DESC EXTENDED [<project_name>.]<mv_name>; -
Parámetros
Parámetro
Obligatorio
Descripción
project_name
No
Nombre del proyecto de MaxCompute al que pertenece la vista materializada. Si omite este parámetro, se utiliza el proyecto actual.
Inicie sesión en la MaxCompute console y seleccione una región en la esquina superior izquierda.
En el panel de navegación izquierdo, elija .
Consulte el nombre de su proyecto.
mv_name
Sí
Nombre de la vista materializada que desea consultar.
-
Ejemplo
DESC EXTENDED mv;El comando devuelve el siguiente resultado:
NotaEste ejemplo de salida solo está disponible en el cliente de MaxCompute v0.43 o versiones posteriores. Para obtener más información, 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 el estado de una vista materializada
Consulte el estado de una vista materializada para comprobar si es válida. Una vista materializada puede tener uno de los siguientes estados:
-
Válida
MaxCompute lee los datos directamente de la vista materializada en lugar de la tabla de origen.
-
No válida
MaxCompute no puede leer los datos de la vista materializada. Las consultas recurren a la tabla de origen sin aceleración de rendimiento.
Utilice la siguiente función para comprobar si los datos de una vista materializada son válidos.
-
Sintaxis
boolean materialized_view_is_valid(<mv_name>,<partition_value>); -
Ejemplos
Comprueba si los datos de una vista materializada coinciden con los datos más recientes de la tabla de origen. La función devuelve
truesi los datos coinciden yfalseen caso contrario.-
SELECT materialized_view_is_valid("count_mv"); -
SELECT materialized_view_is_valid("mf_mv_blank_pts","1");
-
Listar vistas materializadas
Lista todas las vistas materializadas de un proyecto o solo aquellas que coinciden con un patrón específico.
El comando SHOW MATERIALIZED VIEWS requiere el cliente de MaxCompute (odpscmd) v0.43.0 o una versión posterior.
-
Sintaxis
-- 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>'; -
Ejemplo
-- Lists materialized views that start with 'test'. The asterisk (*) is a wildcard. SHOW MATERIALIZED VIEWS LIKE 'test*';El comando devuelve el siguiente resultado:
ALIYUN$account_name:test_two_mv ALIYUN$account_name:test_create_one_mv
Eliminar una vista materializada
Elimina una vista materializada.
-
Sintaxis
DROP MATERIALIZED VIEW [IF EXISTS] [<project_name>.]<mv_name> [purge]; -
Parámetros
Parámetro
Obligatorio
Descripción
IF EXISTS
No
Si no especifica IF EXISTS, la operación devuelve un error cuando la vista materializada no existe.
project_name
No
Nombre del proyecto de MaxCompute al que pertenece la vista materializada. Si omite este parámetro, se utiliza el proyecto actual.
Inicie sesión en la MaxCompute console y seleccione una región en la esquina superior izquierda.
En el panel de navegación izquierdo, elija .
Consulte el nombre de su proyecto.
mv_name
Sí
Nombre de la vista materializada que desea eliminar.
purge
No
Si especifica
purge, la operación elimina inmediatamente los datos de la vista materializada. -
Ejemplos
-
Elimine la vista materializada
count_mv.DROP MATERIALIZED VIEW count_mv; -
Elimine la vista materializada
count_mvy borre sus datos de inmediato.DROP MATERIALIZED VIEW count_mv purge;
-
Eliminar particiones de una vista materializada
Elimina una o más particiones de una vista materializada existente.
-
Sintaxis
ALTER MATERIALIZED VIEW [<project_name>.]<mv_name> DROP [IF EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec>, PARTITION <pt_spec>....]; -
Parámetros
Parámetro
Obligatorio
Descripción
project_name
No
Nombre del proyecto de MaxCompute al que pertenece la vista materializada. Si omite este parámetro, se utiliza el proyecto actual.
Inicie sesión en la MaxCompute console y seleccione una región en la esquina superior izquierda.
En el panel de navegación izquierdo, elija .
Consulte el nombre de su proyecto.
mv_name
Sí
Nombre de la vista materializada particionada de la que desea eliminar particiones.
IF EXISTS
No
Si omite IF EXISTS y la vista materializada no existe, se devuelve un error.
pt_spec
Sí
Particiones que se van a eliminar. Debe especificar como mínimo una partición. El formato es
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). partition_col indica la columna de partición y partition_col_value indica el valor de la partición. -
Ejemplos
-
Ejemplo 1: elimine una partición de una vista materializada particionada.
ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds='1'); -
Ejemplo 2: elimine las particiones que cumplen una condición específica de una vista materializada particionada.
ALTER MATERIALIZED VIEW mf_mv_blank_pts DROP PARTITION (ds>='1' AND ds<='2');
-
Consulta de penetración en vistas materializadas
Es posible que una vista materializada particionada no contenga datos de todas las particiones; por ejemplo, si solo actualiza las más recientes. Cuando una consulta apunta a una partición sin datos en la vista materializada, el sistema recurre automáticamente a la tabla particionada de origen. La siguiente imagen ilustra este proceso.

Para habilitar la función de consulta de penetración en una vista materializada, establezca el siguiente parámetro:
Al crear la vista materializada, agregue la configuración "enable_auto_substitute"="true" a tblproperties.
A continuación se muestra un ejemplo de cómo usar una vista materializada compatible con consultas de penetración.
-
Cree una vista materializada particionada compatible con consultas de penetración.
-- 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 los datos de la partición
20210101en la vista materializadamv.SELECT * FROM mv WHERE dt='20210101'; -
Consulte los datos de la partición
20210102en la vista materializadamv. El sistema ejecuta automáticamente una consulta de penetración sobre la tabla de origen porque esta partición no 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 los datos de un rango de particiones en la vista materializada
mv. El sistema ejecuta automáticamente una consulta de penetración sobre la tabla de origen para los datos no materializados. Luego los combina con los datos materializados mediante una operaciónUNIONantes de devolver el 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;
Reglas de facturación
Los costos de una vista materializada constan de dos componentes:
-
Tarifas de almacenamiento
Las vistas materializadas consumen almacenamiento físico, lo que genera tarifas de almacenamiento bajo el modelo pay-as-you-go. Para obtener más información, consulte Storage pricing (pay-as-you-go).
-
Costos de cómputo
Crear, actualizar y consultar una vista materializada consume recursos de cómputo y genera costos de cómputo. Esto incluye las reescrituras de consultas cuando la vista es válida.
Si su proyecto de MaxCompute utiliza un plan de no se cobran tarifas adicionales.
-
Si su proyecto de MaxCompute utiliza un plan pay-as-you-go, MaxCompute calcula los costos según la complejidad del SQL y el volumen de datos de entrada. Para obtener más información, consulte Standard SQL pricing. Tenga en cuenta lo siguiente:
La instrucción SQL que actualiza una vista materializada es la misma que su consulta de definición. Si el proyecto está vinculado a un resource group de cómputo de suscripción, la operación usa los recursos adquiridos sin costo adicional. Si el proyecto usa un resource group pay-as-you-go, el costo depende del volumen de datos de entrada y de la complejidad del SQL. Después de una actualización, las tarifas de almacenamiento se cobran según el tamaño real de la vista materializada.
Cuando una vista materializada es válida, la reescritura de consultas lee los datos desde la vista. El volumen de datos de entrada depende de la vista materializada y no de la tabla de origen. Si la vista no es válida, la reescritura de consultas no está disponible y las consultas leen directamente de la tabla de origen. Para obtener más información, consulte Query materialized view status.
Cuando una vista materializada se construye a partir de uniones de varias tablas, puede producirse un aumento excesivo de datos. Leer desde la vista materializada no siempre reduce los costos en comparación con leer desde las tablas de origen.
Referencias
Para obtener información sobre la reescritura de consultas en vistas materializadas, consulte Materialized view query rewrite.
Para obtener información sobre las actualizaciones programadas de vistas materializadas, consulte Scheduled refresh of materialized views.