Добавить данные в хранилище BLOB-объектов с помощью функции Azure - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь получить данные из очереди с помощью QueueTrigger и записать данные в Blob. Для первого сообщения из триггера очереди данные были успешно получены из очереди и записаны в файл большого двоичного объекта. Когда очередь запускается во второй раз, она получает новые сообщения из очереди и записывает сообщения в файл большого двоичного объекта. Но второе сообщение перезаписало первое сообщение в файле большого двоичного объекта. Пожалуйста, дайте мне знать, как добавить второе сообщение в файл большого двоичного объекта, не удаляя / удаляя первое сообщение. Поскольку я новичок в функциях Python и Azure, кодировка может быть неправильной.

import logging
import azure.functions as func
def main(queuemsg: func.QueueMessage, outputblob: func.Out[str]):
    msg = queuemsg.get_body()
    logging.info('Python Queue trigger function processed %s', msg)
    outputblob.set(msg)

Ответы [ 2 ]

1 голос
/ 02 июля 2020

Я наткнулся на аналогичную проблему сопоставления результатов запроса к базе данных и записи в один большой двоичный объект с использованием функций azure. Я думаю, что этот подход подойдет и для вашей проблемы. Вам просто нужно сериализовать содержимое для выходного большого двоичного объекта в виде строки.

import azure.functions as func
import json
import logging

def main(msgIn: func.QueueMessage, documents: func.DocumentList, outputBlob: 
func.Out[str]) -> None:
    if documents:
        logging.info('documents found in cosmosdb, saving to blob...')
        #need to serialize as a string to output to blob.
        complete_docs_str = ','.join([doc.to_json() for doc in documents])
        outputBlob.set(complete_docs_str)
        logging.info('wrote to blob: %s', complete_docs_str) 
0 голосов
/ 28 мая 2020

На данный момент он не поддерживает прямое добавление к BLOB-объекту, поэтому вы можете попробовать другие способы.

Во-первых, вы можете объединить входной и выходной BLOB-объекты, вы можете обратиться к приведенному ниже коду.

import logging

import azure.functions as func

def main(msg: func.QueueMessage,inputblob: func.InputStream,outputblob: func.Out[str]) -> None:
    logging.info('Python queue trigger function processed a queue item: %s',
                 msg.get_body().decode('utf-8'))
    outmessage=inputblob.read().decode("utf-8")+msg.get_body().decode('utf-8')
    logging.info(outmessage)
    outputblob.set(outmessage)

Другой способ - использовать azure Storage blob SDK для его реализации, есть метод append_block .

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