一. 快速生成多行的序列
需求:请生成一列数据, 内容为 1 , 2 , 3 , 4 ,5
-- 快速生成多行的序列
-- 方式一
select explode(split("1,2,3,4,5",","));
--方式二
/*
序列函数sequence(start,stop,step):生成指定返回的列表数据
[start,stop]必须传入,step步长可传可不传,默认为1,也可以传入负数,传入负数的时候,大数要在前,小数
*/
select explode(sequence(1,5));
select explode(sequence(1,5,1));
select explode(sequence(1,5,2));
select explode(sequence(5,1,-1));
select explode(sequence(5,1,-2));
二. 快速生成表数据
需求: 生成一个两行两列的数据, 第一行放置 男 M 第二行放置 女 F
-- 快速生成表数据
/*
stack(n,expr1, ..., exprk),n代表要分为n行,expr1, ..., exprk是放入每一行每一列的元素
如果不传入列名,则默认使用col0,col1等作为列名
*/
select stack(2,"男","M","女","F");
select stack(2,"男","M","女","F") as (n,v);
三. 如何将一个SQL的结果给到另外一个SQL进行使用
3.1 视图
临时视图关键字:temporary
- 分为永久视图和临时视图
- 相同点:都不会真正的存储数据。主要是用来简化SQL语句
- 不同点:永久试图会创建元数据,在多个会话(Session)中都有效;临时视图只在当前会话有效
3.2 视图和表的区别
视图不会真正的存储数据,而表会真正的存储数据。
但是视图和表在使用的时候区别不大
-- 如何将一个SQL的结果给到另外一个SQL进行使用
-- 方式一:子查询
select
*
from (select stack(2,"男","M","女","F"));
-- 方式二:子查询
with tmp as (
select stack(2,"男","M","女","F")
) select * from tmp;
-- 方式三:永久视图
create view forever_view as
select stack(2,"男","M","女","F");
select * from forever_view;
-- 方式四:临时视图
create temporary view tmp_view as
select stack(2,"男","M","女","F");
select * from tmp_view;
-- 方式五:创建表
create table tb as
select stack(2,"男","M","女","F");
select * from tb;
-- 缓存表:类似Spark Core中的缓存,提高数据分析效率
cache tab