本文共 3541 字,大约阅读时间需要 11 分钟。
在Data Lake Analytics(以下简称DLA)中使用视图(VIEW)功能,可以大大简化对于重复SQL,特别是较为复杂的SQL语句的编写和维护。目前DLA中还不支持SQL视图的物化。在使用DLA进行跨多个数据源的联合分析场景中,使用视图,尤其能够方便后续对于包含重复SQL片段的SQL查询语句的编写和维护。
在介绍视图的功能之前,需要注意两个概念:
1)在DLA中,每个SCHEMA()下的表必须属于同一类数据源(通过CATALOG属性指定),也必须属于同一个LOCATION约束的数据源。2)和表类似,视图必须属于一个SCHEMA,在SQL中引用视图时,可以通过“schema_name.view_name”来进行引用,如果当前数据库连接的schema是视图所属的SCHEMA时,在SQL中可以直接用视图名进行引用。
语法:
CREATE [OR REPLACE]VIEW view_name [(column_list)]AS select_statement
例如:
CREATE OR REPLACEVIEW `basic_test`.`test_view_1_oss`ASSELECT *FROM nationORDER BY n_nationkey
通过CREATE语句创建视图。如果指定名称的视图之前在系统中已经存在,则会报错提示视图已经存在。通过CREATE OR REPLACE方式,如果指定名称的视图之前在系统中已经存在,则会进行更新,用新的视图定义替换之前的视图定义。
视图元数据相关信息查询的方式有很多种,下面一一列举:
语法:
SHOW CREATE (TABLE | VIEW) view_name
例如:
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 nationORDER BY n_nationkey | utf8 | utf8_general_ci |+-----------------+-----------------------------------------------------------------------------------------+----------------------+----------------------+
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 nationORDER 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) ASSELECT *FROM tpch_test.nationORDER BY n_nationkey;CREATE OR REPLACE VIEW view_2 (col_1, col_2) ASSELECT col1, col2 FROM view_1 a;
注意:
语法:
DROP VIEW [IF EXISTS] view_name
转载地址:http://phsxx.baihongyu.com/