IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> odps进阶之参数化视图 -> 正文阅读

[大数据]odps进阶之参数化视图

前言

我们知道Oracle和MySQL数据库有存储过程,方便将通用的数据处理流程保存下来,可以像个函数一样直接调用很方便。

ODPS(MaxCompute) 里面也有一个阉割版的存储过程---参数化视图。我们知道视图是将固定的计算逻辑存储下来,通过调用视图简化代码。而参数化视图就是可以在视图代码里调用入参变量,从而达到更灵活的使用视图,一个通用逻辑供多种场景使用。

参数化视图支持传入任意表或其它变量,定制视图的行为。

语法

create [or replace] [if not exists] <view_name>( <variable_name> <variable_type> [, <variable_name> <variable_type> ...])
[returns <return_variable> table (<col_name> <col_type> comment <col_comment> [,<col_name> <col_type> comment <col_comment>])]
[comment <view_comment>]
as
{<select_statement> | begin <statements> end}
  • view_name:必填。视图名称。
  • variable_name:必填。视图变量名称。
  • variable_type:必填。视图变量参数类型。
  • return_variable:可选。视图返回的变量名称。
  • col_name:可选。视图返回列的名称。
  • col_type:可选。视图返回列的类型。
  • col_comment:可选。视图返回列的注释。
  • view_comment:可选。视图的注释。
  • select_statement:条件必选。select子句。
  • statements:条件必选。视图脚本。

样例

固定返回格式

定义参数化视图?

CREATE OR REPLACE VIEW tmp_param_view1(
-- 入参 (可以是任意类型任意个数)
     @input_a    TABLE (
        ida     STRING COMMENT '主键'
        ,name  STRING COMMENT '姓名'
        ,* ANY
     )
    ,@input_b    TABLE (
        idb     STRING COMMENT '主键'
        ,class  STRING COMMENT '班级'
        ,* ANY
     )
    ,@www  ANY COMMENT '其他参数'
)
-- 定义固定出参类型
returns @res TABLE (
     web     STRING COMMENT '网站'
    ,id      STRING COMMENT '主键'
    ,name    STRING COMMENT '姓名'
    ,class   STRING COMMENT '班级'
)
COMMENT '测试视图_固定返回'
AS 
select 
    @www as web
    ,a.ida
    ,a.name
    ,b.class
from @input_a a -- 例子里的表都是入参,也可以是指定的表名
join @input_b b
on a.ida = b.idb
;

上面的代码中定义了一个参数化视图tmp_param_view1,有三个入参(@input_a,@input_b,@www),其中前两个是表类型参数(表结构中的'* ANY' 表示入参的表除了前两个id ,name字段以外也可以有其他任意个数的任意类型字段),第三个@www 标记'ANY' 关键字表示任意类型,也可以使用String/Bigint等关键字指定类型。 返回参数@res?为表类型。

调用参数化视图

-- 准备数据
with tmp_a as(
    select 1 as ida,'Rick' as name,'30' as age
)
,tmp_b as(
    select 1 as idb,'A' as class,'SH' as city
)
-- 调用视图
select * from tmp_param_view1(tmp_a,tmp_b,'CSDN');

可以看到,我们只需要将准备好的数据(表,临时表皆可) 传递到视图内就可以灵活调用。

不定返回格式

定义参数化视图?

CREATE OR REPLACE VIEW tmp_param_view2(
-- 入参
     @input_a    TABLE (
        ida     STRING COMMENT '主键'
        ,name  STRING COMMENT '姓名'
        ,* ANY  -- input_a表里面的字段可以有除了ida,name以外的任意个数任意字段
     )
    ,@input_b    TABLE (
        idb     STRING COMMENT '主键'
        ,class  STRING COMMENT '班级'
        ,* ANY
     )
    ,@www  STRING COMMENT '其他参数'
)
-- 不指定出参格式
COMMENT '测试视图_不定返回'
AS 
select 
@www as web,* -- 同时将a,b两个表的全部入参字段返回
from @input_a a
join @input_b b
on a.ida = b.idb
;

上面的代码中定义了一个参数化视图tmp_param_view2,有三个入参(@input_a,@input_b,@www),其中前两个是表类型参数(表结构中的'* ANY' 表示入参的表除了前两个id ,name字段以外也可以有其他任意个数的任意类型字段),第三个@www 标记'ANY' 关键字表示任意类型,也可以使用String/Bigint等关键字指定类型。 返回值不定义,因为我们期望把a,b表里面的全部字段都返回。

调用参数化视图

-- 准备数据
with tmp_a as(
    select 1 as ida,'Rick' as name,'30' as age
)
,tmp_b as(
    select 1 as idb,'A' as class,'SH' as city
)
-- 调用视图
select * from tmp_param_view2(tmp_a,tmp_b,'CSDN');

可以看到,这个视图和上面的视图的差异在于,返回格式不固定,会根据入参的字段动态调整。

在实际应用中,灵活的使用,会减少很多重复劳动,提示工作效率,会有意想不到的效果,建议大家都去试试。

有任何疑问都可以在下方留言,我会尽量进行解答!

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:49:30  更:2022-04-18 17:53:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:30:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码