ODPS SQL
DDL语句
表的创建
- 新建一个自定义的表:create table if not exists A (字段名 字段类型);
- 新建一个表,字段与现有表一致,但数据并没有复制:create table if not exists A like B;
添加分区
ALTER TABLE A ADD IF NOT EXISTS PARTITION (分区字段名=’…’);
删除分区
alter table A drop if EXISTS PARTITION(分区字段名=’’);
删除表
drop table if EXISTS 工作空间名称.表名;
清空表
TRUNCATE TABLE 表名;
表的重命名
alter table A rename to B;
表的生命周期
alter table A set lifecycles 30;
增加字段
alter table A add columns(字段名 字段类型);
查看表的信息
desc A
DML语句
表中数据的更新(insert语句)
(1)insert overwrite table A select * from B :表示将表A的数据复制到表B中,前提是字段一致;
PS:ODPS平台的SQL仅支持以上的更新数据库语句;其中关键字overwrite表示覆盖写入,可换成into表示追尾写入;
表中数据的读取(select语句)
- select * from A:读取全部字段数据
- select uid from A:读取某一字段全部数据
- select distinct uid from A :读取某一字段不重复数据
- select * from A where uid=’a’:读取某一字段值等于指定值的数据
- select * from (select * from A)a:嵌套语句
- select sum(uid) from A group by uid:分组查询
- select * from A order by uid limit 4:全局排序,必须与limit 配合使用
- select row_number() over (partition by item order by score) as row_num from A:对字段item按字段score值进行局部排序并给出序号
表的合并(union all 语句)
select * from (
select * from t1 where uid=‘a’
union all
select * from t2 where uid=‘a’) t;
表的连接(join 语句与left outer join 语句)
- left join…on
select * from A a left join B b on a.id=b.id; 左连接 - join
select * from A a join B b on a.item = b.item; 返回A,B表中字段item值相同的数据 - left outer join
select * from A a left outer join B b on a.item = b.item;
多表查询
SELECT *
FROM
A a
LEFT JOIN (SELECT * FROM B WHERE 某字段='') b
ON a.某字段=b.某字段
LEFT JOIN (SELECT * FROM C WHERE 某字段='') c
ON a.某字段=c.某字段
LEFT JOIN (SELECT * FROM D) d
ON a.某字段=d.某字段
WHERE a.某字段='';
sql
查询列不重复值
**distinct **
SELECT distinct category FROM dws_datareal_myj_pos_weekly_promo_depth;