如何从Databrick/PySpark覆盖/更新Azure Cosmos DB中的集合

如何从Databrick/PySpark覆盖/更新Azure Cosmos DB中的集合,pyspark,azure-cosmosdb,pyspark-sql,azure-databricks,Pyspark,Azure Cosmosdb,Pyspark Sql,Azure Databricks,我在Databricks笔记本上编写了以下PySpark代码,成功地将sparkSQL的结果保存到Azure Cosmos DB,代码行如下: df.write.format("com.microsoft.azure.cosmosdb.spark").mode("overwrite").options(**writeConfig3).save() 完整代码如下: test = spark.sql("""SELECT Sales.CustomerID AS pattersonID1 ,Sa

我在Databricks笔记本上编写了以下PySpark代码,成功地将sparkSQL的结果保存到Azure Cosmos DB,代码行如下:

df.write.format("com.microsoft.azure.cosmosdb.spark").mode("overwrite").options(**writeConfig3).save()
完整代码如下:

test = spark.sql("""SELECT
  Sales.CustomerID AS pattersonID1
 ,Sales.InvoiceNumber AS myinvoicenr1
FROM Sales
limit 4""")


## my personal cosmos DB
writeConfig3 = {
    "Endpoint": "https://<cosmosdb-account>.documents.azure.com:443/",
    "Masterkey": "<key>==",
    "Database": "mydatabase",
    "Collection": "mycontainer",
    "Upsert": "true"
}

df = test.coalesce(1)

df.write.format("com.microsoft.azure.cosmosdb.spark").mode("overwrite").options(**writeConfig3).save()
而是使用新的查询Cosmos DB覆盖/更新集合,并按如下方式追加容器:

test = spark.sql("""SELECT
  Sales.CustomerID AS pattersonID1
 ,Sales.InvoiceNumber AS myinvoicenr1
FROM Sales
limit 4""")


## my personal cosmos DB
writeConfig3 = {
    "Endpoint": "https://<cosmosdb-account>.documents.azure.com:443/",
    "Masterkey": "<key>==",
    "Database": "mydatabase",
    "Collection": "mycontainer",
    "Upsert": "true"
}

df = test.coalesce(1)

df.write.format("com.microsoft.azure.cosmosdb.spark").mode("overwrite").options(**writeConfig3).save()
并且仍将原始查询保留在集合中:


有没有办法完全覆盖或更新cosmos DB?

您的问题是文档有一个您从未指定的唯一id,因此会自动为您生成guid。编写新文档时,您只需将其中一个非id、非唯一的属性pattersonID1重命名为pattersonID2,并按照预期创建一个新文档。没有可能知道这个新文档与原始文档相关,因为它是一个全新的文档,有自己的属性集


您可以通过查询或读取、修改、然后替换现有文档来更新现有文档。或者,您可以选择查询旧文档并逐个删除它们,或者通过存储过程以事务方式在分区内进行批量删除。最后,您可以删除并重新创建一个容器,该容器将删除当前存储在其中的所有文档。

您可以使用Azure Cosmos DB SQL API SDK for Python来管理数据库及其在此NoSQL数据库服务中包含的JSON文档,而不是使用Spark to Cosmos DB Connector:

创建Cosmos DB数据库并修改其设置

创建和修改容器以存储JSON文档集合

创建、读取、更新和删除容器中的JSON文档项

使用类似SQL的语法查询数据库中的文档


Yikes-您刚刚嵌入了您的Cosmos DB密钥并将其共享给全世界。请尽快重新生成您的密钥。我编辑了帐户名,他们的密钥不在你的问题范围内,但是任何有足够代表性的人都可以查看修订历史记录。谢谢David,密钥已重新生成。谢谢,我明白了。我从来没有想过要好好抓。是否有显示如何更新现有文档/集合的链接?