使用 Azure 函数将数据追加到 Blob 存储



我正在尝试使用QueueTrigger从队列中检索数据并将数据写入Blob。对于来自队列触发器的第一条消息,数据已成功从队列中检索并写入 Blob 文件。当队列第二次触发时,它已从队列中检索新消息,并将消息写入 blob 文件。但第二条消息已覆盖 Blob 文件中的第一条消息。请让我知道如何在不删除/删除第一条消息的情况下将第二条消息附加到 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)

目前不支持直接追加到 blob,因此您可以尝试其他方法。

首先,您可以组合输入 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 存储 blob SDK 来实现它,有一个append_block方法。

我偶然发现了一个类似的问题,即整理数据库查询结果并使用 azure 函数写入单个 blob。我认为这种方法也适用于您的问题。只需将输出 blob 的内容序列化为字符串。

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) 

最新更新