Переместите данные JSON из DocumentDB (или CosmosDB) в Azure Data Lake - PullRequest
0 голосов
/ 03 мая 2018

У меня много файлов JSON (в миллионах) в базе данных Cosmos (ранее называвшейся Document DB), и я хочу переместить ее в Azure Data Lake для холодного хранения.

Я нашел этот документ https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.documents.client.documentclient.readdocumentfeedasync?view=azure-dotnet, но в нем нет примеров для начала.

Как мне поступить, любые примеры кода высоко ценятся.

Спасибо.

Ответы [ 4 ]

0 голосов
/ 08 мая 2018

Вы также можете прочитать изменения через 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')
0 голосов
/ 03 мая 2018

Я предлагаю вам использовать Azure Data Factory для выполнения ваших требований.

Пожалуйста, обратитесь к этому документу о том, как экспортировать документы json из базы данных космоса, и к этому документу о том, как импортировать данные в ADL.

Надеюсь, это поможет вам.


Обновить ответ:

Пожалуйста, обратитесь к этому: Azure Cosmos DB в качестве источника , вы можете создать query в конвейере.

0 голосов
/ 04 мая 2018

Вы также можете использовать приложение логики. Можно использовать триггер таймера. Это было бы решение без кода

  1. Запрос документов
  2. Цикл документов
  3. Добавить в озеро данных

Преимущество заключается в том, что вы можете применять любые правила перед отправкой в ​​Data Lake

0 голосов
/ 03 мая 2018

Да, смена фида поможет.

У вас есть два варианта. Первый (что, вероятно, вам и нужно в этом случае) - использовать его через SDK.

У Microsoft есть подробная страница о том, как это сделать, включая примеры кода: https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed#rest-apis

Второй - это библиотека новостных лент, которая позволяет вам постоянно запускать службу, прослушивая изменения и обрабатывая их в соответствии с вашими потребностями. Более подробно с примерами кода библиотеки изменений см. Здесь: https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed#change-feed-processor

(Обе страницы (которые на самом деле одинаковые, только разные разделы) содержат ссылку на репозиторий Microsoft github, содержащий примеры кода.)

Имейте в виду, что вы все равно будете платить за использование этого в терминах RU / s, но, как мне кажется, оно относительно низкое (или, по крайней мере, ниже, чем то, что вы заплатили бы за вас, начните читать сами сборники). )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...