在Data Lake Analytics中使用視圖

在Data Lake Analytics中使用視圖html

  1. 概述

在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中能夠直接用視圖名進行引用。數據庫

  1. 建立視圖

語法: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

  1. 查詢視圖元數據

視圖元數據相關信息查詢的方式有不少種,下面一一列舉: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中不保存視圖定義的詳細列定義元數據信息。

  1. 嵌套視圖

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)。

  1. 刪除視圖

語法:

DROP VIEW [IF EXISTS] view_name

本文做者:julian.zhou

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索