全部产品
云市场

如何更新和删除数据?

更新时间:2018-11-19 14:54:30

MaxCompute(原ODPS)不支持直接对表数据删除(DELETE)和更新(UPDATE)的语法。

a) 如果需要更新(UPDATE)数据

只能把源分区/表数据导入到新分区/表,在导入过程中执行相应的更新逻辑。新分区/表可以与源相同,即就地更新。

对于非分区列,操作只支持重命名和新建,不支持对列的删除。

ODPS不支持update语句,建议您把需要update后的结果select出来后,然后用insert overwrite的方法写回原表。例如:

  1. insert overwrite table t1 select a1,case when id=1 then 'a' else 'b' end as a2 from t1;

b) 如果需要删除(DELETE)的数据:

  • 可以通过删除(DROP)表达到数据删除目的;
  • 非分区表可以通过 “TRUNCATE TABLE table_name;”语句清空表数据;
  • 分区表可以通过“ALTER TABLE table_name DROP IF EXISTS PARTITION(分区名=‘具体分区值’)”删除分区达到删除整个分区数据的目的。

    1. ALTER TABLE TABLE_NAME DROP [IF EXISTS] PARTITION partition_spec;
  • 也可以通过INSERT+WHERE条件把需要的数据导入到另一张新分区/表中或就地更新,INSERT语句支持源和目的表是同一张表。例如:

    1. insert overwrite table sale_detail select * from sale_detail where name="mengyonghui";

    删除A表里的col=1的数据:

    1. insert overwrite table tableA select * from tableA where col<>1;

    删除全部数据:

    1. insert overwrite table tableA select * from tableA where 1=2;

    删除A表某分区里id=123的数据:

    1. insert overwrite table yunfengdhTopic2 partition (ds='20160802') select id, name, rq, addtional from yunfengdhTopic2 where id<>123 and ds='20160802';

    删除分区全部数据:

    1. insert overwrite table yunfengdhTopic2 partition (ds='20160730') select id, name, rq, addtional from yunfengdhTopic2 where 1=2 and ds='20160730';