当前位置: 首页 > 知识库问答 >
问题:

如何用Java SQL API重命名Azure Cosmos DB中的容器?

宿景曜
2023-03-14

看起来不可能在Azure Cosmos DB中重命名容器。应该通过批量操作将其复制到新容器中。我如何用Java SDK做到这一点?有样品吗?

共有2个答案

宰父熙云
2023-03-14

是的,你是对的。当前无法更改容器名称。按照我理解,您希望丢弃旧容器(正如您最初希望重命名的那样),并将数据迁移到新容器。

数据迁移工具是一个很好的工具:教程:使用数据迁移工具将数据迁移到Azure Cosmos DB

此外,请查看Java的大容量执行器库、API文档和示例

您可以在BulkExecutor类中使用ImportAll:

ConnectionPolicy connectionPolicy = new ConnectionPolicy();
 RetryOptions retryOptions = new RetryOptions();
 
 // Set client's retry options high for initialization
 retryOptions.setMaxRetryWaitTimeInSeconds(120);
 retryOptions.setMaxRetryAttemptsOnThrottledRequests(100);
 connectionPolicy.setRetryOptions(retryOptions);
 connectionPolicy.setMaxPoolSize(1000);

 DocumentClient client = new DocumentClient(HOST, MASTER_KEY, connectionPolicy, null);

 String collectionLink = String.format("/dbs/%s/colls/%s", "mydb", "mycol");
 DocumentCollection collection = client.readCollection(collectionLink, null).getResource();

 DocumentBulkExecutor executor = DocumentBulkExecutor.builder().from(client, collection,
     collection.getPartitionKey(), collectionOfferThroughput).build();

 // Set retries to 0 to pass control to bulk executor
 client.getConnectionPolicy().getRetryOptions().setMaxRetryWaitTimeInSeconds(0);
 client.getConnectionPolicy().getRetryOptions().setMaxRetryAttemptsOnThrottledRequests(0);
 
 for(int i = 0; i < 10; i++) {
   List documents = documentSource.getMoreDocuments();

   BulkImportResponse bulkImportResponse = executor.importAll(documents, false, true, 40);

   // Validate that all documents inserted to ensure no failure.
   if (bulkImportResponse.getNumberOfDocumentsImported() < documents.size()) {
      for(Exception e: bulkImportResponse.getErrors()) {
          // Validate why there were some failures.
          e.printStackTrace();
      }
      break;
   }
 }

 executor.close();
 client.close();

如果有帮助就告诉我。

乐宜民
2023-03-14

我通过链接而不是复制所有的数据来解决问题。这将模拟容器的重命名。而不是一个容器,我现在使用两个容器。第一个容器只包含第二个容器的名称。

现在我可以构建新版本的容器了。如果我完成了,我会更改保存的容器名称。然后我扔下旧容器。

棘手的是通知应用程序的所有节点使用新的容器名称。

 类似资料:
  • 问题内容: 在使用以下代码初始化时,我拼错了名称: 我实际上打算用名称创建环境。尝试将文件夹重命名为时,我发现这没有太大帮助。激活环境的名称仍重命名旧的。 我想知道如何重命名环境? 问题答案: 默认情况下,virtualenv不支持环境重命名。仅删除virtualenv目录并使用正确的名称创建一个新目录是更安全的。您可以通过以下方式做到这一点: 激活您的virtualenv: 创建当前安装的软件包

  • 我想知道如何更改包名称我的项目没有任何错误。我试了很多次,但最后却有很多错误。例如导入语句中的错误,R类错误...等等,请帮助我解决这个问题。谢谢

  • 问题内容: 我需要重命名集群中的几个索引(它们的名称必须更改,我不能使用alias)。 我看到没有支持的方法来执行此操作,我发现最接近的方法是重命名索引的目录,我在集群中尝试了此方法。 该集群有3台计算机,并且分片在每台计算机上复制。我关闭了上elasticsearch ,改名到并重新启动。 群集的状态为黄色,elasticsearch正在做一些魔术来恢复正确的状态。过了一段时间我最终 正在使用和

  • 我需要重命名集群中的多个索引(必须更改它们的名称,我不能使用别名)。 我看到没有支持的方法可以做到这一点,我找到的最接近的方法是重命名索引的目录,我在集群中尝试了这个方法。 集群有 3 台机器 、 和 ,每个机器上都复制了分片。我关闭了上的弹性搜索,将重命名为,然后重新启动。 集群的状态是黄色的,弹性搜索正在使用一些魔法来恢复正确的状态。过了一段时间,我最终得到了 可用且完全复制(我猜是从和恢复的

  • 我试图将我的应用程序上传到Play Store,但谷歌不允许应用程序包含名称为“example.xxxxx”的软件包。我的问题是,我的包叫做“com.example.mainActivity”,我已经尝试重命名它了,但我对IntelliJ所能做的就是将部件重命名为“mainActivity”。“榜样”依旧。在尝试通过进入清单并用不同的名称重构它来更改示例之后,IntelliJ刚刚用新名称创建了一个

  • 我有DynamoDB表,我想重命名它。似乎没有任何重命名表的命令或选项。以前有人给桌子重新命名过吗?