繁体   English   中英

将 JSON 数据从 DocumentDB(或 CosmosDB)移动到 Azure Data Lake

[英]Move JSON Data from DocumentDB (or CosmosDB) to Azure Data Lake

我在 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但它没有任何示例。

我应该如何进行,任何代码示例都受到高度赞赏。

谢谢。

是的,更改提要可以解决问题。

你有两个选择。 第一个(在这种情况下可能是您想要的)是通过 SDK 使用它。

微软有一个关于如何在此处包含代码示例的详细页面: https : //docs.microsoft.com/en-us/azure/cosmos-db/change-feed#rest-apis

第二个是 Change Feed Library,它允许您始终运行一项服务,监听更改并根据您的需要处理它们。 有关更改源库代码示例的更多详细信息,请访问: https : //docs.microsoft.com/en-us/azure/cosmos-db/change-feed#change-feed-processor

(两个页面(实际上是相同的只是不同的部分)都包含指向 Microsoft github 存储库的链接,其中包含代码示例。)

请记住,您仍然需要按 RU/s 支付使用此费用,但从我看来它相对较低(或至少低于您开始阅读收藏时支付的费用。)

我建议您使用Azure 数据工厂来实现您的要求。

请参阅此文档了解如何从 cosmos db 导出 json 文档以及有关如何将数据导入 ADL 的文档

希望对你有帮助。


更新答案:

请参考: Azure Cosmos DB 作为源,您可以在管道中创建query

您还可以通过 Spark 读取更改提要。 以下 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')

您还可以使用逻辑应用程序。 可以使用定时器触发器。 这将是一个无代码解决方案

  1. 查询文件
  2. 循环遍历文档
  3. 添加到数据湖

优点是您可以在发送到数据湖之前应用任何规则

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM