Поддерживает ли Cloud Spanner команду TRUNCATE TABLE?

Я хочу очистить все значения из таблицы. Он имеет несколько вторичных индексов. Я попытался сделать это, зафиксировав транзакцию с помощью Mutation.delete("MyTable", KeySet.all()) (см. документы здесь). Но я получил ошибку:

ошибка: INVALID_ARGUMENT: io.grpc.StatusRuntimeException: INVALID_ARGUMENT: транзакция содержит слишком много мутаций.

Как я могу эффективно очистить содержимое таблицы?


person Mike Curtiss    schedule 06.04.2017    source источник


Ответы (1)


Cloud Spanner не поддерживает такую ​​команду усечения. Если в вашей таблице нет вторичных индексов, вы можете указать KeySet.all() в своем удалении, как указано выше, но это может привести к сбою, если ваша таблица имеет вторичные индексы и велика.

Лучший способ сделать то, что вы хотите, — выдать updateDdl RPC, включая следующие операторы:

1) Для каждого вторичного индекса в MyTable включите соответствующий оператор DROP INDEX

2) DROP TABLE MyTable

3) При необходимости заново создайте таблицу и индексы с помощью операторов CREATE TABLE и CREATE INDEX соответственно.

Обратите внимание, что вам разрешено и рекомендуется включать все эти операторы в один updateDdl RPC. Преимущество этого в том, что он дает вам атомарную («все или ничего») семантику.

person Mike Curtiss    schedule 06.04.2017