#1.创建表
CREATE TABLE show_log_table (
log_id BIGINT,
show_params ARRAY<STRING>
) WITH (
'connector' = 'datagen',
'rows-per-second' = '1',
'fields.log_id.min' = '1',
'fields.log_id.max' = '10'
);
#2.SQL查询
SELECT
log_id,
show_params,
t.show_param as show_param
FROM show_log_table
-- array 炸开语法
CROSS JOIN UNNEST(show_params) AS t (show_param);
2.集合操作
#1.创建view1
create view t1(s) as values ('c'), ('a'), ('b'), ('b'), ('c');
#2.创建view2
create view t2(s) as values ('d'), ('e'), ('a'), ('b'), ('b');
#3.SQL查询
#3.1 union操作
(SELECT s FROM t1) UNION (SELECT s FROM t2);
#3.2 union all操作
(SELECT s FROM t1) UNION ALL(SELECT s FROM t2);
#4.结果
#4.1 union的结果
c
a
b
d
e
#4.2 union all的结果
c
a
b
b
c
d
e
a
b
b
#5.结论
union求并集,会去重。
union all求并集,不会去重。
3.use & show语法
#1.查看元数据库
show catalogs;
#2.切换元数据库
use catalog default_catalog;
#3.查看数据库
show databases;
#4.切换数据库
use default_database;
#5.查看表
show tables;
#6.查看视图
show views;
#7.查看当前的数据库
show current database;
#8.查看当前的元数据库
show current catalog;
~~~
### explain
explain,查看SQL的执行计划,语法如下:
~~~shell
explain plan for SQL语句
~~~
案例如下:
~~~shell
#1.创建表
CREATE TABLE source_table (
user_id BIGINT COMMENT '用户 id',
name STRING COMMENT '用户姓名',
server_timestamp BIGINT COMMENT '用户访问时间戳',
proctime AS PROCTIME()
) WITH (
'connector' = 'datagen',
'rows-per-second' = '1',
'fields.name.length' = '1',
'fields.user_id.min' = '1',
'fields.user_id.max' = '10',
'fields.server_timestamp.min' = '1',
'fields.server_timestamp.max' = '100000'
);
#2.查看执行计划
EXPLAIN PLAN FOR
select user_id,
name,
server_timestamp
from (
SELECT
user_id,
name,
server_timestamp,
row_number() over(partition by user_id order by proctime) as rn
FROM source_table
)
where rn = 1;
~~~