在Data Lake Analytics中使用视图html
在Data Lake Analytics(如下简称DLA)中使用视图(VIEW)功能,能够大大简化对于重复SQL,特别是较为复杂的SQL语句的编写和维护。目前DLA中还不支持SQL视图的物化。在使用DLA进行跨多个数据源的联合分析场景中,使用视图,尤为可以方便后续对于包含重复SQL片断的SQL查询语句的编写和维护。mysql
在介绍视图的功能以前,须要注意两个概念:
1)在DLA中,每一个SCHEMA(https://help.aliyun.com/docum...)下的表必须属于同一类数据源(经过CATALOG属性指定),也必须属于同一个LOCATION约束的数据源。sql
对于OSS,SCHEMA中LOCATION指向一个目录,后续在该SCHEMA下的表所指向的LOCATION必须从属于该SCHEMA的LOCATION目录;
对于其余实例型数据源(好比Table Store、RDS等),SCHEMA中LOCATION指向一个实例URL,后续在该SCHEMA下的表必须也属于该实例。
2)和表相似,视图必须属于一个SCHEMA,在SQL中引用视图时,能够经过“schema_name.view_name”来进行引用,若是当前数据库链接的schema是视图所属的SCHEMA时,在SQL中能够直接用视图名进行引用。数据库
语法:code
CREATE [OR REPLACE]
VIEW view_name [(column_list)]
AS select_statement
例如:orm
CREATE OR REPLACE
VIEW basic_test
.test_view_1_oss
AS
SELECT *
FROM nation
ORDER BY n_nationkey
经过CREATE语句建立视图。若是指定名称的视图以前在系统中已经存在,则会报错提示视图已经存在。经过CREATE OR REPLACE方式,若是指定名称的视图以前在系统中已经存在,则会进行更新,用新的视图定义替换以前的视图定义。htm
视图元数据相关信息查询的方式有不少种,下面一一列举:ci
查询视图的建立语句:
语法:get
SHOW CREATE (TABLE | VIEW) view_name
例如:io
SHOW CREATE VIEW basic_test.test_view_1_oss;
View | Create View | character_set_client | collation_connection |
---|---|---|---|
test_view_1_oss | CREATE VIEW basic_test .test_view_1_oss AS SELECT * |
FROM nation
ORDER BY n_nationkey | utf8 | utf8_general_ci |
---|
查询information_schema.views元数据:
SELECT * FROM information_schema.views WHERE table_schema = 'basic_test';
TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | VIEW_DEFINITION | CHECK_OPTION | IS_UPDATABLE | DEFINER | SECURITY_TYPE | CHARACTER_SET_CLIENT | COLLATION_CONNECTION |
---|---|---|---|---|---|---|---|---|---|
def | basic_test | test_view_1_oss | SELECT * |
FROM nation
ORDER BY n_nationkey | NONE | YES | mysql.sys@localhost | INVOKER | utf8 | utf8_general_ci |
| def | basic_test | test_view_2_oss | SELECT *
FROM nation | NONE | YES | mysql.sys@localhost | INVOKER | utf8 | utf8_general_ci |
---|
目前,DLA中不保存视图定义的详细列定义元数据信息。
DLA支持视图的嵌套,即VIEW 1定义指向VIEW 2,VIEW 2定义指向VIEW 3。
例如:
CREATE OR REPLACE VIEW view_1 (col1, col2, col3) AS
SELECT *
FROM tpch_test.nation
ORDER BY n_nationkey;
CREATE OR REPLACE VIEW view_2 (col_1, col_2) AS
SELECT col1, col2 FROM view_1 a;
注意:
在定义VIEW时,VIEW中指向的SQL语句中,建议对引用的table都加上所属的schema名,特别是在跨schema的场景下(schema1中的定义view,指向的SQL语句中目标表有其余schema的table或view)。
语法:
DROP VIEW [IF EXISTS] view_name
本文做者:julian.zhou
本文为云栖社区原创内容,未经容许不得转载。