使用视图
视图可用于任何 SQL 查询或子查询的 FROM
子句中。执行期间,Vertica 会在内部将查询中使用的视图名称替换为视图定义中使用的实际查询。
创建视图示例
以下
CREATE VIEW
语句创建 myview
视图,它会将 store.store_sales_fact
表中所列的各个客户的所有收入相加,并按州对结果进行分组:
=> CREATE VIEW myview AS
SELECT SUM(annual_income), customer_state FROM public.customer_dimension
WHERE customer_key IN (SELECT customer_key FROM store.store_sales_fact)
GROUP BY customer_state
ORDER BY customer_state ASC;
您可以使用此视图查找所有大于 20 亿美元的合并收入:
=> SELECT * FROM myview where sum > 2000000000 ORDER BY sum DESC;
SUM | customer_state
-------------+----------------
29253817091 | CA
14215397659 | TX
5225333668 | MI
4907216137 | CO
4581840709 | IL
3769455689 | CT
3330524215 | FL
3310667307 | IN
2832710696 | TN
2806150503 | PA
2793284639 | MA
2723441590 | AZ
2642551509 | UT
2128169759 | NV
(14 rows)
启用视图访问
您可以查询自己创建的任何视图。要使其他非超级用户能够访问视图,您必须:
-
对视图的基表具有 SELECT...WITH GRANT OPTION 权限
-
授予用户对视图架构的 USAGE 权限
-
授予用户对视图本身的 SELECT 权限
下面的示例向 user2
授予视图 schema1.view1
的访问权限。
=> GRANT USAGE ON schema schema1 TO user2;
=> GRANT SELECT ON schema1.view1 TO user2;
重要
如果视图引用外部表,您还必须向外部表的架构授予 USAGE 权限。因此,如果 schema1.view1
引用外部表 schema2.extTable1
,您还必须向 schema2
授予 user2
USAGE 权限:
=> GRANT USAGE on schema schema2 to user2;
有关详细信息,请参阅GRANT(视图)。