視圖(View)是一個虛擬的表,其內容由SQL查詢定義,視圖可以封裝復雜的查詢邏輯,使得可以通過查詢簡單的視圖來獲取復雜的結果集。Hologres支持基于內部表及外部表創建VIEW,您可以使用單張表、多張表或者其他視圖來創建視圖。本文為您介紹在Hologres中創建視圖命令說明及相關操作。
注意事項
在創建和查看視圖時,您需要注意如下事項:
如果數據庫的權限模型為SLPM,創建一個View引用了跨Schema的兩個或多個表時,由于Schema間權限不互通的原因,此View將無法被訪問。因此不建議在SLPM管理的數據庫中創建跨Schema的View。
如果視圖中數據來自于單張表時,修改視圖中的數據,表數據會隨之更新。修改表數據時,對應視圖也會更新。在使用單表視圖時,建議您謹慎修改視圖數據,以避免對應的表數據被修改影響業務。
如果視圖中的數據來源于多張表時,不支持修改視圖數據。
命令格式
創建視圖的語法格式如下。
CREATE VIEW <view_name> AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];
view_name為視圖名稱,SELECT ...
語句為查詢語句。
使用示例
創建內部表視圖
創建內部表,示例語句如下。
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);
基于內部表創建視圖并查詢表數據,示例語句如下。
create view holo_view as select * from holo_test; select * from holo_view; amount | rate --------+------- 12.12 | 13.13 14.14 | 15.15 16.16 | 17.17 17.10 | 17.00 18.01 | 19.00 (5 rows)
創建外部表視圖
創建外部表,示例語句如下。
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;
基于外部表創建視圖并查詢表數據,示例語句如下。
create view foreign_view as select * from holo_foreign_test; select * from foreign_view limit 2; amount | rate --------+------- 12.12 | 13.13 14.14 | 15.15
創建內部表及外部表的聯合視圖
基于內部表和外部表創建聯合視圖并查詢表數據,示例語句如下。
create view view1 as select * from holo_view union all select * from foreign_view;
select * from view1;
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)
其他相關操作
修改視圖名稱
Hologres從V2.1.18版本起支持修改視圖名稱,命令語法如下:
ALTER VIEW <view_name_1> RENAME TO <view_name_2>;
刪除視圖
刪除視圖的命令語法如下。
DROP VIEW <view_name>;
查看所有視圖和視圖的DDL
您可以執行如下命令查看所有視圖,如果您通過psql客戶端查看所有視圖,也可以執行
\dv
進行查看。--sql命令 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;
您可以執行如下命令查看VIEW的具體DDL:
create extension hg_toolkit; select hg_dump_script('<viewname>');
文檔內容是否對您有幫助?