全部产品
云市场

能否增加/更改分区?

更新时间:2017-12-01 16:27:08

Q:如果一开始并没有分区字段,是否可以增加或更改分区?

A:您不可以在源表上直接增加/更改分区键,分区键定义一旦创建就不能更改。但您可以再建一张新分区表,使用动态分区 SQL 把源表数据导入到新分区表。

Q:如何更新 MaxCompute 表/分区中的数据?

A:MaxCompute(原 ODPS)不支持直接对表数据进行更新(UPDATE)操作。

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

Q:如何删除 MaxCompute 表/分区中的数据?

A:MaxCompute(原 ODPS)不支持直接对表数据进行删除(DELETE)操作。您可以通过以下方法进行删除:

  • 通过删除(DROP)表达到删除数据的目的。

  • 若是非分区表,可以通过TRUNCATE TABLE table_name;语句清空表数据,也可以用覆盖写的功能实现类似的功能。

    示例一:若想删除 TableA 表里的 Col=1 的数据,语句如下:

    INSERT OVERWRITE TABLE TableA SELECT a,b,c.... FROM TableA WHERE Col <> 1;

    示例二:若想删除全部数据,语句如下:

    INSERT OVERWRITE TABLE TableA SELECT a,b,c.... FROM TableA WHERE 1=2;

  • 若是分区表,可以通过ALTER TABLE table_name DROP IF EXISTS PARTITION(分区名=‘具体分区值’)语句,只需删除对应的分区即可删除对应的数据。示例如下:

    假设表 testtable 的分区列为 ds,现在需要删除 ds=’20170520’的分区。语句如下:

    ALTER TABLE testtable DROP IF EXISTS PARTITION (ds='20170520');

  • 通过 INSERT+WHERE 条件,把需要的数据导入到另一张新分区/表中或就地更新,INSERT 语句支持源表和目的表是同一张表。例如:insert overwrite table sale_detail select * from sale_detail where name=“mengyonghui”