簡體   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