Trafodion不推荐在单一语句中删除或更新超过10000*n行(n为节点数)。所以在有大的删除或更新时,可能的情况下,应该分成多条语句执行,每条不超过10000*n行。具体语法如下,
delete [first 10000*n] from table_name where ...
如果要按照这种方式实现,可能需要结合for..loop循环删除数据。
除此之外,Trafodion提供另外一种delete数据的方法,语法如下,
delete with no rollback from table_name where ...
[with no rollback]这种方式是利用了HBase快照的特性,因此比普通的delete要快很多,但缺点是目前只能在表上没有索引的情况下执行。如果在有索引的表上执行delete with no rollback from …,则会报以下错误,
*** ERROR[3232] INSERT, UPDATE, or DELETE of table TRAFODION.DONGHANG.TEST1 with dependent Index : TRAFODION.DONGHANG.IDX_TEST1 is not allowed when NO ROLLBACK transaction setting is in effect.
*** ERROR[8822] The statement was not prepared.
如果非要在有索引的表上这么做,可以使用以下方法,
alter table table_name disable index index_name;
delete with no rollback from table_name;
populate index index_name on table_name;
另外,如果要清空表数据的话,可以用purgedata,类似于Oracle中的Truncate,语法如下,
purgedata table_name