我的问题是,我不时想删除来自Java的Azure表的内容。该表拥有数百万行,因此它似乎不是逐个删除所有实体的好方法(因为有很多REST API调用)。Azure Tables删除并创建表失败
我试图删除,然后再次创建表,但我的代码失败。
getTableClient().deleteTableIfExists("tablename");
getTableClient().createTableIfNotExists("tablename");
这里是我的堆栈跟踪:
com.microsoft.windowsazure.services.table.client.TableServiceException: Conflict
at com.microsoft.windowsazure.services.table.client.TableServiceException.generateTableServiceException(TableServiceException.java:57)
at com.microsoft.windowsazure.services.table.client.TableOperation$2.execute(TableOperation.java:339)
at com.microsoft.windowsazure.services.table.client.TableOperation$2.execute(TableOperation.java:322)
at com.microsoft.windowsazure.services.core.storage.utils.implementation.ExecutionEngine.executeWithRetry(ExecutionEngine.java:110)
at com.microsoft.windowsazure.services.table.client.TableOperation.performInsert(TableOperation.java:374)
at com.microsoft.windowsazure.services.table.client.TableOperation.execute(TableOperation.java:551)
at com.microsoft.windowsazure.services.table.client.CloudTableClient.execute(CloudTableClient.java:638)
at com.microsoft.windowsazure.services.table.client.CloudTableClient.createTable(CloudTableClient.java:173)
at com.microsoft.windowsazure.services.table.client.CloudTableClient.createTableIfNotExists(CloudTableClient.java:251)
at com.microsoft.windowsazure.services.table.client.CloudTableClient.createTableIfNotExists(CloudTableClient.java:197)
我必须一会儿之间睡觉两个电话?我宁愿在这里等待,因为我希望尽可能缩短这个操作的时间,以便其他线程可以在表中再次写入。
还是有安全的方法来做到这一点?在Azure中的表使用尽可能少的REST API调用尽可能DELETE FROM tablename;
:
编辑
是的,我正在寻找的SQL语句的等效。
我目前最好的拍摄是:
getTableClient().deleteTableIfExists("tablename");
// TODO: solve problem with new creation!
boolean success = false;
while (!success) {
try {
success = getTableClient().createTableIfNotExists("tablename");
} catch (StorageException e) {
System.err.println("Log table recreation failed retrying in 5 sec");
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {}
}
我找一个更好,更安全的解决方案,然后这个!
不,你正在寻找SQL Drop Table。您不希望被实体(行)删除,因为这可能是多个(结算)事务。删除表是一个事务。 – Paparazzi