Una vista es una tabla virtual definida por una consulta SQL. Use las vistas para encapsular lógica de consulta compleja, de modo que otros usuarios o aplicaciones puedan ejecutar un SELECT sencillo contra la vista en lugar de escribir la consulta subyacente.
Por ejemplo, si su almacén de datos guarda registros de pedidos y necesita que el equipo de análisis acceda a resúmenes de ingresos sin exponer los detalles brutos de las transacciones, cree una vista que una y agregue previamente las tablas relevantes. El equipo de análisis consulta la vista y las tablas subyacentes permanecen protegidas.
Hologres admite la creación de vistas basadas en tablas internas, tablas externas u otras vistas, incluidas las vistas federadas que combinan datos de tablas internas y externas.
Notas de uso
Reglas de modificación de datos
|
Tipo de vista |
¿Se pueden modificar los datos? |
|
Vista de tabla única |
Sí: los cambios en la vista actualizan la tabla base, y los cambios en la tabla base se reflejan en la vista. Restrinja el acceso de escritura a la vista para evitar modificaciones no intencionales. |
|
Vista de múltiples tablas |
No: los datos en las vistas de múltiples tablas son de solo lectura. |
Vistas entre esquemas y SLPM
Si el modelo de permisos a nivel de esquema (SLPM) está habilitado en una base de datos, no cree vistas que hagan referencia a tablas de distintos esquemas. Dado que los diferentes esquemas requieren distintos permisos bajo SLPM, las vistas entre esquemas no se pueden consultar.
Autorización de vistas
Hologres sigue el modo de definidor de seguridad de PostgreSQL para la autorización de vistas. Para que un usuario consulte una vista, se deben cumplir las dos condiciones a continuación:
|
Rol |
Permiso obligatorio |
|
Creador de la vista (Usuario A) |
SELECT en la tabla base |
|
Consumidor de la vista (Usuario B) |
SELECT en la vista |
El Usuario B no necesita acceso directo a la tabla base, solo a la vista. Los permisos del creador de la vista se usan cuando se ejecuta la vista.
Sintaxis
CREATE VIEW <view_name> AS
SELECT column1, column2, ...
FROM table_name
WHERE [condition];
<view_name> es el nombre de la vista. La instrucción SELECT define la consulta que representa la vista.
Ejemplos
Crear una vista basada en una tabla interna
-
Cree una tabla interna e inserte datos de ejemplo:
CREATE TABLE holo_test ( amount decimal(10, 2), rate decimal(10, 2) ); INSERT INTO holo_test VALUES (12.12, 13.13), (14.14, 15.15), (16.16, 17.17), (17.1, 17), (18.01, 19); -
Cree una vista sobre la tabla y consúltela:
CREATE VIEW holo_view AS SELECT * FROM holo_test; SELECT * FROM holo_view;Salida esperada:
amount | rate --------+------- 12.12 | 13.13 14.14 | 15.15 16.16 | 17.17 17.10 | 17.00 18.01 | 19.00 (5 rows)
Crear una vista basada en una tabla externa
-
Cree una tabla externa asignada a una tabla de MaxCompute (ODPS):
CREATE FOREIGN TABLE IF NOT EXISTS holo_foreign_test ( amount decimal(10, 2), rate decimal(10, 2) ) SERVER odps_server OPTIONS (project_name '<projectname>', table_name '<odps_name>'); SELECT * FROM holo_foreign_test LIMIT 2; -
Cree una vista sobre la tabla externa y consúltela:
CREATE VIEW foreign_view AS SELECT * FROM holo_foreign_test; SELECT * FROM foreign_view LIMIT 2;Salida esperada:
amount | rate --------+------- 12.12 | 13.13 14.14 | 15.15
Crear una vista federada
Una vista federada unifica datos de tablas internas y externas en un único objeto consultable. Esto resulta útil cuando parte de sus datos reside en el almacenamiento interno de Hologres y el resto se encuentra en una fuente externa como MaxCompute; puede consultar ambos orígenes mediante una sola vista sin mover los datos. La vista federada usa UNION ALL para combinar ambas fuentes.
CREATE VIEW view1 AS
SELECT * FROM holo_view
UNION ALL
SELECT * FROM foreign_view;
SELECT * FROM view1;
Salida esperada:
amount | rate
--------+-------
12.12 | 13.13
14.14 | 15.15
16.16 | 17.17
17.1 | 17
18.01 | 19
12.12 | 13.13
14.14 | 15.15
16.16 | 17.17
17.10 | 17.00
18.01 | 19.00
12.12 | 13.13
14.14 | 15.15
16.16 | 17.17
17.1 | 17
18.01 | 19
12.12 | 13.13
14.14 | 15.15
16.16 | 17.17
17.1 | 17
18.01 | 19
(20 rows)
Más operaciones
Cambiar el nombre de una vista
Para cambiar el nombre de las vistas se requiere Hologres V2.1.18 o posterior.
ALTER VIEW <view_name_1> RENAME TO <view_name_2>;
Eliminar una vista
DROP VIEW <view_name>;
Listar todas las vistas
Ejecute el siguiente código SQL para listar todas las vistas del esquema actual:
SELECT n.nspname AS "Schema",
c.relname AS "Name",
CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'm' THEN 'materialized view'
WHEN 'i' THEN 'index'
WHEN 'S' THEN 'sequence'
WHEN 's' THEN 'special'
WHEN 'f' THEN 'foreign table'
WHEN 'p' THEN 'table'
WHEN 'I' THEN 'index'
END AS "Type",
pg_catalog.pg_get_userbyid(c.relowner) AS "Owner"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('v', '')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1, 2;
Si usa un cliente psql, ejecute \dv en su lugar.
Consultar el DDL de una vista
CREATE EXTENSION hg_toolkit;
SELECT hg_dump_script('<view_name>');