我在Cosmos DB(以前称为Document DB)中有很多JSON文件(以百万计),我想将它移动到Azure Data Lake中,用于冷藏。
我找到了这个文件https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.documents.client.documentclient.readdocumentfeedasync?view=azure-dotnet,但它没有任何样本可以开始。
我应该如何处理,我们非常感谢任何代码示例。
感谢。
答案 0 :(得分:1)
是的,改变提要将起到作用。
您有两种选择。第一个(在这种情况下可能是你想要的)是通过SDK使用它。
Microsoft有一个详细的页面,介绍如何在此处添加代码示例:https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed#rest-apis
第二个是更改源库,它允许您始终运行服务来监听更改并根据您的需要进行处理。有关更改Feed库的代码示例的更多详细信息,请参见:https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed#change-feed-processor
(两个页面(实际上只是不同的部分)都包含指向包含代码示例的Microsoft github存储库的链接。)
请记住,就RU / s而言,您仍将被收取使用费用,但从我看来它相对较低(或者至少低于您开始阅读收藏品所支付的费用)。 )
答案 1 :(得分:1)
我建议您使用Azure Data Factory来实现您的要求。
请参阅此doc,了解如何从cosmos db和doc导出json文档,了解如何将数据导入ADL。
希望它对你有所帮助。
更新答案:
请参阅:Azure Cosmos DB as source,您可以在管道中创建query
。
答案 2 :(得分:1)
您还可以通过Spark阅读更改Feed。下面的python代码示例生成由loaddate为已更改的数据分区的镶木地板文件。可以按日计划在Azure Databricks笔记本中使用:
# Get DB secrets
endpoint = dbutils.preview.secret.get(scope = "cosmosdb", key = "endpoint")
masterkey = dbutils.preview.secret.get(scope = "cosmosdb", key = "masterkey")
# database & collection
database = "<yourdatabase>"
collection = "<yourcollection"
# Configs
dbConfig = {
"Endpoint" : endpoint,
"Masterkey" : masterkey,
"Database" : database,
"Collection" : collection,
"ReadChangeFeed" : "True",
"ChangeFeedQueryName" : database + collection + " ",
"ChangeFeedStartFromTheBeginning" : "False",
"ChangeFeedUseNextToken" : "True",
"RollingChangeFeed" : "False",
"ChangeFeedCheckpointLocation" : "/tmp/changefeedcheckpointlocation",
"SamplingRatio" : "1.0"
}
# Connect via Spark connector to create Spark DataFrame
df = spark.read.format("com.microsoft.azure.cosmosdb.spark").options(**dbConfig).load()
# set partition to current date
import datetime
from pyspark.sql.functions import lit
partition_day= datetime.date.today()
partition_datetime=datetime.datetime.now().isoformat()
# new dataframe with ingest date (=partition key)
df_part= df.withColumn("ingest_date", lit(partition_day))
# write parquet file
df_part.write.partitionBy('ingest_date').mode('append').json('dir')
答案 3 :(得分:0)
您也可以使用逻辑应用程序。可以使用定时器触发器。这将是一个无代码解决方案
优点是您可以在发送到Data Lake之前应用任何规则