我在Databricks Notebook上编写了以下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数据库(mydatabase)和集合(mycontainer)
当我尝试通过以下更改SparkSQL来覆盖容器时(只需将pattersonID1更改为pattersonID2,将myinvoicenr1更改为myinvoicenr2
test = spark.sql("""SELECT
Sales.CustomerID AS pattersonID2
,Sales.InvoiceNumber AS myinvoicenr2
FROM Sales
limit 4""")
而是使用新查询Cosmos DB覆盖/更新集合,将容器追加如下:
仍将原始查询保留在集合中:
有没有办法完全覆盖或更新cosmos DB?
您的问题是文档具有唯一性id
(您从未指定过的内容,因此会自动为您生成guid)。在编写新文档时,您刚刚将id
非唯一性,非唯一属性重命名pattersonID1
为pattersonID2
,并且它只是按预期的方式创建了一个新文档。无法知道这个新文档与原始文档有关,因为它是一个全新的文档,具有自己的属性集。
您可以通过查询(或阅读它们),修改它们然后替换它们来更新现有文档。或者,您可以选择查询旧文档并删除它们(一个或一个,或者通过存储过程以事务方式作为分区中的一批删除操作)。最后,您可以删除并重新创建一个容器,该容器将删除当前存储在其中的所有文档。
原来如此。我从来没有想过身份证-好抓住。是否存在显示如何更新现有文档/集合的链接?