如何从Databrick/PySpark覆盖/更新Azure Cosmos DB中的集合
我在Databricks笔记本上编写了以下PySpark代码,成功地将sparkSQL的结果保存到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
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,密钥已重新生成。谢谢,我明白了。我从来没有想过要好好抓。是否有显示如何更新现有文档/集合的链接?