–odps sql
––
–author:宋文理
–create time:2023-02-01 16:24:24
––
– 创建非分区表
CREATE TABLE csxx_ffq(
rq STRING COMMENT ‘日期’,
xh BIGINT COMMENT ‘序号’,
sj STRING COMMENT ‘数据’
)
COMMENT ‘测试数据(非分区表)’;
– 创建分区表
CREATE TABLE csxx_fq(
xh BIGINT COMMENT ‘序号’,
sj STRING COMMENT ‘数据’
)
COMMENT ‘测试数据(非分区表)’
PARTITIONED by(rq STRING COMMENT ‘日期’);
– 导入文件数据到非分区表620条数据
select * from csxx_ffq ;
– 采取多路输出的方式,将非分区表中的数据插入到分区表中
– 插入数据多路输出方式 非分区表->分区表
from csxx_ffq
insert overwrite table csxx_fq partition(rq=‘20180101’)
select xh,sj where rq=‘20180101’
insert overwrite table csxx_fq partition(rq=‘20180102’)
select xh,sj where rq=‘20180102’
insert overwrite table csxx_fq partition(rq=‘20180103’)
select xh,sj where rq=‘20180103’
insert overwrite table csxx_fq partition(rq=‘20180104’)
select xh,sj where rq=‘20180104’
insert overwrite table csxx_fq partition(rq=‘20180105’)
select xh,sj where rq=‘20180105’
insert overwrite table csxx_fq partition(rq=‘20180106’)
select xh,sj where rq=‘20180106’;
– 列出表的已有分区
show PARTITIONS csxx_fq;
– 查询数据
read csxx_fq;
– select * from csxx_fq; 该句错误,分区表select应该指定分区
– 动态分区方式
– 插入数据动态分区方式
– 从普通表向分区表中插入数据应该使用该方式
insert overwrite table csxx_fq partition(rq)
select xh,sj,rq from csxx_ffq;
– 查询数据
read csxx_fq;
– union all 将多个查询语句返回的结果集合进行合并处理
select a.* from(
select * from xsxx where bjbh=‘0101’
union all
select * from xsxx where bjbh=‘0104’
)a;
– 子查询举例 创建三张表并通过本地文件导入数据
– 创建商品信息表
create table if not exists spxx(
cbbh STRING COMMENT ‘出版编号’,
spmc STRING COMMENT ‘商品名称’,
splb STRING COMMENT ‘商品类别’,
spjg STRING COMMENT ‘商品价格’,
pjdj STRING COMMENT ‘评价等级’
)COMMENT ‘商品信息表’;
– 创建出版社信息表
create table if not exists cbsxx(
cbsbh STRING COMMENT ‘出版社编号’,
cbbh STRING COMMENT ‘出版编号’,
cbsmc STRING COMMENT ‘出版社名称’,
cbsj STRING COMMENT ‘出版时间’,
spmc STRING COMMENT ‘商品名称’
)COMMENT ‘出版社信息表’;
– 创建电商信息表
create table if not exists dsxx(
dsptbh STRING COMMENT ‘电商平台编号’,
dsptmc STRING COMMENT ‘电商平台名称’,
cbsmc STRING COMMENT ‘出版社名称’,
spmc STRING COMMENT ‘商品名称’
)COMMENT ‘电商信息表’;
select * from spxx;
select * from cbsxx;
select * from dsxx;
– join操作
select a.dsptmc,a.cbsmc,s.*
from spxx s
left outer join(
select d.dsptmc,d.dsptbh,c.cbsmc,c.cbbh
from dsxx d
left outer join cbsxx c
on d.cbsmc=c.cbsmc
)a
on s.cbbh=a.cbbh;
– 优化
select a.dsptmc,a.cbsmc,s.*
from spxx s
left outer join(
select d.dsptmc,c.cbsmc,c.cbbh from cbsxx c
right outer join dsxx d on d.cbsmc=c.cbsmc
)a
on s.cbbh=a.cbbh;